[置顶] CTF--2016湖湘杯全国网络安全技能大赛之栈溢出pwnme
2017-03-30 18:41
1151 查看
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保护。
猜测题目考察内容多为溢出漏洞。运行程序
题目好像是关于水果的一个小游戏。
分别测试输入1,2发现并没有别的异常现象,只是普通的输入输出。
0x03 静态分析
于是乎采用大神器ida进行分析。F5快捷键
分支进行判断,发现选项1,2,3,4,6,其它都是无意义输入。
只有5会进入一个getfruit函数。
同时还注意到左侧出现了getflag函数,敏感函数。
仔细看发现这个函数可以获取flag,但是这个函数没有地方调用。
main主函数没有调用的地方。但是发现scanf函数有溢出漏洞。
于是乎,打算利用此函数漏洞,看能不能实现溢出覆盖返回地址,
强制其跳转到getflag函数地址。覆盖返回EIP为getflag函数地址。
即可获得flag,溢出多少地址可以覆盖栈中的返回地址。
0x04 动态分析
objdump -d pwnme > pwnme.asm先用这个命令查找函数地址
0x08048624 getfruit()
0x08048659 scanf()
0x08048677 getflag()
上linux调试神器GDB
下断点
0x08048624 getfruit()
0x08048659 scanf()
r命令运行起来
然后输入选择5
stepi 单步步入
next 单步步过
提前准备好字符串
pattern_create 100
然后运行到输入scanf函数位置
手动输入粘贴以上字符串。
再看看栈地址数据
基地址ebp
字符串起始地址和栈基地址
再查看上次栈基地址ebp
函数返回地址。0x080487ea==>0x08048677
184-020=164
164+4=168
溢出位置是168字节。然后覆盖函数地址。
0x05 利用程序
在这里基本就差不多清楚了。剩下的就是手动编写exploit程序了。根据这个思路写出exploit如下。
测试结果
相关文章推荐
- [置顶] CTF--2016XDCTF全国网络安全大赛之reverse5
- [置顶] CTF--2016XDCTF全国网络安全大赛之reverse2
- [置顶] CTF--2016中国西安西电华山杯网络安全技能大赛之crackme6
- 2017年全国职业技能大赛“网络信息安全与评估”
- [置顶] CTF--2015中国西安电子科技大学XDCTF网络安全大赛之pwn
- 第三届全国网络空间安全技术大赛 Web补题 By Assassin(持续更新)
- 第二届360杯全国大学生信息安全技术大赛部分解题思路(网络与协议)
- 第一次参加ctf小有体会 全名SSCTF全国网络大赛
- 黑龙江省网络安全技能大赛 初赛 RE300 writeup ——Lilac 逆向组
- 2016职业技能大赛信息安全管理与评估赛项任务书
- 第六届山东省大学生网络安全技能大赛决赛Writeup
- 第四届山东省网络安全技能大赛 write up
- “2012年全国职业院校技能大赛”高职组信息安全管理与评估赛项获奖名单
- 第二届360杯全国大学生信息安全技术大赛部分解题思路(网络与协议)
- 6月18号参加了全国职业院校技能大赛-移动互联网应用软件开发赛项
- 第二届360杯全国大学生信息安全技术大赛部分解题思路(逆向分析)
- 第二届360杯全国大学生信息安全技术大赛部分解题思路(数字取证)
- 第二届360杯全国大学生信息安全技术大赛部分解题思路(WEB安全)
- [置顶] java-在非安全网络上建立可信任安全的通道(1/3)