Wargmae/Pwnable.xyz

    [Pwnable.xyz – Punch it]

    Execute 파일을 실행시켜보면 게임을 할지 안할지 물어보고 게임을 선택하게 된다. 하지만 게임을 선택하면 어떤 이유에서인지 error를 출력하고 프로그램이 종료된다. Analyze Pie RELRO Canary nxbit모두 걸려있다. Main Line 11: motd_seclect_character 함수를 호출한다. Line 12~40 : do while문으로 루프가 걸려있다. 탈출 조건은 v6가 v5보다 큰 경우이다. Line 14~38: while문이 두번 걸려있다. v6에 rand함수를 통해 난수를 넣고 v5변수의 입력값과 동일한경우 y를 입력해주면 buf에 입력을 받는다. v5와 v6가 다른경우에는 두가지로 나뉘는데 v5가 v6보다 큰 경우에는 qword_202070 전역변수를 1증가시키고 ..

    [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에 들어..

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

    [Pwnable.xyz - TLSv00]

    Excute 먼저 다운로드 한 파일을 실행시키면 다음과 같은 형태의 프로그램이 실행 된다. Key-generate와 load flag 그리고 print flag를 선택해 줄 수 있으나 당연히 2번이나 3번 옵션을 실행하면 flag를 노출시키지 않는다. 2번의 경우 can’t open flag 를 출력하고 프로그램이 종료되며 3번 옵션의 경우 WARNING: NOT IMPLEMENTED를 출력하고 Wanna take a survey instead?를 출력하는데 아무 값을 입력하지 않아도 Segmentaion fault가 나온다. Analyze 먼저 문제 파일에 어떤 보호기법이 걸려있는지 조회하기 위해 gdb에 올려 checksec명령을 진행하여 확인하였다. 그리고 Hex-ray에 올려 main 함수를 확인..

    [Pwnable.xyz - Welcome]

    Excute 먼저 문제로 주어지는 파일을 실행시키면 아래와 같이 나타난다. 먼저 특정 주소값을 Leak해주고 메시지의 길이와 메시지를 입력 받고 입력 받은 문자열이 출력 된 후 프로그램이 종료 된다. Analyze 먼저 gdb-peda에 문제 파일을 올려 보호기법을 먼저 확인해본다. CANRY, NXbit등 거의 모든 보호기법이 적용 되어있는 것을 확인할 수 있다. 따라서 일단은 IDA-pro를 사용해 코드를 살펴보자. IDA-pro를 통해 hex-ray를 사용하여 디컴파일 시켜 준 결과이다. 프로그램의 전체적인 구조를 파악해보면 다음과 같다. 14번 line을 보면 v3변수에 0x4000만큼 malloc을 이용해 할당해준다. 또한 15번 line에서 아까 할당한 v3에 1을 대입해준다. 16번 line..