전체 글

보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
· CTF
이번에 작성할 문제는 Baby write-only password manager로 현재 참가하고 있는 Pwn2Win CTF의 pwn 카테고리에 있는 문제다. 한 문제라도 풀어보려고 노력했지만 대회 자체가 수준이 좀 높아.. 결국 풀지 못했다. 따라서 접근 방법이라도 정리해보려 한다. 일단 처음부터 실수를 했다. 솔브 수가 높은 다른 pwn 문제들은 nc 서버가 주어져 있지 않았는데(pwn 문제인데 web 서버가 등장했다..), 해당 문제는 nc 서버가 있어 너무 기쁜 나머지 문제 파일은 보지도 않고 무작정 서버에 접속해보며 삽질을 시작했다. 서버에 접속하면 "Hello there. Send me your ELF."라는 문구가 나온다. ELF 파일을 전송하라는 뜻이다. ELF 전송 방법에 대해서는 다음 줄..
· Wargame/FTZ
level11과 비슷하게 로그인 후 ls 명령어를 통해 파일 들을 확인해보면 setuid가 걸린 파일 attackme와 hint가 존재하는 것을 알 수 있다. hint에는 attackme의 소스코드가 들어있다. 딱 봐도 알 수 있듯이 bof에 취약한 함수 gets를 쓴다. 입력을 받는 변수는 256byte 크기의 char형 배열 str이지만 gets 함수는 입력 값의 길이를 제한해주지 않기 때문에 256byte 넘는 입력 값을 준다면 stack bufferoverflow가 발생할 것이다. 마찬가지로 쉘을 얻게 해주는 함수가 없으므로 환경 변수에 쉘 코드를 넣고 ret를 해당 환경 변수로 overwrite하는 방법으로 exploit하면 될 것 같다. ret와 str 배열의 거리를 확인하기 위해 hint에 ..
· Wargame/FTZ
level 10에서 얻은 패스워드로 로그인한다면 setuid가 걸려있는 attackme 파일과 hint 파일을 볼 수 있다. hint 파일을 확인해보면 bof에 취약한 strcpy를 통해 인자 값을 str 변수에 복사하는데, 이 str 변수는 256 크기다. strcpy 함수를 사용하기 때문에 bof 공격을 하면 될 것 같고, 쉘을 얻게 해주는 함수가 따로 없으므로 shellcode를 이용하면 되겠다. 일단 bof 공격이 통하는지를 확인하기 위해 인자로 더미 값을 256byte 넘게 주었다. 그러니 Segmentation fault가 발생한 것을 알 수 있다. bof 공격이 맞는 것 같다. 권한 문제 때문에 attackme 파일은 gdb로 디버깅 할 수 없으므로 tmp 폴더에 소스 코드를 이용해 똑같은 ..
· Wargame/FTZ
Level9에서 얻은 패스워드를 이용해 level10으로 로그인하면 hint 파일과 program 디렉터리가 존재한다. hint 파일을 cat 명령어로 읽어보니 공유 메모리(key_t : 7530)를 이용해 두 명의 사용자가 대화를 나누고 있는데, 주어진 키 값을 이용해 대화를 도청한 후 권한을 얻는 것이 목적이다. 처음에는 리눅스 공유 메모리의 존재를 몰랐기에 level10 폴더에 존재하는 program 디렉터리에 들어가려 하거나, find 명령어로 level11로 Setuid가 걸린 파일을 찾았다. 하지만 보이지 않았고, 몇 번 삽질을 하다 힌트에 나와있던 공유 메모리를 구글링해봤다. 공유 메모리란 여러 프로그램이 사용할 수 있는 메모리로, key 값을 통해 메모리를 읽을 수 있다. #include ..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
이번에 풀이할 문제는 HackCTF의 Yes or no 문제로 x64 rop 공격이 쓰이는 문제인데, 풀 당시에는 x64 rop뿐만 아니라 x86 rop 공격에도 무지했기 때문에 시간이 많이 소요됐다. (포스팅이 많이 늦은 이유기도 하다.) 문제 파일은 다른 문제들과 달리 binary 파일과 libc-2.27.so가 있다. libc-2.27.so 파일은 문제 서버와 로컬 서버의 libc base 주소가 다르기 때문에, 이 파일을 참고해 서버 libc base address 기준으로 exploit 할 수 있도록 하는 것이다. 문제 파일을 실행하기 전 보호기법을 확인해봤다. NX가 걸려 있어 쉘 코드를 삽입할 수 없고 64bit 파일인 것을 알 수 있다. stack canary가 없는 것을 봐서 추측할 수 ..
최근 rop 공격을 공부하면서 난항을 겪었다. #include int main(void) { char buf[32] = {}; puts("Hello World!"); puts("Hello ASLR!"); scanf("%s", buf); return 0; } gcc -o example4 example4.c -fno-stack-protector -mpreferred-stack-boundary=2 -m32 -no-pie rop 공격을 테스트하기 위해, 위 c언어 소스 코드를 아래 gcc 명령어를 이용해 실습에 방해되는 보호 기법을 해제해준 상태로 빌드를 했다. 빌드 후 gdb로 파일을 열어 scanf 함수의 plt 코드를 확인해보면 정상적인 plt 코드가 아니라, endbr32 같은 이상한 명령어들이 보이는 ..
이번에 풀이할 문제는 HackCTF의 BOF_PIE 문제다. 문제 명만 봤을 때는 pie 보호 기법이 걸린 상태로 bof 공격을 해야 할 것 같다. 마찬가지로 bof_pie라는 이름의 elf 파일이 주어져 있으니, 동작 확인 -> 보호 기법 확인 -> 코드 확인 순서로 풀이를 진행하겠다. 문제 파일을 실행하면 "Hello, Do you know j0n9hyun?"과 "j0n9hyun is 0x56555909"라는 알 수 없는 16진수 값이 출력된 후 입력을 받는다. 입력 값으로 1을 주니 "Nah ..."가 출력됐다. 보호 기법을 확인해보니 NX bit와 문제 이름처럼 PIE 보호 기법이 걸려 있는 것을 볼 수 있다. main 함수는 welcome 함수를 호출한 뒤 "Nah..."를 출력해준 뒤 종료된다..
dyp4r
dyp4r's Study Blog