题外话:人生其实很简单,想要的就去争取,得到了就珍惜,失去了就忘记。
192.168.67.130
1 |
|
http://192.168.67.130:10000
nc 192.168.67.130 9999
根据nc连接结果来看,brainpan.exe就是9999端口上运行的程序。 但是我们不知道密码,于是要通过逆向来获取。
brainpan.exe
file
1 |
|
windows 32位程序
strings
strings brainpan.exe
查看程序的字符串,确认该程序就是目标主机9999端口运行的。
动态分析
本地windows机器做目标机,kali做攻击机。对程序进行动态调试。
windows主机,用调试器打开该程序
kali连接windows主机的9999端口
demo.py让程序报错
1 |
|
d2.py 找到EIP
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 4000
运行该命令,生成4000字节字符串。
修改demo.py的这一行
1 |
|
运行demo.py,得到报错的地址35724134
1 |
|
d3.py 确认EIP
修改demo.py的这一行
1 |
|
运行demo.py,确保EIP地址被B字符串覆盖。
d4.py 检查坏字符
1 |
|
右上角寄存器面板,看到EDX寄存器的值为“AAAAAAAAAAAAAAAA…“,于是选中EDX,右键 follow in dump,左下角翻到A字符串的结尾。
查看发送的字符,从01开头,ff结尾,没有找到坏字符。一般来说\x00是坏字符,忘记加到字符里检查了,下次注意。
生成shellcode
nmap -O 192.168.67.130
这里有一点迷茫,因为IP为192.168.67.130的目标主机,看起来是个linux主机,但是运行的程序brainpan.exe却是一个windows 32的应用程序。
所以到底该生成linux的shellcode,还是windows的shellcode?
不管了,先生成windows的shellcode,在本地192.168.67.1的windows主机尝试是否能反弹shell吧。
1 |
|
找到JMP ESP
JMP ESP 是跳转到栈顶寄存器的汇编指令。 因为栈顶的内存地址是动态的,而程序的JMP ESP指令是相对固定的。 可以利用该指令来跳转到栈顶的位置。这可以方便我们定位内存地址,利于exp的编写。
1 |
|
immunity debugger
1 |
|
d5.py
将上述得到的信息结合起来,EIP跳转地址——栈顶0x311712f3
,栈长度524,没有坏字符的shellcode。
1 |
|
执行后成功反弹shell。原理就不解释了,看以前的文章。
d6.py
在本地windows运行成功后,把shellcode改为linux的
msfvenom -l payload | grep linux |
1 |
|
成功进行栈溢出。
wine
cat /home/puck/*.sh
1 |
|
suid提权
1 |
|
无论输入什么,都显示上述一行,经过测试它有溢出错误。 详情看下一篇文章