ciscn_2019_n_1和pwn1_sctf_2016–栈溢出
ciscn_2019_n_1 解题思路
下载样本到本地 使用file和checksec查看文件内容,文件为64位ELF,只开启了NX保护,NX即No-eXecute(不可执行)
使用IDA进行反编译
在main函数中调用了func()函数,该函数中表示当v2==11.28125时,则显示flag。 此时,题目出现了两种解题思路:
- 利用gets函数进行栈溢出,函数直接返回system(“cat /flag”);
- 利用gets函数进行栈溢出,覆盖v2的值为11.28125
思路一:利用gets函数进行栈溢出,函数直接返回system(“cat /flag”);:
v1栈溢出为0x30+8
return system(“cat /flag”)的地址为00000000004006BE
编写POC
flag{72b01720-a239-4166-b914-5591cd8a88c6}
思路2:利用gets函数进行栈溢出,覆盖v2的值为11.28125:
v1距离v2为0x30-0x4
11.28125的十六进制表达式为0x41348000
编写POC
flag{72b01720-a239-4166-b914-5591cd8a88c6}
pwn1_sctf_2016 解题思路
下载样本到本地 使用file和checksec查看文件内容,文件为32位ELF,只开启了NX保护
使用个小技巧,使用strings命令查看文件中显示的flag字样
使用32位的IDA打开文件,F5编译一下,目标函数为get_flag
目标函数地址为0x08048F0D
查看main函数
进入vuln函数,其中fgets函数无法像gets函数一样,可以无限制输入进而导致栈溢出,但是后文中将输入的“I”转换为“you”,即输入20个“I”(20个字节)就会有20个“you”(60个字节–0x3C)被转换,进而导致栈溢出。
编写POC
flag{7223fc9b-b538-4c2b-bf4d-46ec5206797b}