포너블

    Exploit writing tutorial part2 : how to jmp shellcode

    Exploit writing tutorial part2 : how to jmp shellcode 이번 문서에서는 앞서 stack based overflow에서 jmp esp를 사용해 공격자가 원하는 곳으로 프로그램의 흐름을 제어하였다. 이러한 방법이외에도 다양한 방법들이 존재하며 앞서 작성한 exploit을 수정하며 다양한 방법을 알아 볼 것이다. 1. CALL [register] 만약 레지스터에 shellcode를 가르키는 주소가 로드된 경우 해당 register를 단순히 CALL하면 된다. 예를 들면 Esp가 shellcode를 가르키고 있다면 CALL esp를 통해 shellcode를 실행 시킬 수 있다. Kernal32.dll이 많은 CALL [register]를 가지고 있으므로 꽤나 공격가능한 ..

    [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..

    Exploit writing tutorial part1 : Stack Based Overflows

    2009년 7월 17일에 발표된 Easy RM to MP3 Converter에 존재하는 취약점을 이용해 실제 exploit을 작성해본다. Corelan이 작성한 Exploit Writing tutorial에 그 기반을 두며 해당 문서에서는 perl을 사용하여 exploit을 작성하지만 나의 경우에는 python을 사용할 것이다. 해당 취약점을 사용하기 위해 windows xp professional을 vmware에 올려 가상 환경을 구축하였다. 먼저 환경을 구축해준다. python을 사용할 것이기 떄문에 xp에서 구동할 수 있는 버전이 필요 했고 python 3.4.1버전이 xp에서 구동되는 것을 확인하고 공식 홈페이지에서 다운로드 받고 설치하였다. 또한 취약점이 존재하는 Easy RM to MP3를 버..