ctfshow | pwn35
这道题操作简单,但有些地方需要理解
1.checksec

2.IDA
main函数

ctfshow函数

这里有个strcpy函数,该函数将src字符串拷贝到dest,结束后返回到指向dest的指针,由于没有长度限制,这里存在一个栈溢出漏洞。
然后我就在找system函数,没找到,还开了NX保护,难道这道题是retlibc?不对啊,这才第一道栈溢出题啊。
执行程序看看
远程连接,输入密码后进入了交互界面,ls,看到了有一个pwnme文件,我寻思cat一下,结果乱码(后面才知道要用./)

查阅了一些资料
关注到几个地方
1.

这里是打开文件 /ctfshow_flag 读取内容
2.

argc是命令行参数个数,当它大于1就会进入到ctfshow函数。程序默认个数为1,我们只要再输入一个参数,个数就大于1了
3.

从输入流 stream 中读取最多 63 个字符(最后一个位置留给了空字符 '\0')到flag字符数组中,当程序执行中发生段错误时,触发 SIGSEGV 信号,此时程序会自动调用 sigsegv_handler 函数进行处理。
看一下sigsegv_handler 函数,也就是打印flag

所以我们要让命令行参数argv[1]的长度,也就是我们输入的第一个参数的长度,大于dest数组(104)的长度,在传参后,发生栈溢出,让程序崩溃进而输出flag
那就试试吧

OK的
说实话没那么ez,可能比较vegetable
浙公网安备 33010602011771号