reversing.kr Easy Crack write-up

이 문제는 IDA에서 쉽게 열 수 있도록 만들어진 바이너리라서 분석하는데 크게 어려운 점이 있지는 않았다. 해당 파일을 D.I.E 로 열어보면 다음과 같은 화면을 만날 수 있다. 그래서 IDA 32로 바로 PE 파일을 열어보았다. WinMain 함수에서 호출되는 함수를 쭉 따라다니다보면 메인 기능이 있는 함수를 찾아볼 수 있다. 문자열을 검사할 때 string[1], &string[2] 이런 식으로 검사하는 루틴을 갖고 있기 때문에 IDA Hex-ray에서는 위와 같이 나왔다. 그래서 단축키 y 를 눌러 string의 크기를 바꾸었다. 보기가 훨씬 간결해졌다. flag 는 Ea5yR3versing 이다.

pwnable.kr flag write-up

문제에서 제공된 바이너리를 다운로드 받고 이를 strings 명령을 통해 해당 바이너리가 어떠한 문자열을 사용하고 있는지 살펴봄으로써 UPX로 packing되어 있는 것을 확인할 수 있다. 이 파일을 upx unpack 시키고 unpack 된 바이너리를 다시 분석하면 어떠한 로직을 갖고 있는지 확인할 수 있다. unpack 된 파일을 IDA로 열고 다시 String 을 확인해보니 바로 flag 를 얻을 수 있었다.

pwnable.kr bof write-up

해당 문제에 bof 라는 이름의 바이너리와 bof.c 소스가 함께 주어진다. 바이너리만 있어도 될 법한 문제이긴 하지만 그래도 소스가 제공된다는 점에서 쉬운 문제라고 볼 수 있다. 주어진 소스는 아래와 같다. #include #include #include void func(int key){ char overflowme[32]; printf("overflow me : "); gets(overflowme);// smash me! if(key == 0xcafebabe){ system("/bin/sh"); } else{ printf("Nah..\n"); } } int main(int argc, char* argv[]){ func(0xdeadbeef); return 0; } gets() 함수가 vulnable ..

wargame.kr EASY_CrackMe write-up

문제에서 내려받은 PE파일을 DIE에 올리면 다음과 같은 화면이 뜬다. DIE는 Detect It Easy의 약자로 리눅스에서의 file 명령어처럼 실행파일의 구조를 파싱해주는 프로그램이다. CTF에서 비교적 쉬운 리버싱 문제를 풀 때 많은 도움이 된다. 일단 이정도로만 알아두고 바로 PE파일을 실행시켜서 행위를 관찰해보는 방식으로 동적 분석을 해보았다. 사용자에게서 무언가 입력을 받고 어떠한 처리를 통해 nonono 를 출력해주는 듯하다. 바로 x96dbg 를 사용하여 리버싱을 한다. 항상 바이너리를 처음 열 때는 어떤 코드가 기다리고 있을지 설레는 마음으로 열어보지만 딱봐도 복잡해보이는 어셈블리어를 보면 그 마음이 사라진다. 그럴 때는 해당 PE파일이 참조하는 String을 보면서 마음을 달래보곤 한..

백준 1018번 체스판 다시 칠하기 write-up

#!/usr/bin/env python3 # coding: utf-8 def set_plate(): n, m = map(int, input().split()) plate = [] for i in range(n): row = list(input()) plate.append(row) return n, m, plate def get_repaint(plate): result = [] row = [ ['W', 'B'] * 4, ['B', 'W'] * 4 ] for i in range(2): repaint = 0 for j in range(8): check = row[(i + j) % 2] for k in range(8): if plate[j][k] != check[k]: repaint += 1 result.app..

wargame.kr WTF_CODE write-up

문제에 처음 접속해보면 "이게 진짜 소스코드라고? 아무것도 안보인다고!!" 라고 쓰여있는 문구를 볼 수 있다. 한 5년 전쯤? 그 때 워게임들에서 Whitespace, Brainfuck 과 같은 괴랄한 프로그래밍 언어들을 사용하는 문제들이 우후죽순 생겨났는데, 비슷한 류의 문제이다. 이 문제는 Whitespace로 코딩되어 있기 때문에 아래 사진처럼 메모장으로 열었을 때 아무 것도 보이지 않는다. 메모장에 있는 내용을 전체선택하여 whitespace interpreter에 붙여넣기 하고 실행하면 플래그를 얻을 수 있다. https://naokikp.github.io/wsi/whitespace.html

SuSec CTF 2020 'Roll dice' write-up

CTF 도중에는 어떻게 푸는지 정말 감을 못잡아서 결국엔 끝날 때까지 못풀었는데, CTF가 끝나고 Defenit 팀에서 어떻게 푸는 문제인지 알려주어서 나중에야 풀 수 있었다. 해당 문제에서는 소스를 제공해주는데, Python 이기도 하고 무엇보다 eval() 을 통해서 사용자로부터 입력된 표현식을 실행시키는 방식이기 때문에 Python Jail임을 확신했다. I couldn't solve this challenge during the CTF, but I resolved later with the help of the Defenit team. Thanks to team Defenit. I was sure that it is a sort of 'Python Jail' because of eval() fun..

SuSec CTF write-up

Sorry for my bad English foreigners lol :0Webweb0 We can get the source which use nodejs express engine. There's some mechanism which compare 'first' and 'second' in post method. As send Array in 'first' and 'second', you can get the flag! Microservice We can access to very simple web service. You can Login, get Flag, and change the Theme of the service. After many tries in JWT Token Attack, I f..

wargame.kr QR CODE PUZZLE write-up

문제에 접속해보면 QR코드로 추정되는 사진이 퍼즐게임과 같은 조각으로 나뉜 것을 볼 수 있다. 예전에 주니버네이버에서 해봤을 법한 게임이다. 소스를 보면 QR코드를 어떻게 불러왔는지 알 수 있다. /**/ 에 jQuery의 attr() 함수를 통해 QR 코드를 불러옴을 확인할 수 있다. QR코드의 주소는 URL Encoding 형태로 인코딩되어 있는데 이것을 다시 디코드해보면 QR코드의 경로가 './img/qr.png' 인 것을 알 수 있다. http://wargame.kr:8080/qr_code_puzzle/img/qr.png QR코드 리더기로 불러오면 'http://wargame.kr:8080/qr_code_puzzle/Give_M3_th7_F1aG.php' 로 이동한다. 그리고 플래그를 얻을 수 있다.