WarGame

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

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

    [Hack CTF – x64 Simple_size_BOF]

    Hack CTF – x64 Simple_size_BOF Execute 먼저 문제 파일을 실행 하면 특정 address값을 leak해조고 문자열을 입력받는다. 실행시마다 leak되는 값이 달라지는 것을 확인 할 수 있다. Analyze 아무런 보호기법도 걸려있지 않은 것을 확인할 수 있다. 특히 nxbit가 풀려있으므로 shellcode를 올려서 shell을 얻을 수 있다. Main Line 6 : s변수의 내용을 puts함수를 통해 출력한다. Line 7: printf함수를 통해 v4변수의 address를 leak해준다. Line 8 : gets함수를 통해 v4변수에 입력을 받는다. gets함수는 입력값의 길이를 검증하지 않기 때문에 buffer overflow를 발생 시킬 수 있을 것이다. Solve ..

    [Hack CTF – x64 Buffer Overflow]

    Execute 문제로 주어진 64bof_basic파일을 실행시키면 입력을 받고 hello라는 문자열과 앞서 내가 입력한 문자열을 출력해준다. 이외에는 특별히 address를 leak하거나 다른 동작은 하지 않는다. 프로그램의 동작을 파악하기 위해 IDA를 통해 확인해보자. Analyze 보호기법을 확인해보면 nxbit만 활성화 되어있다. 따라서 이번문제는 shellcode를 직접 올리는것이 아니라 단순이 ret변조를 통해 프로그램 실행 흐름을 변경해서 shell을 얻는 문제인 것 같다는 생각을 하였다. Main Line 6 : scanf함수를 통해 문자열 형태로 s변수를 입력받는다. Line 7 :strlen함수로 앞서 입력한 문자열의 개수를 v5에 대입한다. Line 8 : hello문자열과 함께 s변..

    [Hack CTF – 내 버퍼가 흘러넘친다!!!]

    Execute 문제로 주어진 파일을 실행하면 name과 input을 받고 프로그램을 종료한다. 이외에는 특별한 동작을 하지 않는다. Analyze 먼저 prob1 파일의 보호기법을 확인해보자. 아무것도 걸려있지 않을 것을 확인 할 수 있다. Nxbit가 앞선 문제에서는 걸려있었는데 해제 되어있는 것 보아 shell을 얻기 위한 shellcode를 직접 넣지 않을까? 라고 생각하였다. 정확하게 프로그램의 동작을 알기 위해 IDA를 통해 열어보았다. Main Line 5 : setvbuf함수를 이용해 버퍼를 비운다. Line 7 : read 함수를 이용해 name변수에 0x32만큼 입력을 받는다. Line 9 : gets함수를 이용해 s변수를 입력 받는다. Line 9의 gets 함수는 입력 값의 길이를 검..

    [Hack CTF - Baisc_FSB]

    Execute 문제에서 fsb라고 대놓고 주고 있기 때문에 일부러 포맷 스트링을 넣을 결과도 확인해 보았다. Fsb를 이용해서 푸는 문제인 것이 거의 확실해 졌다. Analyze 프로그램의 동작을 정확하게 알아 보고 어떤 부분에서 fsb가 발생하는지 확인하기 위해 IDA를 통해 열어보자. Main Mina 함수는 별다른 동작을 하지 않는데 누가봐도 수상한 함수인 vuln함수를 호출한다. Vuln Line 7 : fget을 통해 1024byte만큼 s변수에 저장한다. Line 8 : snprintf를 통해 format에 0x400byte만큼 s변수의 내용을 복사해준다. Line 9 : printf함수를 통해 format의 내용을 출력한다. Line9에서 printf함수를 보면 포맷 스트링을 지정해주지 않아..

    [HackCTF - offset]

    Excute 먼저 문제로 주어진 파일을 실행시키면 어떤 함수를 호출할지 물어보고 값을 입력해주면 종료된다. 아마 취약점을 찾아 shell을 띄우거나 플래그를 출력할 수 있는 함수를 호출 해주면 될 것 같다. 적용되어있는 보호기법은 아래와 같다. Analyze IDA에 올려서 프로그램의 실행 흐름을 분석해보자 Main Line 9 : gets함수를 통해 길이를 제한하지 않고 입력을 받는다. Line 10 : select_func 함수에 앞서 입력받은 값을 인자로 전달해 준다. Select_func Line 3,4 : char형 변수 dest와 함수 포인터 v3를 선언해준다. Line 6 : v3포인터 변수에 함수 two의 주소를 대입한다. Line 7 : strncpy함수를 호출에 인자로 받은 src를 0..

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