首页 > 代码库 > 漏洞利用小经验
漏洞利用小经验
#文件处理软件漏洞利用#
##起因##
最近看了下fuzz平台的样本,看到几个推荐的样本,在xp下immdbg确实发现了2处漏洞。
## 细节 ##
1. 内存写入 mov [eax],[eax+4] mov[[eax]+4],[eax] 触发了内存写入异常,附近有seh ,所以如果没调试器的话会被程序处理。shift+f9 继续运行
接下来程序会提示一些错误,告诉用户处理过程中出错。
2. 在程序退出时,又一可控的call: mov esp,[eax] call [esp+10] ,eax直接指向可控的区域,关键点:利用 call eax, jmp eax都可以
## 过程 ##
1. 起初直接利用2,直接构造 [eax]指向栈中可控的内容,让esp+10 也指向栈中,【esp+10]也在栈中指向shellcode,call就直接就走起了。
xp下稳定利用,测试了几个版本发现栈是很固定的。win7下测试了下发现栈的基质和xp下不一样,但对于系统来说是固定的。所以还不能做到夸系统版本稳定。
2.双剑合璧,将1.2有机的结合在一起。
## 双剑合璧 ##
思路:利用1在固定地址addr写入call eax的地址addr1(固定的);接下来利用2,将 [eax]的值设置为addr-10,那么 [esp+10]正好取到我们addr1,下面eip将来到eax处,它将把addr-10作为指令解析(这里要向办法不要出现非法指令,或者触发异常)
1.利用写在可写并且固定的内存中写入我们的‘暗桩’,这个固定位置我选择了位于主程序的.data段,
Address=0052B000
Size=0000D000 (53248.)
Section=DATA
Contains=data
Type=Imag 01001002
Access=RW
Initial access=RWE
mona 给我们的帮助
0x00400000 | 0x00625000 | 0x00225000 | False | False | False | False | False | 版本 [xx.exe] (C:\Documents and Settings\Administrator\Desktop\xx\xx.exe)
固定地址我选择了 530020 ,call eax 我们假设为 0x410000,
布局就是这样 20 00 53 00 ,00 00 41 00
mov [eax],[eax+4] 这条顺利执行,因为 目标地址可写
mov[[eax]+4],[eax] 这条指令就会出问题,[eax]可以正常访问取到值,但是 目标地址在.code段中,是不可写的触发异常,所以文件解析就此停住,并被seh捕获,警告用户。
2. 来到 mov esp,[eax] call [esp+10] 处
构造布局 10 00 53 00 ,00 NOP 。。。。 shellcode ...
mov esp,[eax] : esp = 530010
esp+10 = 530020
[esp+10] = 410000
call [esp+10] = call 410000
【410000 】 : call eax
所以eip将要来到这里
1000 ADC BYTE PTR DS:[EAX],AL
53 PUSH EBX
0000 ADD BYTE PTR DS:[EAX],AL
90 NOP
90 NOP
90 NOP
因为在栈中所以 前几条指令都会被顺利执行。nop完后就是我们的shellcode 。
## 还要继续 ##
样本太小了才8K,留给我们shellcode的空间也不大。
漏洞利用小经验