준비물

1. 루팅된 폰

루트권한은 필수입니다.

2. adb

* 우선 폰의 환경설정-개발에서 USB 디버깅 체크를 하여 주세요.

Android SDK를 설치하면 사용할 수 있습니다.

http://developer.android.com/sdk/index.html

adb 툴은 \platform-tools에 있습니다.

폰을 USB연결 후 adb devices를 치면 연결된 장치가 보입니다.

(블루스택이 설치되어 있는 경우 블루스택 디바이스로 연결되는 수가 있으니 주의 바랍니다.)

확인 후 adb shell로 들어가서 명령 프롬프트가 뜨면 성공입니다.

3. busybox & busybox X

루팅 후 앱스토어에서 다운로드합니다. 리눅스용 필수 프로그램들을 사용할 수 있습니다.

(일부 기기에서 설치 후 동작이 되지 않을 수도 있습니다. busybox installer 로 설치를 시도하는 것을 권장합니다.)

(busybox가 설치 안되는 하위 기기는 사용할 수 없습니다.)

(설치 후 심볼릭 링크가 정상동작 하지 않는 경우 tinybox를 설치해도 무방합니다.)

busybox X 는 busybox에서 제공하지 않는 setarch, ulimit와 같은 명령어를 제공하여 줍니다.

4. gdb

디버거입니다. 

gdb

출처 : http://searchme.tistory.com/37

다운로드 한 뒤 adb push [파일전체경로] [핸드폰 경로] 로 올리면 됩니다.

예) adb push d:\gdb /data/local

그 다음 /data/local 디렉토리로 가서 chmod 777 로 권한을 주면 실행할 수 있습니다.

5. gcc

폰에서 직접 컴파일하여 실행하기 위해 사용합니다.

출처 : http://rwiki.sciviews.org/doku.php?id=getting-started:installation:android

원본 파일의 링크가 삭제되었으므로 아래 첨부파일들을 다운로드 하시길 바랍니다.

android_gcc_supplement.tar.bz2

android_gcc_r2a.zip.001android_gcc_r2a.zip.002android_gcc_r2a.zip.003android_gcc_r2a.zip.004

android_R_r1a2.tar.bz2

설치 방법 :

adb shell mkdir /data/local/gcc
adb push android_gcc_r2a.tar.bz2 /data/local/gcc
adb push android_gcc_supplement.tar.bz2 /data/local/gcc
adb push android_R_r1a2.tar.bz2 /data/local/gcc
adb shell
cd /data/local/gcc
tar xjf android_gcc_r2a.tar.bz2
tar xjf android_gcc_supplement.tar.bz2
tar xjf android_R_r1a2.tar.bz2

환경 변수 등록 : bashrc

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/local/gcc/lib
export PATH=$PATH:/data/local/gcc/bin

6. SSH Server

폰에 SSH 서버를 설치합니다. ADB를 이용하지 않아도 되는 장점이 있습니다.

http://codetronik.tistory.com/31

본 포스팅은 기존 제작된 익스플로잇을 무작정 따라하는 내용을 담고 있습니다.

(천만 스크립트 키드 양성을 위한 그날까지..!) 

 


 

유형 : Stack Buffer Overflow

타겟 프로그램 : BlazeDVD Pro Player 6.1

테스트 환경 : Windows XP SP3 Eng

링크 : http://www.exploit-db.com/exploits/32737/ (제작자 : Deepak Rathore)

설명 : Playlist를 열때 Stack Buffer Overflow를 일으킵니다.


[재현]

  

[그림1 - 프로그램 실행 화면]

 

링크에서 타겟 프로그램과 Exploit을 다운로드 합니다.

Perl 설치가 귀찮으신 분은blazeExpl.plf<-- 이것을 다운로드 해 주세요.

 

[그림2 - Playlist Exploit 파일]

해당 파일을 Hex Editor로 열면 위의 그림과 같이 나옵니다.

위의 박스친 부분의 주소를 사용자PC에 맞게 고쳐줘야 하는데, ASLR이 적용되지 않은 모듈에서 jmp esp를 찾으면 됩니다.

 

[그림3 - JMP ESP 찾기]

저는 0x7C86467B에 있는 jmp esp를 사용했습니다.

 

[그림4 - Exploit 성공]

Playlist 를 열어서 그림4와 같이 나오면 성공입니다.

[분석] 

[그림5 - 버퍼를 스택에 복사]

Playlist를 로드하면 위의 코드에서 스택에 Playlist의 버퍼를 복사합니다. 

(스샷을 연속적으로 찍지 않아서 스택의 주소가 그림마다 다릅니다. 양해를..)

[그림6 - 스택 비교]

위의 그림은 스택 버퍼가 쓰여지기 전과 후의 모습입니다.

 [그림7 - RETN]

계속해서 Step over를 하면 최종적으로 그림7과 같은 코드를 만나게 되어 리턴합니다.

 

[그림 8 - RETN 시 스택]

RETN 직전 스택을 보면 ESP가 0x7C86467B를 가리키고 있는데 해당 주소는 JMP ESP 를 담고 있습니다.

말 그대로 ESP로 점프하라는 것이며, 한번 더 Step over 하면 스택에 0x10이 더해진 0x12F0D0으로 이동합니다.

 

[그림 9 - 쉘코드]

NOP후 쉘코드가 실행됩니다.

테스트 환경 : Windows XP SP3 Eng / Python 2.7.1

관련 링크 : http://www.exploit-db.com/exploits/32585/

취약점 유발 파일 :victim.m3u

 

해당 취약점은 Read Only 영역에 Writing을 시도할 때 발생합니다. (즉, stack limit를 뚫고 입력하는 상황)

PoC를 실행시키면 victim.m3u가 생성되는데, 이것을 AudioCoder에 넣고 돌리면 계산기가 실행됩니다.

정크 코드 'A'에 걸려서 메모리가 뻑난(?) 모습입니다. 해당 영역은 Read Only 입니다.

 

SEH 를 확인해보니 Overwrite 되었습니다. 바로 쉘코드로 점프합니다.

 

 

+ Recent posts