System
-
CTFd 설치법System/CTF 2019. 11. 29. 16:01
환경은 Ubuntu 16.04에서 진행하였다. 패키지 설치 1. git 설치 sudo apt-get install git 2. python3 && pip3 설치 sudo apt-get install python3 python3-pip 3. CTFd git 다운로드 git clone https://github.com/CTFd/CTFd.git 4. CTFd 모듈 설치 sudo pip3 install -r requirements.txt 여기까지 진행했으면 CTFd 설치는 끝났다. 이제 스크립트를 상황에 맞게 수정 해주면 된다. serve.py 수정 vi serve.py #!/usr/bin/python3 # 파일 실행 환경변수 설정 from CTFd import create_app import argparse ..
-
[2019picoCTF] droids4System/CTF 2019. 10. 13. 00:09
picoCTF의 droids 시리즈 중 마지막 문제인 droids4다. 화면 구성은 다음과 같다. 마지막 문제도 이전 문제들과 같이 사용자의 입력을 받고, 입력 값에 대한 결과 값을 출력해주는 어플이다. 어플에서 입력한 값은 getFlag( )의 첫번째 인자로 넘어가는데, equals( )로 검증이 이루어지고 있다. 빨간 박스에서 어떠한 값이 만들어지는데, 우리의 입력 값이 해당 값과 같아야 한다. 주황 박스는 Flag값을 생성하는 메소드인데, 전 문제처럼 어떠한 조건에서도 실행되지 않는다. droids3문제 처럼 바로 cardamom( )을 호출하는 방법을 생각해볼 수 있는데, 바로 메소드를 호출하게 되면 Crash가 발생하면서 어플이 종료된다. 따라서, 해당 문제에서는 cardamom( )의 인자로 ..
-
[2019picoCTF] droids3System/CTF 2019. 10. 12. 23:27
picoCTF droids 시리즈 중 4번째 문제다. 화면 구성은 다음과 같다. 이번에도 사용자의 입력을 받고, 버튼을 누르면 입력 값 처리 후 결과 값을 "i'm a flag!"위치에 출력해준다. 우리가 입력한 값은 getFlag( )의 첫 번째 인자로 넘어가는데, 입력된 값에 상관없이 nope( )가 실행된다. 빨간박스 nope( )는 단순히 "don't wanna"문자열을 반환하는 메소드이기 때문에 어떠한 값을 입력해도 결과는 똑같다. 주황박스 yep( )은 이전 문제들에서 Flag값을 얻어올 때와 같은 행동을 하고 있다. 하지만, yep( )는 어떠한 조건에서도 호출되지 않기 때문에 일반적인 방법으로는 yep( )의 실행값을 확인할 수 없다. 이때 사용할 수 있는 방법이 Frida를 이용한 후킹이..
-
[2019picoCTF] droids2System/CTF 2019. 10. 12. 23:04
picoCTF의 droids 시리즈 중 3번째 문제다. 어플 화면 구성은 다음과 같다. 전 문제들과 똑같이 사용자의 입력을 받고 내부에서 처리하며, 처리된 결과를 출력해주는 어플이다. 조금 귀찮은 문제다.. String[] v0 = {"weatherwax", "ogg", "garlick", "nitt", "aching", "dismass"} 위와 같은 Array변수에서 concat( )으로 각 인덱스를 이어붙인 문자열과 입력값이 같으면 Flag값을 출력해주는 로직이다. 소스대로 문자열들을 이어붙이면 "dismass.ogg.weatherwax.aching.nitt.garlick" 해당 문자열이 완성된다. adb shell input text "dismass.ogg.weatherwax.aching.nitt...
-
[2019picoCTF] droids1System/CTF 2019. 10. 12. 22:47
droids시리즈 두 번째 문제다. 어플의 화면 구성은 다음과 같다. 사용자의 입력을 받고 버튼을 누르면 입력된 값이 어플 내부에서 처리된다. 처리된 결과값이 "i'm a flag"위치에 출력된다. 입력 값은 getFlag( )의 첫 번째 인자로 넘어가며, 입력값이 arg3.getString(0x7F0B002F)과 같으면 Flag값을 반환해준다. 어플에서 참조하는 리소스에 대한 정보는 res/values/public.xml에 존재한다. 0x7F0B002F ID값을 가진 리소스는 String타입의 password이다. String에 대한 리소스들은 res/values/strings.xml에 존재한다. password(0x7F0B002F)의 값은 "opossum"인 것을 확인할 수 있다. 해당 값을 텍스트 ..
-
[2019picoCTF] droids0System/CTF 2019. 10. 12. 22:28
이번에 진행된 picoCTF에서 안드로이드(.apk) 문제가 있어서 한번 풀어봤다. 뉴비들 상대로 진행된 CTF이기 때문에 난이도는 쉬운 편에 속한다. 우선 어플을 실행하면 입력박스/버튼/텍스트뷰 3가지로 구성된 화면을 볼 수 있다. 우리가 입력한 값이 어플 내부에서 검증된 값이면 "I'm a flag!"위치에 Flag값이 출력되는 구조이다. JEB로 어플의 MainActivity를 보면, 주황박스에서는 버튼을 눌렀을 때의 처리를 하고 빨간박스에서는 hellojni.so를 로드하는 모습을 볼 수 있다. 우선 버튼을 눌렀을 때의 동작을 살펴보자 getFlag( )의 첫 번째 인자에는 우리가 텍스트박스에 입력한 값이, 두 번째 인자에는 어플의 Context값이 넘어간다. 우리가 입력한 값(arg2)를 pap..
-
DLL 바이너리 수정으로 BreakPoint 걸기System/Reversing 2019. 10. 7. 19:23
프로그램을 분석하다보면, 안티디버깅의 탐지로 인해일반적인 디버거(x64dbg, windbg...)의 동적분석이 불가능한 경우가 있다.디버거로 탐지를 우회하는 방법도 있지만, CheatEngine은 탐지 안하는 경우가 많기 때문에해당 툴로 동적분석을 진행할 수 있다. CheatEngine자체의 BP기능을 사용할 수도 있지만, 이것 또한 사용하지 못하는 경우에는아래와 같은 방법으로 BP를 걸 수 있다. [ DLL 바이너리 수정 ]DLL의 2Byte opcode를 "EB FE"로 수정하면 해당 부분에서 BP가 걸린듯한 효과를 볼 수 있다. 또한, "int3"(CC) Interrupt를 탐지하는 안티 디버깅도 우회할 수 있다. "EB FE"는 자기 자신으로 JMP하는 opcode로서, CheatEngine으로 ..
-
[x64dbg] Themida Debugger 탐지 우회#2System/Reversing 2019. 7. 11. 13:13
이번에는 x64dbg에서 Themida Debugger탐지를 우회하는 방법을 정리해보겠다.우선 x64dbg는 이전 Ollydbg의 확장버전 개념의 디버거이고, 한글지원과 다양한 플러그인들을 사용할 수 있다. x64dbg_OfficialSite: https://x64dbg.comx64dbg_Blog: https://x64dbg.com/blog/x64dbg_Github: https://github.com/x64dbg/x64dbg/wiki[ Themida Detect ]우선 Themida로 패킹되어 있는 .exe파일을 디버거로 로드하여 실행하면위와 같은 Themida경고창이 뜨면서 프로세스가 종료되는 것을 확인할 수 있다. 이전 글에서도 언급했듯이, 디버거를 Kernel영역에 로드하는 방법도 있겠지만이번에 소..