jam 블로그

[bof 원정대] succubus -> nightmare (PLT) 본문

해킹/시스템

[bof 원정대] succubus -> nightmare (PLT)

kid1412 2012. 3. 31. 03:13
728x90
다음은 문제의 소스입니다.

 [그림 1] nightmare.c

소스분석
1. buffer의 크기 40
2. 인자값은 적어도 하나 이상
3. 리턴값이 strcpy의 값이어야 한다.
4. strcpy로 첫번째 인자값은 buffer에 복사
5. buffer+48 뒤쪽의 4byte를 AAAA로 채운다.

 
풀기위한 과정입니다.

0. bash2
1. strcpy의 주소값 구하기
2. buffer의 주소값, argv[2]의 주소값 구하기
3. bof 공격 

 
0. 공격 방법

PLT란?
일종의 실제 호출 코드를 담고 있는 Procedure Linkage Table(프로시져 링키지 테이블)로써 이 내용 참조를

통해 _dl_runtime_resolve가 수행되고, 실제 시스템 라이브러리 호출이 이루어지게 된다. 

 strcpy의 구조
[strcpy][dummy][dest][src]

공격맵
[buffer(dummy)][sfp(dummy)][strcpy][dummy][buffer+48(ret)][argv[2]]

argv[2] =>[system][exit][/bin/sh]

 
1. strcpy의 주소값 구하기 

[그림 2] strcpy의 주소값 구하기


2. buffer의 주소값, argv[2]의 주소값 구하기

 [그림 3] 주소값 구하기 위한 소스코드

 [그림 4] buffer의 주소값, argv[2]의 주소값

 
3. bof 공격

 [그림 5] bof 공격

 
Comments