|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=32 [복사]
talos->dark_mare 문제입니다.
아무리 생각해봐도 출제의도는 BSS에 Buffer를 오버플로우시켜 func 함수포인터를 변조해서 공략하라는 것 같은데요.
그런데 현재 이미지상의 문제를 보면
0x8049784 <data_start>: 0x00000000
(gdb)
0x8049788 <completed.5731>: 0x00000000
(gdb)
0x804978c <dtor_idx.5733>: 0x00000000
(gdb)
0x8049790 <func>: 0x08048454
(gdb)
0x8049794 <buffer>: 0x41414141
(gdb)
0x8049798: 0x41414141
(gdb)
0x804979c: 0x00000000
다음과 같이 buffer의 주소가 함수포인터보다 높은 곳에 있습니다.
(오버플로우가 불가능한 상태이지요)
몇개 테스트 해보니 선언 순서에 상관없이 포인터 변수가 일반 변수보다 더 낮은 곳에 위치하게 되는 것 같습니다.
머 다른 방법이 있는 건가 많이 찾아봤는데요
현재 문제에서는 아무리 생각해도 불가능 한 것 같습니다...
문제 확인 좀 해주세요!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char buffer[4];
void (*func)(int, int, int);
void dummy(int argc1, int argc2, int argc3)
{
printf("Do you wonna exploit me?\n");
exit(1);
}
int main(int argc, char *argv[])
{
if(argc != 2)
{
printf("argc Error!!\n");
exit(-1);
}
// initializing buffer
memset(buffer, 0, sizeof(buffer));
func = dummy;
// buffer overflow!!
strcat(buffer, argv[1]);
// initializing dummy registers
asm("xor %ebx, %ebx");
asm("xor %ecx, %ecx");
asm("xor %edx, %edx");
// jump into blackhole!
func(0, 0, 0);
}
|
Hit : 5519 Date : 2012/10/13 05:59
|