Hard_socnet2(逆向调试提权)

admin 2023年1月22日01:21:11评论41 views字数 3207阅读10分41秒阅读模式

0x01 主机发现

sudo arp-scan -l
Hard_socnet2(逆向调试提权)


0x02 端口扫描

sudo nmap -p- 10.0.2.8
Hard_socnet2(逆向调试提权)


0x03 服务识别

sudo nmap -p22,80,8000 -sV 10.0.2.8
Hard_socnet2(逆向调试提权)


0x04 服务识别

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

Hard_socnet2(逆向调试提权)


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

Hard_socnet2(逆向调试提权)


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


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

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

Hard_socnet2(逆向调试提权)


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

Hard_socnet2(逆向调试提权)


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


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

Hard_socnet2(逆向调试提权)


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

Hard_socnet2(逆向调试提权)


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

Hard_socnet2(逆向调试提权)


0x06 尝试提权到 sudo 用户

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

  1. 内核提权,uname -a

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

  2. sudo 提权

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

  3. suid 权限配置不当,通过执行高权限用户文件得到高权限。暂无找到suid相关的执行文件存在漏洞。


继续信息收集吧!!!

cat /etc/passwd
Hard_socnet2(逆向调试提权)


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

Hard_socnet2(逆向调试提权)


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

Hard_socnet2(逆向调试提权)


查看 monitor.py。这么几个要点:

  1. 在 8000 端口开启了 XMLRPC 服务

  2. 随机生成一个1000到9999的数字,用于后续验证

  3. 定义了5个函数,其中四个为执行固定命令,一个为执行外部传输的指令,但前提是随机数正确

Hard_socnet2(逆向调试提权)


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

Hard_socnet2(逆向调试提权)


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

Hard_socnet2(逆向调试提权)


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

Hard_socnet2(逆向调试提权)


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

Hard_socnet2(逆向调试提权)


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

Hard_socnet2(逆向调试提权)


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

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

Hard_socnet2(逆向调试提权)


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

Hard_socnet2(逆向调试提权)


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


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

Hard_socnet2(逆向调试提权)


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

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


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

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


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

Hard_socnet2(逆向调试提权)


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


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

gdb-peda$ pattern create 100'AAA%AAsAABAA$AAnAACAA-AA(AADAA;AA)AAEAAaAA0AAFAAbAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AAL'
Hard_socnet2(逆向调试提权)


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

Hard_socnet2(逆向调试提权)


生成测试字符串,前62个字符为A,后面为BCDE,可以看到BCDE被填充进EIP寄存器。


补充一下,BCDE字符在内存中是倒过来存储的,存储为EDCB。即0x45444342对应的为EDCB,后续我们指定地址的时候要注意。

Hard_socnet2(逆向调试提权)


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

Hard_socnet2(逆向调试提权)


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

Hard_socnet2(逆向调试提权)


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


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

Hard_socnet2(逆向调试提权)


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

Hard_socnet2(逆向调试提权)


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

python2 -c "import struct; print('A'*62 + struct.pack('I',0x08048676))"
Hard_socnet2(逆向调试提权)


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

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


执行 cat payload - | ./add_record

Hard_socnet2(逆向调试提权)


完成任务,提权到 root 


0x08 补充—内核提权

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


Hard_socnet2(逆向调试提权)


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


声明:本安全公告仅用来描述可能存在的安全问题,本公众号不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责


原文始发于微信公众号(白帽学子):Hard_socnet2(逆向调试提权)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月22日01:21:11
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Hard_socnet2(逆向调试提权)http://cn-sec.com/archives/1410081.html

发表评论

匿名网友 填写信息