【BUUCTF】PWN-刷题记录-warmup_csaw_2016
题目信息

解题步骤

和上一题基本一样

1 | int __fastcall main(int a1, char **a2, char **a3) |
1 | int sub_40060D() |
v5是输入缓冲区:gets(v5),大小 64 字节。v5距离rbp是 0x40 = 64 字节。- 返回地址在
rbp + 8。- 所以从
v5到返回地址的距离是:0x40 + 8 = 72字节。
- 所以从
sprintf(s, "%p\n", sub_40060D); write(1, s, 9);- 这行代码会打印
sub_40060D函数的地址! - 例如输出:
WOW:0x40060d
- 这行代码会打印
- 这意味着:我们知道了
sub_40060D的地址,也就是system("cat flag.txt")的地址!
由于程序没有开启 PIE(地址固定),且我们直接拿到了 sub_40060D 的地址,所以,我们可以直接跳转到 sub_40060D,执行 system("cat flag.txt"),直接读取 flag!
我们只需要:
- 接收程序输出,提取
sub_40060D的地址。 - 构造 payload:
- 72 字节填充(覆盖到返回地址)
- 覆盖返回地址为
sub_40060D的地址
- 发送 payload
- 获取 flag
1 | from pwn import * |

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 末心的小博客!










