ipwn
이 문제는 진짜 진짜 진짜 진자(진자운동 아님ㅎ)쉽다. int __cdecl main(){ int result; // eax int buf; // [esp+0h] [ebp-18h] void *ptr; // [esp+4h] [ebp-14h] int v3; // [esp+8h] [ebp-10h] unsigned int v4; // [esp+Ch] [ebp-Ch] v4 = __readgsdword(0x14u); ptr = 0; v3 = 0; setvbuf(stdout, 0, 1, 0); while ( 1 ) { sub_8048624(); puts("your choice:"); read(0, &buf, 4u); result = buf; switch ( buf ) { case 1: if ( ptr ) { puts..
이번에 푼 문제는 betting문제이다. codegate본선 가서 풀었던 문제인데 예선의 베라보다 쉽다. 왠지 엄청 어려울줄 알고 한 문제라도 풀면 기적이라 생각하고 풀었었다 암튼 분석을 해보자. 보아하니 64bit바이너리에, 카나리, NX가 걸려있다. int __cdecl main(int argc, const char **argv, const char **envp){ unsigned int v3; // eax unsigned int v4; // eax unsigned int v6; // [rsp+4h] [rbp-6Ch] int v7; // [rsp+8h] [rbp-68h] int v8; // [rsp+Ch] [rbp-64h] int v9; // [rsp+10h] [rbp-60h] int v10; // ..
이번에 정리해볼 기법은 house of force기법이다. free고 뭐고 필요 없어서 내가 이해하기 쉬웠다. 이 기법은 간단하게 정리하면 top chunk를 건들여서 size를 무한정 입력받을 수 있게 해주는 기법이다. 이 기법을 이용해서 스택까지의 offset을 구해서 ret을 변조해서 eip를 어떻게 할 수도 있고, 아마 보통은 got overwrite를 하는데 쓰이지 않을까 하는 생각이 든다. 일단 바로 예제 코드를 컴파일하고 어떻게 작동하는 건지 원리 설명을 차근차근 해보겠다. #include #include #include void make_system(){ system("echo this func just gadget");} int main(int argc, char *argv[]){ cha..