pwn1_sctf_2016
2023-09-15 01:20:22
# wp
buuctf中的一题,纯纯烧杯题,这题注重考查c++逆向(但是我还是觉得是动手调试的能力)
老规矩了,checksec看一下保护机制和位数

感觉像是栈溢出,不确定,ida看看

哇,看到这函数列表懵逼了,不过别怕,仔细翻一番

逮到三个看名字有用的,f5看一下
main函数:
1 | int __cdecl main(int argc, const char **argv, const char **envp) |
vuln函数:
1 | int vuln() |
gatflag函数:
1 | int get_flag() |
看完人更傻了,虽然getflag明显就是要我们栈溢出,跳转到这个函数,但是vuln写的是什么?
百度完应该是c++中std::string相关的用法
不过这题应该是要我们会用debug来调试程序
我们重点注意一下那一串天书里面的“I”和“you”,突破口肯定是这俩
浅写段exp,debug看看有什么玄机
1 | from pwn import* |

好家伙,我们可以看到明明传的是I,结果都变成了you,那到这里很明显了,这题就是把字符串中的i替换成了you
我们再来看看能不能进行栈溢出

可以看到,我们只能输入0x20字节的数据给s,但是他距离ebp有0x3c,不够怎么办?
刚才不是输入I可以变成you吗?这不是一个字节顶三个字节,一节更比一节强(南孚打钱)
那思路很明显了,输入20个字长的I,就相当于输入了60个字长的you,我们就可以进行栈溢出了
exp:
1 | from pwn import* |