WAR GAME/HackCTF 43

[HackCTF : Pwnable] look at me 풀이 (32bit, syscall)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 함수와 syscall의 차이? 그리고 아래 문제가 생각났던 문제.. [DEFCON 2019] speedrun-001 풀이 주어진 파일은 문제 파일 바이너리 Analysis 바이너리를 IDA로 열자마자 느꼈던게.. 왼쪽에 함수 목록에 함수들이 너무나 많았다. static으로 컴파일 된 프로그램 같았다. 그리고 맞았다. ㅇㅁㅇ..!! 일단 main을 살펴보자. main은 간단하다. look_at_me 함수를 살펴보자. gets에서 BOF가 발생한다. RET를 어떤 함수로 덮을까... 하여 함수 목록을 살펴봤지만 뭐 flag를 출력해주는 함수도 없고.. system 함수도 없고(ㅜㅜ) 심지어 nx도 걸려있어서 쉘코드 실행도 못한다....

WAR GAME/HackCTF 2021.04.08

[HackCTF : Pwnable] RTL_Core 풀이 (32bit, RTL)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 간단하게 짬내서 풀어보았다. 주어진 파일은 libc와 문제 바이너리 이다. Analysis IDA로 함수들을 살펴보자. main 뭔가 저 조건을 만족시키고 core 함수를 실행해야할 것 같다. check_passcode(input) == 0xc0d9b0a7 check_password output = *(0 + input) output += *(4 + input) output += *(8 + input) output += *(12 + input) output += *(16 + input) 32bit라서 한칸에 4byte인데, input 아래로 4칸,,, 한마디로 총 5칸에 있는 값을 다 더한 게 output이다. 이 output이..

WAR GAME/HackCTF 2021.04.05

[HackCTF : Pwnable] Random key 풀이 (rand)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 롸업보고 풀었는데, 안봤으면 못 풀었을 것 같다. 주어진 파일은 문제 바이너리 파일! Analysis random값과 내가 입력한 input값이 같으면 flag를 출력해 준다. 빨간 네모 친 부분을 잘 모르겠다면 아래 링크 참조! jiravvit.tistory.com/entry/NOTE-coding-%EB%82%9C%EC%88%98%EC%83%9D%EC%84%B1randsrandtime-C%EC%96%B8%EC%96%B4?category=925961 [NOTE : coding] 난수생성(rand(),srand(),time()) (C언어) 환경 : ubuntu 18.04 hackCTF random_key 문제 풀면서 정리해봤다. ..

WAR GAME/HackCTF 2021.03.25

[HackCTF : Pwnable] 1966 풀이 (cpp, BOF)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro std::cin은 bof가 일어난다는 것을 첨 알았다. 주어진 파일은 문제 바이너리 파일 Analysis 별다른 기능을 하지 않는다. 저기 std:cin으로 name을 입력받는다. 저기서 bof가 일어나길 희망하고 테스트해봤더니 bof가 터진다. 앗싸! shell 주는 함수도 있으니 return address를 덮으면 되겠다. How to exploit return address를 spawn_shell 함수로 덮는다. Let's exploit from pwn import * #p = process('./1996') p = remote('ctf.j0n9hyun.xyz', 3013) e = ELF('./1996') shell = 0..

WAR GAME/HackCTF 2021.03.24

[HackCTF : Pwnable] poet 풀이 (64bit, BOF)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 오래걸릴 뻔... 주어진 파일은 문제 바이너리 파일 Analysis 일단 실행하면 아래와 같다. 뭔가 1000000점이면 flag를 줄 것같은 느낌 IDA로 열어보자. 참고로 저기 보이는 score 변수는 전역변수다. score 변수가 1000000이면 while문을 탈출하여 reward() 함수를 실행하게 되는데 reward() 함수는 flag를 출력해준다. 처음에 strcpy함수에서 bof를 일으켜서 뭐 어찌어찌 할 생각을 하였다. CTF 글자 열심히 보냈는데 세폴 떴음ㅋ How to exploit score,poem, author 변수는 다 전역변수이다. 같은 bss영역에 위치한다. poem과 author를 입력받을 때 둘..

