title: 漏洞战争小记
date: 2018-07-08 10:31:46
categories:
!address edi
lmm模块名 v (lmm查看模块的详细信息)
ub
call ecx
去判断对应的是哪个控件函数。有时溢出的数据会破坏堆栈不能通过kp定位溢出函数,可以通过报错地址在IDA中找到函数,然后windbg中断入函数,分配完栈空间后给ebp+4下写入断点 ba w 1 地址
。
调试rep movsd溢出函数 , 可能多次调用溢出函数,导致不动准确的定位溢出函数何时被调用,rep movsd溢出报错后可能会看到ecx的次数,确定ecx, 下条件断点ecx==次数。
内存断点断不下就用硬件断点。
py-office-tools 分析格式
C:\> python pyOffice.py -f exploit.xlb > exploit.txt”
解决动态加载:
解决动态加载:
覆盖SEH结构
pdf中嵌套JavaScript代码实现 Heap Spary
然后通过ROP跳到 0x0c0c0c0c
。
Windbg命令:
!heap -p -a
、 dt _HEAP_FREE_ENTRY
、 dt _LIST_ENTRY
软件调试中常用htc、hpc、hfc、hpa
。
dd poi(ebp+8)
ln 69a69868
基于HeapPage漏洞分析方法
!gflag +hpa 开启页堆进行调试
gflags -i ProcessName.exe +hpa
开启页堆。Shift+F4
打开条件记录断点设置 ,查看log Alt+L
, 可以观察数值的变化。基于HTC的漏洞分析方法
gflag.exe -i 目标.exe +htc
来判断是否发生溢出
用溢出错误处地址减去首次中断的目标地址。确定允许复制的数据最大长度。
Heap block at 030609F0 modified at 03060D48 past requested size of 350。
大小为350堆块 0x030609F0
在 0x03060D48
处被修改
基于HPA的漏洞分析方法 (CVE-2012-1876需要重新分析)
解决动态加载POC的两种方法P88:
sxe ld:ModuleName
命令在首次加载目标模块时断下,然后再对地址下断点。页堆失效,不弄中断
gflags -i ProcessName.exe +hpa
开启页堆。WinDbg不支持子进程调试
.childdbg 1
开启子进程调试,
通过 sxe ld:目标模块
在模块加载时中断,然后对目标地址下断点。
通过堆溢出可以覆盖虚函数 P134
P149
unsigned short int size = 2; // 65540时为4
2 - 5 = 65533
!heap -p -a 溢出堆块地址
可以查看被溢出堆块的信息, 以及该堆块的分配过程。AB无符号, GL有符号。即包含A或B的跳转指令为无符号指令,包含G或L的为有符号指令.
基于条件记录断点的漏洞分析方
f2
然后 shift+f4
https://blog.didierstevens.com/programs/pdf-tools/
基于源码调试的漏洞分析方法
bu 0x55ea6514 “.if(1){.echo ’num ==’;dd ebx l1;gc}”
基于类函数定位的漏洞分析方法
mov ptr[EAX], ECX
我们可以通过控制打印栈上内容的数量(即增加%x的数量),控制EAX的值(目标地址)。
可以通过控制打印字符的长度(用%100x,%200x等来控制打印长度),控制ECX的值(要写入大小)。
最后利用mov ptr[EAX],ECX来任意地址写。 https://cartermgj.github.io/2016/11/17/windows-fsb
动态调试快速定位漏洞源码
!gflag -i iexpoler +hpa
!heap -p -a ecx
Objects with JS code (1): [5]
表示 对象5是一段javascript 代码OpenAction (1): [1]
打开PDF后执行的动作,引用对象为1
保存
object 3 出来的被加密的代码为jsencode
js_decode file jsencode $> jsdecode
js_analyse variable jsdecode $> shellcode
show shellcode
sctect -v variable shellcode
可以模拟运行shellcodeCVE-2013-3660 重新分析
CVE-2014-1767