Wargame

· 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가 없는 것을 봐서 추측할 수 ..
이번에 풀이할 문제는 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..."를 출력해준 뒤 종료된다..
이번에 풀이할 문제는 HackCTF의 Offset 문제다. 개인적으로 이번 문제는 푸는 방법이 좀 참신하게 느껴졌다. 파일은 offset이라는 elf 파일이 주어져 있다. 실행을 해 동작을 먼저 확인한 후, 보호 기법, 코드를 확인하겠다. 문제 파일을 실행하면 "Which function would you like to call?"이라는 문구가 출력된 후 입력을 받는데, 1을 입력하니 프로그램이 그대로 종료됐다. 보호 기법은 canary 빼고는 모두 걸려 있는 것을 볼 수 있다. ghidra로 main 코드를 확인해보면 위와 같다. gets 함수가 눈에 띄는데, 이 gets 함수를 통해 오버플로우를 일으킬 수도 있을 것 같다. gets 다음에 호출되는 select_func 함수도 확인해봤다. 입력 값이 ..
이번에 풀이할 문제는 HackCTF의 Simple_Overflow_ver_2 문제다. 문제 이름을 봤을 때 bof 관련 문제로 추정된다. 파일은 Simple_overflow_ver_2라는 이름의 elf 파일이 주어져 있다. 일단 어떤 동작을 하는지 실행해서 확인해보겠다. 실행을 하면 "Data : " 문구가 출력되면서 입력을 받는데, 입력을 하면 입력 값이 저장된 주소로 추정되는 16진수 값과 입력 값을 같이 출력해준다. 그 후 Again (y/n) 문구가 출력되며 입력을 받는데, y를 입력하면 이 과정을 다시 수행할 수 있고, n을 입력하면 프로그램을 종료한다. 동작은 확인했으니 보호 기법 및 코드를 확인해보겠다. RELRO 빼고는 보호 기법이 걸려지 않은 것을 볼 수 있다. ghidra를 통해 메인 ..
· Wargame/FTZ
level 8에서 얻은 패스워드를 사용해 level 9 계정으로 로그인해보면 hint 파일만 존재하는 것을 볼 수 있다. cat 명령어로 hint 파일을 읽어보면 /usr/bin/bof 프로그램의 소스 코드가 출력되고 이를 이용해 level10의 권한을 얻으라는 문구가 출력된다. /usr/bin/bof 파일을 ls -al 명령어로 확인해보면 level10 권한으로 setuid가 걸려있는 것을 볼 수 있다. 이 프로그램의 취약점을 찾아 level10 권한으로 쉘을 얻는다면 level10 계정의 패스워드를 얻을 수 있을 것이다. 먼저 소스코드를 살펴보겠다. #include #include #include main(){ char buf2[10]; char buf[10]; printf("It can be ove..
보호되어 있는 글입니다.
dyp4r
'Wargame' 카테고리의 글 목록 (4 Page)