WAR GAME/HackCTF 2021.03.24

[HackCTF : Pwnable] g++ pwn 풀이 (CPP)

문제 풀이 환경 : ubuntu 20.04 사용 툴 : IDA 7.2 pro 긴가 민가 했었는데 잘 찍어서 푼 것 같다. 아 풀 당시에는 IDA 7.5를 사용했었는데 디컴 자체는 7.2가 알아보기 더 쉬운 것 같다. 주어진 파일은 문제 바이너리 파일 뿐. . . 분석에 들어가기에 앞서... 난 이 파일을 실행하려 했을 때 아래와 같은 오류가 떴다. 그래서 아래와 같은 방법으로 해결하였다. apt-get install lib32stdc++6 stackoverflow.com/questions/11471722/libstdc-so-6-cannot-open-shared-object-file-no-such-file-or-directory libstdc++.so.6: cannot open shared object f..

WAR GAME/HackCTF 2021.03.16

[HackCTF : Pwnable] RTL_World 풀이 (32bit, RTL)

문제 풀이 환경 : ubuntu 20.04 사용 툴 : IDA 7.5 pro 소스코드 복잡해보여서 쫄았는데 별거 아니었다. 뿌듯하다. 주어진 파일은 문제 바이너리 파일 뿐이다. Analysis IDA로 까보자. 너무 길어서 그냥 복붙했다. int __cdecl main(int argc, const char **argv, const char **envp) { int result; // eax int v4; // [esp+10h] [ebp-90h] char buf[128]; // [esp+14h] [ebp-8Ch] void *system; // [esp+94h] [ebp-Ch] void *handle; // [esp+98h] [ebp-8h] void *binsh; // [esp+9Ch] [ebp-4h] se..

WAR GAME/HackCTF 2021.03.16

[HackCTF : Pwnable] BOF_PIE 풀이 (32bit, BOF, PIE)

문제 풀이 환경 : ubuntu 20.04 사용 툴 : IDA 7.5 pro PIE 먹고 싶다. 주어진 파일은 문제 바이너리 파일 하나 뿐 Analysis IDA로 까보자. scanf는 전형적으로 bof가 발생하는 함수이다. j0n9hyun 함수에서 flag를 읽어오는데 마침 bof도 일어나니 RET를 저 함수의 주소로 바꾸어주면 될 것 같다. 실행을 해보면 welcome 함수의 주소가 출력이 되는데 끝에가 909로 일정하지만 계속 랜덤하게 주소를 출력하고 있다. 그 이유는 gdb로 welcom함수의 주소를 읽어보면 저런식으로 매우 작은 주소로 설정이 되어 있는데, 주소공간의 어느 위치에 매핑되어도 작동하도록 상대주소로 되어있다는 뜻이다. 아무튼 PIE 보호기법이 설정되어있다는 것을 의심을 할 수 있다...

WAR GAME/HackCTF 2021.03.15

[HackCTF : Pwnable] Offset 풀이 (32bit, BOF)

문제 풀이 환경 : ubuntu 20.04 사용 툴 : IDA 7.5 pro 어떻게 풀까 살짝 고민했지만 어쨌든 바로 잘 풀어냈다. Analysis gets함수에서 BOF가 일어난다. select_func 함수가 수상해보이니 살표보자. main함수에서 BOF가 일어나니깐 내가 원하는 함수를 실행시킬 수 있다. 참고로 return address를 바꾸는 느낌이 아니라 위에 선언된 변수 두개를 덮어쓰는 거다. 실행시킬 함수는 print_flag이다. How to exploit payload = dummy(dest) + print_flag함수주소(*func) Let's exploit from pwn import * #p = process('./offset') p = remote('ctf.j0n9hyun.xyz..

WAR GAME/HackCTF 2021.03.09