来源: 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(中国好室友)
时间: 2024-11-08 07:06:56