2013.04.01 21:53
[LOB] 페도라 원정대 3 (dark_eyes -> hell_fire)

 

한동안 리모트 환경인줄 모르고 이해가 안갔던 문제,,

 

 

코드는 간단하다 그냥 ebp 를 저장했다가 되돌림으로써 fake_ebp 를 막아놓은 것 말고는 일반적인 버퍼 오버 플로우이다.

다만 리모트 환경이라는 부분을 코드를 찾는데 고생했다.

 

일반적인 페도라 리모트 오버플로우에서 쉘을 획득할때는 execve 보다 system 함수가 더 유용하다. 하지만 system 함수 역시 인자값을 구성해 줘야하는 어려움이 있는데 시스템 함수에는 내부 루틴중에 do_system 함수를 사용 하게 된다.

 

이 do_system 은 내부적으로 execve("/bin/sh","명령어 "); 와 같은 효과를 가지게 되므로 do_system 만 호출하여도 쉘이 올라가게 된다.

 




1. 번외 : [/bin/sh] 주소값 찾기

system 함수 내에는 do_system 이란 함수가 존재하고 이는 /bin/sh 를 인자값으로 쓴다.

때문에 system 함수를 기점으로 문자열을 검색해보면 [/bin/sh] 의 주소값을 찾을 수 있다.



[evil_wizard@Fedora_1stFloor ~]$ cat findsh.c

#include<stdio.h>

int main(int argc, char *argv[]){


int addr=0x007507c5; //system 함수의 주소

while(1){

if(memcmp(addr++,"/bin/sh",8)==0){

printf("[%p]\n",addr);

break;

}

}


return 0;


Posted by k1rha