본문 바로가기

Wargame

(6)
[ROP_32bit] ropasaurusrex 본 문제는 2013년도 pCTF의 문제이다. 해당 문제는 간단한 풀이만 작성되어 있으며, 해당 기법에 대해 공부하고 싶다면 아래 링크를 참고하기 바란다. 2022.07.10 - [Dreamhack/Wargame] - [Wargame] basic_rop_x86 1. 바이너리 파일 2. 풀이 (1) 보호 기법을 확인한다. 32bit 프로그램으로, NX와 ASLR이 적용되어 있음을 알 수 있다. (2) 바이너리를 실행해보면 입력받은 후, WIN이라는 문자열을 출력하고 종료된다. 아래 사진은 임의로 dasfsd를 입력한 결과이다. (3) IDA를 이용하여, 디컴파일한다. sub_80483F4 함수에서 buf에 입력값을 받아온다. buf의 크기가 136byte인데, 256byte만큼 입력받아오기 때문에 BOF취약..
[stack unlimited, control esp] fix 1. 문제 ssh로 접속할 수 있는 정보가 주어진다. 2. 코드 분석 2-1. fix.c shellcode함수에서 sc의 shellcode를 buf에 copy 한다. buf의 RET에 buf를 넣음으로써, buf에 들은 shellcode가 실행되는 것으로 보인다. #include // 23byte shellcode from http://shell-storm.org/shellcode/files/shellcode-827.php char sc[] = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69" "\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"; void shellcode(){ // a buffer we are about to ex..
[Fake EBP] simple login 1. 문제 login 바이너리 파일 다운로드할 수 있는 링크가 주어진다. nc로 접속할 수 있는 정보가 주어진다. 2. 코드 분석 IDA와 gdb를 이용하여, 분석하였다. (본 글은 문제 푸는데, 필요한 부분만 작성하였다.) 2-1. main 함수 code 11줄 : 30글자를 입력받아오고 있는 것을 확인할 수 있다. code 14줄 : 입력값과 v4가 Base64Decode함수의 인자값으로 넘어가며, return된 값이 v6에 저장된다. code 15줄 : v6가 0xC보다 크면, "Wrong Length"가 출력되고 프로그램이 종료된다. code 26줄 : auth인자값으로 v6가 넘어가고, 조건문이 true일 경우, correct함수가 실행된다. 2-2. Base64Decode 함수 두 번째 인자로..
[BOF + Canary leak] md5 calculator 1. 문제 hash 바이너리 파일을 다운로드할 수 있는 링크가 주어진다. nc로 접속할 수 있는 정보가 주어진다. 2. 환경 구축 libcrypto.so.1.0.0 라이브러리가 존재하지 않는 경우, 설치해줘야 프로그램을 실행할 수 있다. //ubuntu환경에서 libcrypto.so.1.0.0 32bit 설치 명령어 sudo apt-get install libssl1.0.0:i386 3. 코드 분석 IDA를 이용하여, 분석하였다. 3-1. Input 1 captcha로 출력된 값과 똑같이 입력하면, 프로그램이 종료되지 않는다. my_hash()라는 함수에서 return된 값이 captcha로 출력된다. my_hash() rand함수를 통해, 구한 난수값을 8번 구하고 저장한다. 구한 난수값과 카나리를 연..
[BOF] echo1 1. 문제 echo1 바이너리 파일을 다운로드할 수 있는 링크가 주어진다. nc로 접속할 수 있는 정보가 주어진다. 2. 코드 분석 코드는 ghidra, gdb를 통해 분석하였으며, 본 설명은 푸는데 필요한 부분만 작성하였다. 아래 그림은 input받는 name에 대한 부분이다. malloc을 통해 0x28만큼 동적 할당하며, 해당 공간에 byebye, greetings의 함수 포인터와 입력받는 name을 저장한다. name의 경우, 0x24만큼 입력값을 받아오며, 할당한 heap영역의 0위치부터 8byte씩 저장된다. 이후, name의 첫 0x4는 bss에 위치한 id에 저장된다. ( bss에 위치한 주소는 고정주소이다. ) heap bss +-----------------------+ 0x4 +---..
[ROP_64bit] codegate2018 Qual BaskinRobbins31 1. 바이너리 파일 2. 바이너리 분석 본 글은 ghidra 툴을 이용하여, 분석하였다. ( 아래는 main에 대한 코드만 넣어두었다. 좀 더 자세한 사항은 디컴파일하여 확인해 보는 것을 추천한다. ) 해당 바이너리는 베스킨라빈스31게임과 비슷한 것으로, 횟수 31에서 입력한 값만큼 차감하면서 0이 되면 loss하는 게임이다. 단, 입력값은 1~3중에 입력해야 하는 조건이 존재한다. your_turn() : 사용자가 입력한 값을 필터링하는 함수이다. my_turn() : 컴퓨터가 입력하는 값을 의미하는 함수이다. - 남은 기회가 4일 경우, 컴퓨터가 이기게 된다. - 남은 기회가 0미만 3이상일 경우, 남은 기회에서 -1 된다. - 남은 기회가 1~3일 경우, 컴퓨터가 이기게 된다. undefined8 ..