码迷,mamicode.com
首页 > 其他好文 > 详细

【Reverse】360CTF Reverse160

时间:2015-04-18 17:21:57      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:

来源: 360 CTF 2014

题目:找到程序中的flag

类型: Reverse

分数: 160

难度:难(难中易三个级别)

描述:

提示:请先搭建该EXE的执行环境
1. 在本地安装appserv[如果不知道appserv是啥,请自行so.com一下],配置HTTP端口为80
2. 将您修改后的Exploit.html以及压缩包中的shell.dat复制到www目录下
3. 运行MFC_ASM.exe,如果您成功修复了该Exploit.html,会弹出key,否则,崩溃

答案: 6AC7DE29BADEFC72

?

?

?

解题思路:

用od加载程序,根据提示程序会从本地服务器下载Exploit.html文件,谷歌后我们可以知道MFC程序通常会使用InternetReadFile函数读取网页数据,因此我们可以给该函数下个断点

技术分享

按下button1,程序断在了下面这个地方,因为这里对时间有要求,所以我们可以设定一个条件断点记录下buffer地址,并在下面设一个断点,这样就可以通过F9来 运行程序

技术分享

我们可以看到网页数据放到了0012d5d8

技术分享

单步往下跟

技术分享

这里将数据移动到了0140000,在调用这个函数之前下个条件断点

技术分享

重新运行程序,我们可以从log里面看到

技术分享

在数据窗口里面看不了这个地址,暂时不管,继续单步往下跟

技术分享

这里有个leave指令,F8

技术分享

可以看到返回地址已经被覆盖,因此可以判断这里存在缓冲区溢出漏洞

技术分享

看来shellcode是要通过这里来执行,在leave指令这里下个断点后重新运行程序,修改EBP到shellcode的上面

技术分享

F8到return指令,这里我们分析一下shellcode

技术分享

我们用IDA6.6打开Exploit.html,按F5可以将每一个函数编译成C语言,我们可以分析出图中标出的几个比较重要的函数

技术分享

Shellcode通常会以GetKernel32Addr模块开始,我们在GetKernel32Addr函数处按X可以找到引用的函数

技术分享

我们跳转到了init函数,我们再按C看看还有没有别的函数,提示失败,那就先尝试一下从init处执行shellcode,我们将ESP处的值设置为0012de84+778 = 12E5FC 运行,但是并没有弹出flag,看来光有init函数是不够的,往下找找,CDD处有一段未定义的代码,按C

技术分享

看来这里极有可能是入口点,我们在上一步中将返回地址调整为0012de84+CDD = 12EB69,运行

技术分享

弹出了flag

技术分享

最后的入口点按照这个第二次复现的时候就没能正确工作,所以这里可能要在最后的leave处做多次尝试才可以。

@Reference:bluecake

【Reverse】360CTF Reverse160

标签:

原文地址:http://www.cnblogs.com/windcarp/p/4437686.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!