HackCTf

    [HackCTF] Simple_Overflow_ver_2 풀이 (150p)

    문제 종류 - Pwnable 사용한 툴 - IDA nc ctf.j0n9hyun.xyz 3006 풀이 파일을 IDA로 열어보자. 쉘을 여는 함수가 따로 없는거 봐서는, main 함수에서 bof가 발생하는 듯하다. C로 보기 좋게 옮기면.. 이렇다. #define _CRT_SECURE_NO_WARNINGS #include int main() { int v3; //i char v5; //Again 결정 변수 char s[128]; //Data 입력 변수 int i; v5 = 121; do { printf("Data : "); if (scanf(" %[^\n]s", s)) { for (i = 0;; ++i) { v3 = i; if (v3 >= strlen(s)) break; if (!(i & 0xF)) prin..

    [HackCTF] x64 Simple_size_BOF 풀이 (150p)

    문제 종류 - Pwnable 사용한 툴 - IDA nc ctf.j0n9hyun.xyz 3005 풀이 pwn 패키지 가끔 헷갈려서 또 삽질했네... ^---^ 우선 IDA로 열어봅시다. main 함수에서 gets 함수를 사용해 bof를 발생시킵니다. 쉘 함수가 없는거로 봐서는, 직접 쉘 코드를 작성해야 합니다. 이제 gdb로 열어봅시다. 이번에는 좀 큰 사이즈인 0x6d30(27952)칸을 할당받는다. x64 환경이니, 쉘코드 + 더미 값 + RET 페이로드를 작성해 쉘을 열어보자. 난 31byte 쉘 코드를 사용했기 때문에 쉘코드(31) + 더미(27929) + RET(6)칸을 적어주면 될 듯하다. RET의 사용될 buf의 시작 주소는, 프로그램을 실행하면 다음과 같은 형식으로 알려준다. buf의 주소가..

    [HackCTF] x64 Buffer Overflow 풀이 (150p)

    문제 종류 - Pwnable 사용한 툴 - IDA nc ctf.j0n9hyun.xyz 3004 풀이 이야.. 쉘 함수가 있는 줄 모르고 삽질했네.. 일단 파일을 IDA로 열어봅시다. main 함수 부분에서 scanf를 이용해 bof를 발생시킵니다. 쉘을 열어주는 함수가 따로 있으니까, gdb를 이용해 분석을 해보도록 합시다. scanf를 위해 272칸을 할당받으니, x86 bof와 마찬가지로 RET 부분에 쉘 함수의 시작 주소를 덮으면 될 거 같네요. x64 환경에서는 SFP(8byte), RET(6byte)를 할당 받습니다. 272 + 8byte 만큼을 더미 값으로 덮고, 6byte를 쉘 함수의 시작 주소인 \x06\x06\x40\x00\x00\x00로 덮어봅시다. 1 from pwn import * ..

    [HackCTF] 내 버퍼가 흘러넘친다!!! 풀이 (150p)

    문제 종류 - HackCTF 사용한 툴 - IDA nc ctf.j0n9hyun.xyz 3003 풀이 나는 FSB가 더 어려웠는데 이게 150점이네? 먼저 IDA로 파일을 열어보자. 이번에는 특별한 함수 없이 main 함수만 존재한다. Name과 input을 입력받는 프로그램인 듯하다. gdb로 열어보도록 하자. gets는 버퍼 오버플로우를 유발시키기 정말 좋은 함수다. 총 20칸의 버퍼를 생성하니까, buf[20] + SFP[4] + RET[4] 총 28byte의 페이로드를 작성하면 될 듯하다. 이번 문제에서는 따로 쉘을 열어주는 함수가 없으니 쉘코드를 Name에 적어주고, RET를 Name의 시작 주소로 덮어버리면 쉘이 툭 하고 튀어 나오지 않을까..? 쉘코드는 구글링하면 나오지만, 그냥 여기다가도 적..

    [HackCTF] 달라란 침공 풀이 (150p)

    문제 종류 - MISC 사용한 툴 - nc ctf.j0n9hyun.xyz 9003 풀이 중간에 포너블 풀다가, pwn 패키지에 익숙해지고 싶어서 이 문제를 풀게 되었다. 문제 유형은 간단히, 사칙 연산 문제이며 1단계는 20개, 2단계는 30개, 3단계는 40개의 문제가 출제된다. 파이썬으로 간단히 사칙연산 매크로를 만들 수 있다. 1 from pwn import * 2 3 p = remote('ctf.j0n9hyun.xyz',9003) 4 5 for test in range(0,3): 6 num = 20 7 p.recvuntil('input )') 8 if test == 0: 9 p.sendline('1') 10 elif test == 1: 11 p.sendline('2') 12 num = 30 13 ..

    [HackCTF] Basic FSB 풀이 (100p)

    문제 종류 - Pwnable 사용한 툴 - IDA nc ctf.j0n9hyun.xyz 3002 풀이 처음하는 포너블은 너무 어렵다.. ㅠㅠ FSB가 뭐지 하고 찾아보니까 포멧스트링 버그이다. IDA로 일단 까보자. 메인 함수에서는 vuln 함수를 실행하고 종료한다. vuln 함수로 넘어가 보자. fgets로 입력을 받는데, printf 부분에 포멧스트링 지정자가 존재하지 않는다. 아마 이 부분을 이용해 공격을 수행해야 할 듯하다. 먼저 어느 부분에서 입력받은 값을 참조하는지 알아내기 위해, 다음과 같은 값을 입력한다. 두번째 %x에서 입력받은 값을 참조하니, 입력 값을 printf@got 주소로 변경하고, flag 함수 주소의 -4 만큼 해주면 flag를 얻을 수 있을 거 같다. 1 from pwn im..

    [HackCTF] Basic_BOF #2 풀이 (100p)

    문제 종류 - Pwnable 사용한 툴 - IDA nc ctf.j0n9hyun.xyz 3001 풀이 똑같이 IDA로 열어보자. main 함수는 다음과 같다. v5를 함수 포인터로 받고 133칸을 fgets로 입력받는다. 그 후, v5(sup) 함수를 실행하고 프로그램을 종료한다. 그런데, v5 함수는 puts로 s를 다시 출력하는 역할만 수행한다. v5 함수를 이용해 뭔가 하는 건 아닌 거 같고, 대신 shell 함수를 통해 쉘을 실행하는 듯하다. 이제 gdb로 까보도록 하자. 정상적인 로직이라면, ebp-0xc에 v5 함수 시작 주소를 넣고 call을 이용해 eax(ebp-0xc 즉, 함수 시작 주소)를 실행한다. 그러나, 입력을 받는 부분을 이용해 ebp-0xc를 shell 함수의 시작 주소로 덮어 ..

    [HackCTF] Basic_BOF #1 풀이 (100p)

    문제 종류 - Pwnable 사용한 툴 - IDA nc ctf.j0n9hyun.xyz 3000 풀이 Pwnable은 처음인데.. ㅎㅅㅎ.. 그냥 IDA 쓰면 되는건가? main 함수의 슈도코드를 봐보자. 음? 45칸을 입력 받고, 그냥 v5가 -559038737이면 if문을 통과해서.. shell을 열고?? 끝인가? 일단 gdb를 이용해 v5가 저장된 위치를 알아보도록 하자. intel CPU로 안 바꿔서.. 이렇게 보이긴 하는데, ebp-0xc에 위치해있다. 해당 부분에 bp를 걸고, 값을 수정한 다음 프로그램을 실행해보자. 음.. 생각해보니까 내 서버에서 하면 내 쉘이 열리구나.. 말로만 듣던(?) pwn 패키지를 사용해보자... 첨 사용해 보는거라 다른 분 블로그를 참고해 페이로드를 작성하였다. 1..