Wargmae/HackCTF

    [Hack CTF - look at me]

    Execute 문제파일을 실행시키면 hellooooooooooo를 출력해주고 입력을 받는다. Dummy를 일정크기 이상 넣어주면 segmentaion fault가뜨는 것을 확인 할 수 있다. Analyze NX bit가 걸려있고 나머지는 다 풀려있는 것을 확인 할 수 있다. Main getegid함수를 통해 v5변수에 effective group id를 넣어준다. 그리고 setresgid함수를 통해 v5를 인자로 주어 현재 프로세스의 real user id effective user id, saved set-user-id를 설정해준다. 그리고 look at me 함수를 호출한다. Look at me Get 함수가 보이는 것으로 보아 여기서 buffer overflow를 트리거 할 수 있을 것 같다. v1..

    [Hack CTF - RTL_core]

    Execute 문제를 실행시키면 passcode를 입력하라고 한다. 당연히 모르므로 실패가 뜨는 것을 확인 할 수 있다. Analyze 보호기법을 확인해보면 NXbit만 걸려있는 것을 확인 할 수 있다. 문제이름이 RTL인 만큼 해당기법을 사용하지 않을까 싶다. Main Line 8 : s변수에 gets함수를 통해 입력을 받는다. Line 9~13 : if문으로 통과 조건은 check_passcde의 return값이 hashcode와 같은 경우이다. Core 해당함수는 dlsym함수를 통해 prinf함수의 address를 v5에 저장한 이우 해당 값을 leak 해준다. Printf의 address를 기반으로 이후 exploit을 짤 때 참고 하면 될 것 같다. Check_passcode 앞서 확인한 if..

    [Hack CTF – poet]

    Hack CTF – poet Execute 파일을 실행시키면 시의 내용을 입력받고 시의 저자를 입력받는다. 그럼 점수와 아까 입력한 시의 내용을 출력해주는데 1,000,000점을 획득하라고 한다. 이부분만 봐서는 별로 할 수 있는게 없는것 같다. Analyze 메모리 보호기법을 확인해보면 NXbit만 걸려있는 것을 확인 할 수 있다. Main main함수는 크게 별다른 동작을 하지 않고 각각의 함수들을 호출해주고 dword_6024E0의 값이 100000인 경우 break한다. 그리고 reward함수를 실행해준다. Get_poem 해당함수에서는 시의 내용을 입력 받는 부분이다. get함수를 통해 poem 전역변수에 입력을 받는것을 확인 할 수 있다. 또한 dword_6024E0을 0으로 초기화해준다. G..

    [Hack CTF - g++pwn]

    Execute 입력을 받고 so문자열에 이어서 입력한 값을 출력해주는 형태의 프로그램이다. Analyze Nx bit만 걸려있는 것을 확인 할 수 있다. Main 누가봐도 수상한 함수인 vuln함수를 호출하고 이외에는 별다른 동작을 하지 않는다. Vuln 해당 함수에서는 fget을 통해 먼저 입력을 받는데 s변수의 위치가 ebp-3C인데 32byte만큼 입력 값을 제한하기 때문에 buffer overflow를 일으킬 수 없다. 하지만 아래쪽에서 I를 you로 바꿔주는 루틴을 수행하는데 이를 이용하면 strcpy에서 v0에 있는값을 s로 복사 할 때 길이에대한 검증을 하지 않기 때문에 buffer overflow를 트리거 할 수 있을 것이다. Get_flag함수가 존재 하므로 해당 함수로 return ad..

    [Hack CTF - RTL_World]

    Execute 먼저 문제로 주어진 파일을 실행시키면 아래와 같다. 뭔가 옵션들이 주어지고 binary boss를 죽여야하는? 형태의 문제 같이 생겼다. 각각의 option들이 정확하게 어떤 역할을 하는지는 이후 IDA를 통해 알아보고 프로그램 형태만 보고 넘어가자 Analyze 보호기법에는 NXbit만 걸려있어서 메모리에 실행권한이 없을 것이다. 프로그램에서 1번 option을 선택하면 보여주기도 한다. ASLR도 걸려있는 것을 추가로 확인 할 수 있다. Main Line 11 : dlopen을 통해 /lib/i386-linux-gnu/libc.so.6 을 로드하고 handle에 so파일의 handle을 반환한다. Line 12 : dlsym을 통해 앞서 반환된 so파일의 handle을 인자로주어 sys..

    [Hack CTF - yes or no]

    Execute 파일을 실행해보면 문자가 들어 올 때와 숫자가 들어왔을 때 결과가 다르게 나온다. 또한 앞선 문제들과 다르게 libc.so파일을 함께 제공한다. Analyze 현재 Nxbit가 걸려있으므로 shellcode를 직접 올려서 공격은 불가능 할 것 같다. 일단 프로그램에서 어느 부분을 공격해야 할지 확인하기 위해 IDA를 통해 확인해보자 Main main함수를 보면 복잡하다기 보다는 if문과 변수들이 난장판으로 사용되고있어서 알아보기 힘들다. 먼저 핵심만 보자면 해당 로직이 참일 경우 gets함수를 사용해 s에 입력을 받는데 여기서 buffer overflow를 발생 시킬 수 있을 것이다. Nxbit가 걸려있으나 main 이외에 ret를 변조해서 shell을 획득할수 있을 만한 함수들은 보이지 ..

    [Hack CTF - BOF_PIE]

    Execute 문제로 주어진 파일을 실행 시키면 특정 address값을 leak해준다. 재실행시 동일한 값이 leak되는것 역시 확인 할 수 있다. Analyze PIE와 NXbit가 걸려있는 것을 확인 할 수 있다. 이번 문제가 bof_pie이므로 PIE를 우회하는 방향으로 문제를 풀어야 할 것 같다. PIE는 ASLR과 비슷하게 생각하되, 차이점은 PIE는 Code(Text)영역을 포함한 모든 영역(Data, Stack, Heap, Libc)을 랜덤하게 매핑시킨다는 것이다. 프로그램의 동작을 정확하게 확인하기 위해 IDA를 통해 코드를 살펴보자. Main Main은 별동작을 하지 않고 단순이 welcome함수를 실행시키고 Nah….를 출력한다. Welcome welcome함수를 살펴보면 앞서 leak..

    [Hack CTF – Simple_Overflow_ver_2]

    Execute 문제로 주어진 파일을 실행하면 입력을 받고 입력받은 값이 저장된 위치를 출력해주는 것으로 보인다. 파일 재실행시 address로 추정되는 값들이 바뀌는 것으로 보아 해당 값을 leak해준뒤 이를 기반으로 exploit을 작성해야 할것같다. Analyze 보호기법을 확인해보면 아무것도 안 걸려있는 것을 확인 할 수 있다. Main Line 13 : scanf함수를 통해 s변수를 입력 받는다. 이때 \n을 파라미터로 주어 \n도 입력 받는다. Line 15~26 : for문으로 앞서 execute에서 확인했던 것처럼 s[i]의 address를 leak해주고 s배열 속에 든 값을 출력해준다. Line 29 : do while문의 탈출 조건으로 scanf의 return값이 0이 아니고 v5가 ‘y..