2010年西电攻防exploit 01题解


 

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


要想输入产生溢出,显然要从它生成的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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值