전체 글
[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..
[Pwnable.xyz - PvP]
Execute 문제파일을 실행하면 프로그래밍적으로 취약한 프로그램이라고 하고 각각의 menu를 보여준다. Analyze 보호기법을 보면 canary랑 nxbit만 켜져있다. RELRO가 full이 아니므로 got overwrite가 가능하지 싶다. main while문에 switch를 통해 분기되어있는 형태이다. 각각의 case에서 어떤 동작을하는지 알아보자. Case0: 프로그램을 종료한다. Case1 : dword_6026A8에 값이 들어있는 경우 short_append함수를 호출하고 아닌경우 메시지가 비어있다고 출력한다. Case2 : dword_6026A8에 값이 없는 경우 (정확히는 0) long_append함수를 호출하고 dword_6026A8에 1을 대입해준다. 값이 존재하는경우 v3에 들어..
[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를 버..
[Pwnable.xyz - J-U-M-P]
Execute 문제로 주어진 파일을 실행하면 위와 같이 메뉴를 보여주고 특히 3번 option을 선택하면 특정 address를 준다. Analyze 보호기법은 NXbit PIE Relro가 걸려있는 것을 확인 할 수 있다. 이제는 Ida를 통해 각각의 메뉴가 어떤 동작을 수행하는지 확인해보자. Main Line 8 : gen_canary함수 호출 Line 10 : v5변수에 loc_BA0의 address를 넣는다. Line 15 : v3변수에 read_int8함수의 return값 대입 Line 18~20 : case2인경우 v5에 v3와 v5를 xor연산한 결과를 대입한다. Line 21~24 : environ 변수의 주소를 leak해준다. Line 25~28 : v4변수가 canary와 같을 경우 JU..