/*
    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+2644);
 
    // overflow!!
    strcpy(buffer, temp);
 
    // restore sfp 
    memcpy(buffer+264, saved_sfp, 4);
 
    printf("%s\n", buffer);
}
 
 
cs


일단 문제는 위와 같고.


이 문제를 another fake ebp로 해서 system함수를 불러와 풀려하였으나 실패하였다;


leave-ret을 2번 호출하여 ebp,esp를 stdin의 영역으로 보내고 거기서 system함수와 인자를 올려놓았으므로 호출하면 될 것같았으나;;

계속 죽어버린다 ㅡㅡ;; 참고로 system대신 execve를 썻을때는 이상하게 성공한다;;


이를 gdb로 분석해보니 아래와 같이 나온다.


먼저 system함수로 갈때이다.



이상한 주소에서 죽어버리고, 저 주소는 system함수가 아닌것 같다.



그리고 stdin의 상태를 보면 중간에 0x0000000 값들이나 일부 값들이 변경된것을 볼 수 있다.


아마 system함수를 실행하면 stdin에 어떤 동작을 하는것이거나 무슨 문제가 생긴것같다;.... 대체 왜 저런지는 아직 모르겠다.


다음으로 system함수 대신 execve함수를 실행했을 때다. 이것은 일부러 인자에 오류를 내보았다.



execve함수 안에서 죽는다.



system함수와는 다르게 그렇게 많이 변경되지는 않는다...


으마ㅏㅏㅣ이릐ㅏ


대체 뭐가 문제인거야 ㅡㅡ;


혹시 아시는 분은 알려주세요...





'Wargame > LOB' 카테고리의 다른 글

[LOB FC3] iron_golem -> dark_eyes  (0) 2018.04.25
[LOB FC3] gate -> iron_golem  (0) 2018.04.25
[LOB] xavius -> death_knight  (0) 2018.04.04
[LOB] nightmare -> xavius  (0) 2018.04.03
[LOB] succubus -> nightmare  (0) 2018.04.03

+ Recent posts