Security/Reversing
pwnable.kr 문제
Palette14
2017. 3. 8. 02:43
앞부분에 쉬워 보이는 문제는 금방 풀줄 알았는데..
3번이 날 가로막고 있음!!(사실2번도 예쁘게는 안했..)
그냥 엄청 단순한 BOF문제일 줄로만 알았는데, 뭔가
변조해야 하는 메모리 주소가 취약한 버퍼보다 낮은 주소에 있고,
스택 카나리도 적용이 되어 있는거 같다.
불가능..?
일단 함수 매개변수도 레지스터로 전달하고 있고, 아래쪽 위치한 메모리에 값을 넣어주고 있다
근데 소스코드에선..
#include <stdio.h> #include <string.h> #include <stdlib.h> void func(int key){ char overflowme[32]; printf("overflow me : "); gets(overflowme); // smash me! if(key == 0xcafebabe){ system("/bin/sh"); } else{ printf("Nah..\n"); } } int main(int argc, char* argv[]){ func(0xdeadbeef); return 0; }
이렇게 나와있다.
key가 매개변수로 있으면 호출전에 스택에 푸시되거난 레지스터갖고만 처리하는거는 봤는ㄴ데
저렇게 되는게 맞는건지는 모르겠다..
---------------------------------------------------------------------------------
이 모든일이..
다운받은 ELF파일이 디버거로 동적분석이 안되서
소스코드 받아서 내가 다시 빌드한탓에
별게 다 적용되서 그랬던거였네ㅁ..(자체 난이도 상향..)
문제로 나오는 실행파일은
key가 버퍼보다 더 높은 주소에 있었음.
쉬운 문제였다ㅏ..ㅎㅎ
우분투에서는 문자열 넣는게 안먹히길래(python버전이 달라서 그런가..)
Fedora vm으로 들어가서 하니까 바로 됬다.