DreamHack CTF 4주차

챠챠비둘기·2023년 5월 3일
0

전체세션

목록 보기
3/6

Reversing - Patch

먼저, ctf 문제를 다운받아보자.


.exe로 시작해서 실행파일인 줄 알았는데, 실행시켜보니까 웬 사진파일이 나온다. 신기하다. 아마 DH 다음에 가려진 부분에 플래그가 있을 것으로 추정된다.
파일을 분석해 보기 위해 ida64를 켜서 파일을 까보자.

이 파일은 WinApi를 이용해서 만들어진 gui 프로그램이기 때문에, 분석할 때 먼저 WinMain함수부터 찾아보는게 좋을 것 같다.
WinMain 함수를 찾아보기 위해 함수 상호 참조를 이용해 보도록 하겠다. CreateWindowExW 함수를 Import 창(프로그램이 DLL로부터 import해 사용하는 함수의 목록이 나와 있음)에서 찾아보자.


단축키 x를 통해 CreateWindowExW가 사용되는 함수의 목록을 살펴보자.


이 주소가 아무래도 WinMain 함수의 주소인 것으로 추정된다.
디버깅을 해 보자.

부분 디컴파일을 할려고 했는데, IDA 이놈이 제대로 된 코드값을 안줘서 전체 데이터를 디컴파일 하였다. 해당 부분 함수를 찾는데 꽤 힘들었다..😅
코드를 간단하게 분석해 보면, beginpaint와 endpaint 사이에 플래그 값이 숨겨져 있거나, 플래그 값을 알아내는 알고리즘이 존재하는 걸로 추정된다.
이 사이의 코드를 찾아보니 실행하는 함수가 하나 보인다.

140002C40 주소로 한번 가보자.


sub_140002B80를 반복적으로 호출하는게 보인다. 대충 무언가를 반복적으로 그리는 게 아닐까 추정된다. 140002B80으로 가 보자.

코드를 분석해 보니, GdipCreatePen1 함수를 사용하여 그림을 그릴 펜을 만들고, GdipDrawLineI 함수를 이용하여 선을 그린다는 것을 알 수 있다.
140002B80 주소에 브레이크 포인트를 걸고, 실행시켜 볼려고 했으나 IDA가 또 말을 안들어서 여기서부턴 Win64를 사용해 보도록 하겠다.

으으으으으으음........
조금 더 앞에서 bp를 걸어보자.


;;;;;

잠시 인터넷에서 검색해 보니, 원본 사진 파일에 펜을 이용해서 그린 것으로 추정된다. 위의 GdipDrawLineI 함수를 아예 지워보자.

nop로 걍 채워보자.


(언제 다 nop로 채우지.....ㅜ)
너무 힘들어서 인터넷에서 찾아봤다. 일일이 nop처리하는 것보단 실행되자마자 ret하도록 바꾸는 게 더 편하다고 한다...

휴....;;
그래픽이랑 리버스를 섞어놓은 문제는 처음 본다. 진심 어렵다..........

web - cookie

오랜만에 웹해킹 문제를 풀어보도록 하겠다.

문제 파일을 다운로드하고, 사이트에 들어가 보도록 하자.

뭔가 특별한 점은 없어 보인다. 아까 다운 받은 문제 파일을 까보자.

코드를 분석해 보니, admin 계정에서 flag 값을 얻을 수 있는 것으로 보인다.
일단 guest로 로그인해보자. 패스워드는 guest다.(위에 코드에 나와 있음😊)

admin으로 로그인을 성공해야 플래그를 획득할 수 있다.......패스워드를 알아내는 게 문제인듯
cookie를 활용해서 푸는 문제인 듯 하다....

🤔🤔🤔

쿠키
사용자가 방문한 웹사이트에서 사용자의 브라우저에 전송하는 작은 텍스트 조각입니다. 쿠키가 있으면 웹사이트에서 사용자의 방문에 관한 정보를 기억하여 다음번에 사이트에 방문했을 때 번거로운 작업을 피하고 더 유용하게 사이트를 활용할 수 있습니다.

