CTF write_up/Hack CTF
-
[Pwn] Yes or noCTF write_up/Hack CTF 2019. 12. 9. 13:27
김현식 aka.Gyul 님이 만드신 문제인 Yes or no 문제입니다. 18.04 기준으로 Test가 됬다고 되어 있어서 Ubuntu 18.04 에서 Exploit를 했습니다. 파일을 다운받아 열어보면 2개의 파일이 존재 합니다. libc 파일을 준것으로 보아 RTL을 사용해야 할것으로 예상이 됩니다. 먼저 파일의 보호기법을 확인해 보고 실행해 보겠습니다. NX를 제외 하고는 없는 것같아 보입니다. 숫자를 입력하니까 do_system+1094 라는 문자열을 출력하면서 good luck을 외치고 종료를 합니다. do_system+1094 라고 검색을 해보니 중국어 간체로 되어있는 사이트 들에서 해당 문제점을 다룬 모습을 확인 할 수 있었습니다. do_system+1094는 2.27 glibc 버전에서 발..
-
[Pwn] GiftCTF write_up/Hack CTF 2019. 10. 25. 11:48
문제를 실행 하면 아래와 같이 실행이 됩니다. 빨간 박스 한 부분이 입력 하는 부분 입니다. 보호 기법은 아래와 같습니다. IDA 로 한번 열어 보겠습니다. 2개의 주소를 주는데 binsh 와 system 함수 주소를 줍니다. 여기서 binsh는 /bin/sh 의 문자열이 아닌 그냥 binsh라는 변수명을 가진 변수 입니다. 예상대로 아무런 값이 들어 있지 않습니다. 저 변수에 /bin/sh 문자열을 넣으면 될 것 같습니다. 필요한 주소는 일단 pr gadget 과 get plt 주소 입니다. pr gadget 주소 : 빨간 박스 친 첫주소중 아무거나 쓰셔도 상관이 없습니다. get plt 주소 : 이를 바탕으로 exploit 코드를 작성해 보겠습니다. Flag : HackCTF{플래그_잘_받았지?_이게..
-
[Pwn] Look at meCTF write_up/Hack CTF 2019. 9. 24. 22:27
문제를 한번 해결해 보겠습니다. 간단한 입출력 프로그램이네요! NX 보호기법이 작용 중이여서 쉘코드를 넣고 실행 시키는 것은 불가능 할 것 같습니다. IDA 32bit으로 한번 열어보겠습니다. 중요한 부분은 딱히 없는 것 같고 look_at_me 함수로 들어갑니다. look_at_me 함수는 아래와 같습니다. gets함수로 v1변수에 입력을 받고있고 v1변수의 크기는 0x18로 24입니다. 이제 익스코드를 작성해야하는데.. 함수가 923개나 출력이 됩니다. 그 이유를 보니 다음과 같았습니다. dynamic linked 가 아닌 statically linked 로 되어있습니다. 그래서 모든 함수가 import 되어 있는 것입니다. ROP 취약점을 일으키기 위해서는 system 함수가 필요하지만 다음과 같이..
-
[Pwn] RTL_CoreCTF write_up/Hack CTF 2019. 9. 24. 11:12
문제를 확인해 보겠습니다. 딱히 봐야 하는 보호 기법은 없는 것 같습니다. 실행을 해보면 아래와 같습니다. passcode를 입력해 달라고 하네요! IDA 32bit로 열어서 분석해 보겠습니다. main함수 디컴파일 코드 입니다. gets로 s변수에 입력을 받고 해당 변수와 hashcode 값과 비교를 합니다. hashcode값은 아래와 같습니다. hashcode = 0xC0D9B0A7 = 3235492007 입니다. 입력한 s변수가 check_passcode함수의 인자로 들어가기 때문에 코드를 확인해 보겠습니다. 4바이트 단위로 주소를 받아서 입력하는것으로 보아 아래와 같이 값을 받아오는것 같습니다. i = 0 -> a1+0x0 i = 1 -> a1+0x4 i = 2 -> a1+0x8 i = 3 -> ..
-
[Pwn] Random KeyCTF write_up/Hack CTF 2019. 9. 24. 01:51
문제를 확인해 보겠습니다. 보호 기법은 상관안하고 문제를 풀어도될 것 같습니다. 단순히 key값을 입력하는것같네요. IDA 64bit로 문제를 분석해 보겠습니다. 다른 함수 없이 main 밖에 없지만.. rand()함수의 값과 같은 값을 입력해서 clear하는 문제 같습니다. 일단 저번 HackCTF BOF-PIE 문제에서 PIE 와 PIC에 대해서 공부를 했었습니다. 해당 용어를 공부하면서 정적라이브러리와 동적라이브러리를 겸해서 공부했었습니다. 동적라이브러리로 rand함수와 똑같은 코드를 작성해서 .so 파일을 만들어서 import 시키면 같은 값을 가져올 수 있습니다. time.c 라는 코드를 작성해 보겠습니다. 그리고 time.so를 gcc 로 만들어 보겠습니다. .so 파일을 추가할때 ctypes..
-
[Pwn] 1996CTF write_up/Hack CTF 2019. 9. 24. 01:28
200점 치고는 매우 쉬운 문제였다. 입력한 값에 =이 붙어서 출력이 된다. 딱히 기법을 감안하면서 풀지 않아도 될 것 같습니다. IDA 64bit을 이용해서 분석해 보겠습니다. 하나는 main 함수와 하나는 bash 쉘이 있을 것 같다. name이라는 변수에 입력을 하고 =을 붙입니다. getenv함수가 있지만 입력한 값에 대한 환경변수를 가져 오는 구문 인거 같다 정도만 알면 될 것 같습니다. 예상 그래도 쉘이있습니다. name의 크기 + SFP 만큼 dummy값을 넣고 RET 자리에 spawn_shell 주소를 넣으면 될것 같습니다. name 크기 0x410 = 1040 + SFP = 1048 spawn_shell함수 주소 : 0x400897 이제 exploit code를 작성해 보겠습니다. Fla..
-
[Pwn] Beginner_HeapCTF write_up/Hack CTF 2019. 9. 24. 00:31
Heap 관련된 문제 인것 같습니다. 한번 문제를 실행해 보겠습니다. 입력을 2번 받고 아무런 행위가 일어나지 않습니다. 64비트 파일이군요. IDA 64bit으로 열어보겠습니다. main에서 malloc으로 동적할당 하고 있고 함수를 보니 다음과 같은 함수가 있었습니다. 먼저 main에서는 다음과 같은 행위를 합니다. 1. v3에 16 공간 할당 2. v3+1에 8 공간 할당 3. v4에 16 공간 할당 4. v4+1에 8 공간 할당 5. s라는 변수에 최대 0x1000의 크기의 값을 입력받고 v3+1에 저장 6. s라는 변수에 최대 0x1000의 크기의 값을 입력받고 v4+1에 저장 여기서 문제는 동적할당해준 크기 보다 입력받는 크기가 더 크다는 점입니다. 그래서 Heap Overflow 가 여기서 ..
-
[Pwn] PoetCTF write_up/Hack CTF 2019. 9. 24. 00:30
실행을 한뒤 checksec으로 보호기법 까지 확인해 보겠습니다. 64비트 파일에 보호기법은 딱히 고려하지 않아도 될것 같습니다. 일단 문제를 보면.. point를 모으는 문제네요 이런 문제는 거의 대부분 point 쌓이는 변수에 다가 덮어 씌우는 형식의 문제가 자주 나오는데 과연! IDA 64bit으로 열어서 디컴파일 코드를 분석해 보겠습니다. 일단 함수가 총 3개가 있는것 같습니다. 아래에 dword_6024E0이 point 변수인것 같습니다. bss 영역에 있는 변수라고 되어 있습니다. bss란? Block Started by Symbol의 약자로 초기에 오직 0의 값으로 표시된 정적으로 할당 된 변수가 포함된 데이터 세그먼트의 일부로 컴파일러나 링커에 의해서 사용된다. 는 너무 긴거 같고, 간단히..