Top

[pwnable.kr]_Collision 문제풀이

모의해킹/[CTF] pwnable.kr

2022. 2. 27.

 

 

와 ㄷㄷ

 

예상했지만

난이도가 완전

lunatic(루나틱) 합니다 ōxō;;

lunatic(루나틱) 합니다 ōxō;;

ε-(´・`)

시스템 해킹이라서 그런지

본인 체감상 기존의 웹 해킹

의 Wargame.kr 난이도를

훌쩍 뛰어넘습니다.

다른 사람이 풀어 둔 거

참고하면서 풀었습니다

 

그리고 소스코드는

직접 올리면 게시글이

깔끔하지 못해서

 

복사 붙어놓기 할 수 있도록

아예 텍스트 파일로

올려놓도록 하겠습니다.

 

아무튼

바로 작성하지요

지문부터 대충 마이웨이로

직역하면 다음과 같습니다.

"아따 MD5 해시 충돌 말한당께?"(…)

자 아무튼

리눅스 터미널을 열고

 

ssh col@pwnable.kr -p2222

 

로 접속해줍니다. 비밀번호는

안 보일 텐데 그양 무시하고

작성 후 엔터 치면 접속됩니다:)

ls 명령어를 입력해서

파일 목록을 확인해

봅니다.

col은 아마 exe 나 파이썬

파일로 추측되는 거 같고

우리가 집중해야 하는 파일은

col.c 파일입니다.

 

1. 파일 확인

cat col.c 입력하면 아래

다음과 같은 소스코드가

보입니다.

메인부터 훑어보면 암호는 20여자어야

해시 코드(0x21DD09EC)와 패스워드 리턴 값

이 모두 동일해야 한답니다.

check_password(const char* p)에서

각  int의 크기인 4바이트 앞부터

데이터를 잘라서 5번 res에 누적

시킵니다. 같은 값을 5번 더해

해시 코드를 나오게 하면 될지 싶습니다.

 

2. 결과 도출

<그림.1> int형 4바이트씩 끊어서 표현한 for 과 res 데이터

 

res 값은 for문의 값을 5번 누적한 결과.

res 값을 5로 나누어봤을때 for에서 쓰인

데이터는 한번당 0x6C5CEC8입니다.

이것을 다시 5로 곱해지면 0x4가 부족.

데이터는 0x6C5CEC8 4개와

0x6C5CECC의 데이터를

더하는 것으로 가정을 하고

프로그램에 입력값으로 넣어주면 됩니다.

 

<그림. 2> little endian으로 표현한 데이터

 

그렇다면 little endian을 따르고 있어

다음과 같은 순차적으로 프로그램에

16진수로 데이터를 전달해주면 됩니다.

 

파이썬을 이용해서 16진수로 값을 전달했습니다.

프로그램에서 입력한 값으로 받으면

char로 인식하기에 주의가 요합니다.

 

3. Flag

이렇게 키값을 얻었읍니다.

그리고 이 얻어챙긴 키값을 가지고

다시 처음 위치로 돌아와

밑에 Flag?: 부분에 키캆을 넣어주시고

auth 버튼을 누르면

 

3포인트 받아챙겼다네요

그리고 돌아와보면 이렇게

풀었다는 뜻으로 녹색 점선으로

표시가 되었습니다.

긴 글을 보시느라 감사합니다.
수고하셨습니다:)

좋은 하루 되시고 하시는 일 잘 되시고
날이 덥습니다 더위 먹지 않게 유의하시고
코로나 조심하세요

'모의해킹 > [CTF] pwnable.kr' 카테고리의 다른 글

[pwnable.kr]_Random문제풀이  (0) 2022.02.27
[pwnable.kr]_Ieg문제풀이  (0) 2022.02.27
[pwnable.kr]_Input문제풀이  (0) 2022.02.27
[pwnable.kr]_passcode문제풀이  (0) 2022.02.27
[pwnable.kr]_Memcpy문제풀이  (0) 2022.02.27