漏洞利用小经验

Posted m4sterx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了漏洞利用小经验相关的知识,希望对你有一定的参考价值。

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

##起因##

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

 

以上是关于漏洞利用小经验的主要内容,如果未能解决你的问题,请参考以下文章

挖洞经验 | 绕过WAF限制利用php:方法实现OOB-XXE漏洞利用

挖洞经验 从XSS漏洞到四步CSRF利用实现账户劫持

挖洞经验 | 利用XSS和CSRF漏洞远程实现PayPal合作方网站未授权账户访问

经验分享 | XSS手工利用方式

IE UAF 漏洞(CVE-2012-4969)漏洞分析与利用

反序列化漏洞的利用