CTF--2016湖湘杯全国网络安全技能大赛之栈溢出pwnme

0x01 基础知识


本题目考察逆向分析,漏洞挖掘以及利用能力。

学习本篇技术,提前储备好栈溢出相关知识。

几个重要工具pwntools,GDB,IDA,objdump


http://www.cse.scu.edu/~tschwarz/coen152_05/Lectures/BufferOverflow.html

http://bitvijays.github.io/LFCBinaryExploitation.html

https://github.com/Gallopsled/pwntools

http://docs.pwntools.com/en/stable/about.html


题目


0x02 基本分析


拿到题目先对其进行基本分析,使用工具checksec.sh脚本检测。




根据这个判断程序运行在32位系统之上。没有开启canary和nx保护。

猜测题目考察内容多为溢出漏洞。运行程序


CTF--2016湖湘杯全国网络安全技能大赛之栈溢出pwnme_第1张图片


题目好像是关于水果的一个小游戏。

分别测试输入1,2发现并没有别的异常现象,只是普通的输入输出。


0x03 静态分析


于是乎采用大神器ida进行分析。


CTF--2016湖湘杯全国网络安全技能大赛之栈溢出pwnme_第2张图片


F5快捷键


CTF--2016湖湘杯全国网络安全技能大赛之栈溢出pwnme_第3张图片

CTF--2016湖湘杯全国网络安全技能大赛之栈溢出pwnme_第4张图片


分支进行判断,发现选项1,2,3,4,6,其它都是无意义输入。

只有5会进入一个getfruit函数。


CTF--2016湖湘杯全国网络安全技能大赛之栈溢出pwnme_第5张图片


同时还注意到左侧出现了getflag函数,敏感函数。


CTF--2016湖湘杯全国网络安全技能大赛之栈溢出pwnme_第6张图片


仔细看发现这个函数可以获取flag,但是这个函数没有地方调用。

main主函数没有调用的地方。但是发现scanf函数有溢出漏洞。

于是乎,打算利用此函数漏洞,看能不能实现溢出覆盖返回地址,

强制其跳转到getflag函数地址。覆盖返回EIP为getflag函数地址。

即可获得flag,溢出多少地址可以覆盖栈中的返回地址。


0x04 动态分析



objdump -d pwnme > pwnme.asm

先用这个命令查找函数地址


CTF--2016湖湘杯全国网络安全技能大赛之栈溢出pwnme_第7张图片


CTF--2016湖湘杯全国网络安全技能大赛之栈溢出pwnme_第8张图片



0x08048624 getfruit()

0x08048659 scanf()

0x08048677 getflag()

上linux调试神器GDB


CTF--2016湖湘杯全国网络安全技能大赛之栈溢出pwnme_第9张图片


下断点

0x08048624 getfruit()

0x08048659 scanf()


r命令运行起来

然后输入选择5


CTF--2016湖湘杯全国网络安全技能大赛之栈溢出pwnme_第10张图片


stepi    单步步入

next     单步步过

提前准备好字符串

pattern_create 100



然后运行到输入scanf函数位置

手动输入粘贴以上字符串。

再看看栈地址数据


CTF--2016湖湘杯全国网络安全技能大赛之栈溢出pwnme_第11张图片


基地址ebp


CTF--2016湖湘杯全国网络安全技能大赛之栈溢出pwnme_第12张图片


字符串起始地址和栈基地址



再查看上次栈基地址ebp


CTF--2016湖湘杯全国网络安全技能大赛之栈溢出pwnme_第13张图片


函数返回地址。0x080487ea==>0x08048677

184-020=164

164+4=168

溢出位置是168字节。然后覆盖函数地址。


CTF--2016湖湘杯全国网络安全技能大赛之栈溢出pwnme_第14张图片


0x05 利用程序


在这里基本就差不多清楚了。剩下的就是手动编写exploit程序了。

根据这个思路写出exploit如下。


CTF--2016湖湘杯全国网络安全技能大赛之栈溢出pwnme_第15张图片


测试结果


CTF--2016湖湘杯全国网络安全技能大赛之栈溢出pwnme_第16张图片



你可能感兴趣的:(安全札记,逆向工程,反汇编,二进制,漏洞学习,网络安全与恶意代码)