Hack CTF

    [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 - Basic_BOF # 1]

    Execute 문제 파일을 실행하면 입력을 받고 buf에 들어간 내용을 출력해준 후 check 0x4030201을 출력하여 뭔가의 주소를 출력해준다. 또한 내가 buf에 입력하는 내용이 너무 길다면 buffer overflow가 발생하여 check의 내용이 0x61(a)로 채워지는 것을 알 수 있다. Analyze 1번 문제인 만큼 NXbit 말고는 보호기법이 걸려있지 않다. 그럼 프로그램의 동작을 분석하기 위해 해당 파일을 IDA에 올려서 확인해보자. Main Line 6 : v5변수에 57305985를 대입해준다. Line 7 : fgets함수를 통해 s변수에 45의 길이 만큼 입력을 받는다. Line 8,9 : 앞서 입력한 s변수와 v5의 내용을 출력해준다. Line 10,11 : v5가 67305..