jam 블로그

[bof 원정대] giant -> assasin (no stack, no RTL) 본문

해킹/시스템

[bof 원정대] giant -> assasin (no stack, no RTL)

kid1412 2012. 3. 26. 18:01
728x90
다음 문제의 소스 입니다.

 [그림 1] assassin.c

소스분석
1. buffer의 크기는 40
2. 인자값은 적어도 하나 이상
3. 첫번째 인자값의 48번째 값이 \xbf이면 안됨.
4. 첫번째 인자값의 48번째 값이 \x40이면 안됨.
5. buffer, sfp 초기화 

 
문제 푸는 과정입니다.

1. 리턴, system, exit, /bin/sh의 주소값 구하기
2. bof 공격

 
1. 리턴, system, exit, /bin/sh의 주소값 구하기

 [그림 2] 리턴, system, exit의 주소값
 

 [그림 3] /bin/sh 주소값 

 
2. bof 공격

공격방법은 ret에 도달하면 ret에 있는 주소값으로 넘어가고 그 주소값에 있던 값 4byte를 실행시킵니다.
따라서 ret에 똑같은 ret의 주소값을 한번더 넣어주고 바로 다음에 system 함수를 넣으면 RTL 같은 형식이 됩니다.
즉,
[buffer 40byte][sfp 4byte][ret 주소값][system 주소값][exit 주소값][/bin/sh 주소값] 이런식입니다.
RTL은 ret에 직접 system의 주소값을 넣었다면 여기서는 ret에 ret의 주소값을 한번더 넣고 RTL 한다고 보시면 됩니다.

 [그림 4] bof 공격

 
Comments