pwnlearning

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

posted on 2025-07-25 10:53  邪恶的帽子  阅读(16)  评论(0)    收藏  举报

导航