标签:
来源: Backdoor CTF 2015
There is a wierd kind of authentication service running: nc hack.bckdr.in 8004. The binary can be found here. The vampire says that there is no need for bruteforce.
?
解题思路:
看一下文件格式
不管那么多,先扔到IDA里面看看
随便选择一个函数,按X(虽然好笨的方法但是很实用?注意光标位置)
重复这个过程,直至不能找到引用函数
找到主函数后按F5看看源码
这里调用了一个函数,跟进去可以看出这里在进行flag校验
注意箭头,这里直接将我们输入的字符串输出,这里看来存在printf format 漏洞
好了,直接上gdb,先看看主函数入口
Linux下进行调试,最常用的就是GDB了,虽然个人用惯了Od感觉用起来操作还是有点繁琐,但是大神都是这么说的我也就跟着了233
为了方便贴上常用快捷键。
GDB常用命令 | 格式 | 含义 | 简写 |
list | List [开始,结束] | 列出文件的代码清单 | l |
prit | Print 变量名 | 打印变量内容 | p |
break | Break [行号或函数名] | 设置断点 | b |
continue | Continue [开始,结束] | 继续运行 | c |
info | Info 变量名 | 列出信息 | i |
next | Next | 下一行 | n |
step | Step | 进入函数(步入) | S |
display | Display 变量名 | 显示参数 | ?? |
file | File 文件名(可以是绝对路径和相对路径) | 加载文件 | ?? |
run | Run args | 运行程序 | r |
?
接下来上gdb
单步跟踪到printf(a1)函数处,然后查看一下栈的情况,我们可以再0xbffff048处看到自己存储在flag.txt中的flag
这里我们可以判断出flag在栈中的位置(esp+4*M+flag),通过测试,我们可以知道M=9,因此我们可以构造如下format字符串
然后就可以连接了,可以看到我们已经取得了flag的16进制形式
可以放到notepad++(插件->Converter->hex to Ascll )里面转一下,或者自己用python写个脚本?(好吧是我嫌弃notepad++太丑了233)
得到flag
?
@Reference bluecake(中国好室友)
【CTF】RE Backdoor CTF 2015 TEAM 600
标签:
原文地址:http://www.cnblogs.com/windcarp/p/4439168.html