[golem@localhost golem]$ cat darkknight.c
/*
The Lord of the BOF : The Fellowship of the BOF
- darkknight
- FPO //프레임 포인터 오버플로우를 이용한다. sub함수가 있어야함.
*/
#include <stdio.h>
#include <stdlib.h>
void problem_child(char *src)
{
char buffer[40];
strncpy(buffer, src, 41);
printf("%s\n", buffer);
}
main(int argc, char *argv[])
{
if(argc<2){
printf("argv error\n");
exit(0);
}
problem_child(argv[1]);
}
FPO는 서브함수가 있어야하고 SFP까지만 오버플로우가 발생 할때 사용하는 기법이다.
Fake EBP는 FPO와 원리는 같지만, ret까지 overflow되는 상황에서 가능하고 main함수에서도 공격이 가능하다는 차이점이 있다. Fake EBP는 ret까지 overflow가 가능하기 때문에 ret에 직접 leave;ret; 가젯의 주소를 덮어씌워준다.
FPO에 대한 설명 : http://bob3rdnewbie.tistory.com/188
너무 잘 정리 되어있어서 링크를 건다.
[golem@localhost golem]$ gdb ./darkknigh2
(gdb) disas problem_child
Dump of assembler code for function problem_child:
0x8048440 <problem_child>: push %ebp
0x8048441 <problem_child+1>: mov %esp,%ebp
0x8048443 <problem_child+3>: sub $0x28,%esp
0x8048446 <problem_child+6>: push $0x29
0x8048448 <problem_child+8>: mov 0x8(%ebp),%eax
0x804844b <problem_child+11>: push %eax
0x804844c <problem_child+12>: lea 0xffffffd8(%ebp),%eax
0x804844f <problem_child+15>: push %eax
0x8048450 <problem_child+16>: call 0x8048374 <strncpy>
0x8048455 <problem_child+21>: add $0xc,%esp
0x8048458 <problem_child+24>: lea 0xffffffd8(%ebp),%eax
0x804845b <problem_child+27>: push %eax
0x804845c <problem_child+28>: push $0x8048500
0x8048461 <problem_child+33>: call 0x8048354 <printf>
0x8048466 <problem_child+38>: add $0x8,%esp
0x8048469 <problem_child+41>: leave
0x804846a <problem_child+42>: ret
0x804846b <problem_child+43>: nop
End of assembler dump.
(gdb) b*0x8048469
Breakpoint 1 at 0x8048469
(gdb) r `python -c 'print "\x41"*41'`
Starting program: /home/golem/./darkknigh2 `python -c 'print "\x41"*41'`
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA▒▒▒▒P▒▒▒▒▒▒▒ @
Breakpoint 1, 0x8048469 in problem_child ()
'System Hacking > Lord of Buffer overflow' 카테고리의 다른 글
14.bugbear->giant (0) | 2018.01.11 |
---|---|
13.lob darkknight->bugbear (0) | 2018.01.10 |
11.lob skeleton->golem (0) | 2018.01.08 |
10.lob vampire->skeleton (0) | 2018.01.08 |
09.lob troll->vampire (0) | 2018.01.08 |