2010年西电攻防exploit 01题解

来源:互联网 发布:python正则表达式符号 编辑:程序博客网 时间:2024/05/19 16:35


 

拿到这个题首先运行了一下,弹出了一个窗口,点确定就结束了,


要想输入产生溢出,显然要从它生成的exploit.dat入手。

 

在exploit.dat中输入了很长的”1111…”,然后又运行了程序,没有任何问题发生,看来要用OD分析汇编代码了。跟着代码单步调试,看到了如下图


如果没有exploit.dat,程序则创建了exploit.dat,判断文件大小,如果高于0x200,则直接跳到最后,跳过了读文件这一步,看来构造的字符串要小于0x200,本着越长越可能发生溢出的想法,那我就输入200个‘1‘,可还是什么事情也没发生。那就接着分析程序,F8走啊走,走到了这一步,让我看到了希望,


在一个不起眼的夹缝里还有一条判断文件大小的语句,如果高于0x84同样跳转,原来是这样,那我把文件里的‘1‘减去许多后运行发现程序还是正常的跑,当我把‘1’增加到81个时,出现了下图

说明我覆盖了程序中的指令,终于找到了可以干扰程序的点了,于是仔细分析代码,


通过ReadFile函数将数据读入buffer中,然后将buffer内容写入内存,如图


然后又将该数据写入栈地址为18fc40处,而在18fcc0处则存放着指向MessageBoxA地址的地址,如果输入数据大于0x80,则该地址被覆盖,找到了覆盖点就可以构造shellcode了,


由于覆盖的内容是地址的地址,所以最后三个字节是shellcode入口地址的地址,


最后三个字符覆盖地址,获得程序执行权后指向shellcode开头的0018fc44,0018fc44指向其下一条,这之后便是真正的shellocde,弹出一个对话框,

 

33DB               xor ebx,ebx

53                     push ebx

6865737300  push 'ess'

6873756363  push 'succ'

686F697420  push 'oit '

684578706C  push 'Expl' 

8BC4               mov eax,esp

53                    push ebx

50                    push eax

50                    push eax

53                   push ebx

B8AEFEB576 push eax 0x40116c

FFD0             call eax

83C414         add esp,0x14                  //维持栈平衡

C3                  retn


这是程序执行时的shellcode,设计这个shellocde时考虑如何获得这个MessageBoxA的地址,0x84的空间放不下动态获得API函数的shellcode,正好在程序中是通过动态方式获得的函数地址,并且把该地址存入了内存中,就是这个0x408514这个位置,正好拿来用喽。

再次运行程序,就出来了题目要求的形式。





0 0
原创粉丝点击