쿠키를 열어보자.

내가 접속한 기록밖에 없다...🤔
쿠키를 건드려서 푸는 문제일텐데.....일단 쿠키 기록에는 그 어떠한 것도 남아있지 않고....
쿠키를 직접 구워보는 수밖에

위의 guest대신 admin으로 값을 고치고 refresh를 해준 다음,

다시 본래 메인화면으로 돌아와서 새로고침을 눌러보니

플래그 발견

쿠키에 대한 이해도가 어느 정도 있으면 약간의 힌트만으로도 풀 수 있는 쉬운 문제였다.

Forensic - Do you know password of suninatas?

ctf-d 사이트가 터진 관계로 써니나타스 사이트에서 포렌식 ctf 문제를 풀게 되었다.
이 문제는 suninatas의 패스워드를 찾는 문제로 추정된다. 아마 패스워드가 플래그겠지?

......?
일단 파일을 다운받아보자.
확장자가 .tar 이다.

여러개의 파일을 하나로 묶거나 풀 때 사용하는 명령어
Tape ARchiver의 앞글자를 따서 tar라고 한다.
보통 리눅스나 ssh 환경에서 사용되며, 실제로는 "압축"하지는 않고 하나의 파일을 묶는 용도일 뿐이다.


다운받은 압축파일을 해제하니, 위와 같은 2개의 파일이 있다는 걸 확인했다. 일단 파일 구조 문제일 것이라 추측해 보고, hxd를 켜서 분석해보자.


passwd와 shadow 두 파일 모두 마치 리눅스에서 연 것 마냥 무언가(?)가 나오는 걸 볼 수 있다.
여기서 shadow 파일은 문자열 부분에 suninatas가 있는 것으로 보아, suninatas의 암호화된 비밀번호가 들어있는 파일로 추측할 수 있을 것 같다.

이 값이 아무래도 암호화된 비밀번호 값이겠지?

이럴때 유용한 툴이 있다.
john the ripper를 사용해 보자.

먼저, 암호화된 비밀번호 값이 들어있는 txt파일을 만들고, john179j5 폴더의 run 폴더에 넣는다. 그리고 바로 그 위치에서 cmd를 실행시켜보자.


john 명령어로 실행시켜보자

?????
무슨 일인가 했더니 텍스트 파일에 집어넣은 값들이 이상해서 그렇단다.....

앞에 suninatas를 빼먹었다... 다시 저장하고 돌려보자

그래도 실패함ㅋ
왜 실패하는지는 조금 더 고민해봐야겠다. 일단 존더리퍼로 푸는 것은 맞을텐데, 별 짓을 다해도 안나온다....이건 존더리퍼 버전의 문제일 수도 있어서 조만간 새로 존더리퍼를 설치한 다음에 다시 풀어보도록 하겠다.

재시도

다시 파일을 설치해서 시도해봤다.

suninatas:x:1001:1001::/home/suninatas:/bin/sh

shadow로 가 보자.


:는 필드를 구분해 주는 특수문자이다.

암호화된 비밀번호를 복사해서 텍스트 파일에 붙이고, 이렇게 해서 만든 텍스트 파일을 위에서 새로 설치한 john the ripper의 run폴더에 넣어준다.

그리고 여기서 cmd를 설정해서 아래 명령어를 입력해 주자.

john pass.txt(텍스트 파일 명 적어주면 되용)

실행시키면


플래그 찾았다ㅋ

아무래도 johntheripper 호환 문제로 복호화가 안된 것으로 추측된다.

비밀번호가 암호화 되어있을 때, 암호화된 비밀번호를 복호화하기 위해 john the ripper를 먼저 고려해 보는 걸 추천한다. 특히 이런 해쉬함수를 이용한 암호화 방식은 더욱 잘 먹힌다고 한다.....

profile
개발 + 보안

0개의 댓글