漏洞利用小经验

#文件处理软件漏洞利用#

##起因##

最近看了下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 SettingsAdministratorDesktopxxxx.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的空间也不大。

签名档: 从事网络安全和编程的我,很希望能找到志同道合的朋友交流。 欢迎cn博客的好友拍砖,留言。
原文地址:https://www.cnblogs.com/M4ster/p/exp_.html