본문 바로가기

Write Up

2016 Sharif CTF Write-Ups


Crypto - Rail Fence Chiper

말 그대로 rail fence 암호이다. 대충 레일 펜스 디코딩 해 주는 사이트 찾아서 레일 수는 21로 게싱하여 돌리면 된다. 

flag : QmFzZTY0IGlzIGEgZ2VuZXJpYyB0ZXJt


Reversing - dMd

IDA로 열면 md5해시화 해서 저장되어 있는 해시와 비교하는 것을 볼 수 있다.

비교하는 해시의 원본값을 찾으면 된다.

flag : b781cbb29054db12f88f08c6e161c199


Reversing - SRM

이메일과 시리얼 두 개를 비교하는데 우리가 필요한 것은 시리얼이고 이메일과 시리얼의 연관성은 전혀 없으므로 이메일은 건너 뛰고 시리얼만 찾으면 된다. 

시리얼 비교 구간은 이렇게 되고 동적분석 해 본 결과 첫 글자 'C', 맨 마지막 글자 'X' 이런 식으로 비교를 하다가 두 번째 글자 'Z', 두 번째 글자 + 뒤에서 두 번째 글자 == 0x9B 이런 식으로 비교를 한다. 이렇게 동적 분석 하다 보면 16글자의 키 값을 모두 알 수 있다.

flag : CZ9dmq4c8g9G7bAX


Reversing - Android App

apk 리버싱 문제이다. JD-GUI로 열어 보면 

라이브러리를 로드하는 것을 볼 수 있다. 라이브러리를 IDA로 열어서 보면 

Is_Correct 함수 내에 해시값과 strcmp하는 구간이 있다.

flag : ef57f3fe3cf603c03890ee588878c0ec


Reversing - Serial

IDA로 열어보면 

코드가 깨져있다. 코드섹션 중간중간 쓰레기 값이 들어가 있어 IDA가 디스 어셈블링을 못하게 하는 안티 디스어셈블리 기법이다. qword형식으로 되어있는 깨져있는 코드를 byte형식으로 바꾸고 적절히 단축키 C를 누르면서 쓰레기 바이트를 넘겨뛰고 코드를 디스 어셈블 해 주면 된다. 쓰레기 바이트는 주로 0xff로 이루어져 있으며 이를 간격으로 하면 비교 구문이 나오게 된다.

중간중간 0xff를 건너 뛰고 이렇게 분석하면 한 글자씩 cmp구문으로 글자수를 비교한다. 비교방식은 위 SRM문제와 같다. 

flag : EZ9dmq4c8g9G7bAV


Pwn - Login to System

유일하게 푼 포너블 문제인데 200점에도 불구하고 정말정말 쉬운 문제였다. 쓰레드를 실행 시키는데 그 쓰레드를 보면 

username과 serial을 입력 받는데 2048바이트를 입력받아 haystack이라는 버퍼에 오버플로우를 일으킬 수 있고 v23이 1이라면 이미 로그인 되어 있는 것으로 인식해 플래그를 주므로 간단히 오버플로우 시켜 v23변수를 1로 만들어 주면 된다. haystack은 rbp-430h, v23은 rbp-20h이므로 오프셋을 계산하여 username이나 password를 넣어주면 된다. 

파이썬 코드이다. 실행하면 플래그를 준다.

flag : cgjxkkbmdhudbovtezyv


Forensic - Dumped

간단하게 R-Studio 돌렸다. 추출해 주는 파일 중 첫 번째 파일을 열면 플래그가 들어있다.

flag : 4d7328869acb371ede596d73ce0a9af8

'Write Up' 카테고리의 다른 글

2016 CodeGate bugbug exploit  (1) 2016.04.01
2016 CodeGate fl0ppy exploit  (1) 2016.04.01
HackIM 2016 Reversing - PrisonBreak  (1) 2016.02.01
HackIM 2016 Reversing - donfos  (0) 2016.02.01
HackIM 2016 Reversing - Pesudorandom  (0) 2016.02.01