[LOB FC3] dark_eyes -> hell_fire에서 system함수를 사용할때 오류
2018. 4. 23. 21:18
/* 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); } | 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 |