꿈이 너무 많은 한 대학생의 공간

Pwnable.kr - collision 문제풀이 본문

정보보안 공부/Pwnable.kr

Pwnable.kr - collision 문제풀이

청울울청 2020. 6. 6. 23:14

오늘은 다시 pwnable 문제풀이 포스팅입니다.

어제 치과를 갔다왔는데 5개나 썩았다네요... 평소에 단것을 안좋아하긴 한데 점심은 공부때문에 깜빡하고 저녁은 학원때문에 깜빡하다 보니 하루에 1~2번밖에 양치를 못하다 보니 5개나 썩었나 보네요... 심지어 하나는 신경치료까지 필요해서 거의 80만원 가까이 내게 생겼습니다... 치과검진 1년에 한번씩은 하시고 양치 꼭 하세요 큰일납니다 ㅠㅠ

 

이제 본론으로 들어가도록 하죠.

오늘은 아빠가 MD5 해쉬 충돌에 대해서 알려주셨어. 이거와 비슷한 무언가를 해보고 싶어!

ssh col@pwnable.kr -p2222 명령어를 사용해 워게임 환경으로 접속해 봅시다.

환경에는 col / col.c / flag 가 존재하네요.

flag은 언제나 열리지 않을테니 col.c를 분석해볼게요.

대충 실행 인자값을 4바이트 단위(argv[1]을 int* 단위로 받으므로)로 나눈 후 한 바이트당 5번 반복해 res에 더하고 res를 반환, hashcode와 일치하는지 확인한 뒤 일치한다면 flag를 읽어오는 소스코드입니다.

여기서 해쉬코드는 0x21DD09EC 이므로 이를 5로 나눠봅시다. (5번 분할해 더하므로)

소수점이 있는걸로 보아 나누어떨어지지는 않네요. 소수점 부분을 지우고 5번 곱해보겠습니다.

0x21DD09E8 이 나왔네요. 본래 값인 0x21DD09EC - 0x21DD09E8 = 4 이므로 맨 마지막 값에는 4를 더해 입력해야겠네요.

그러면 입력해야하는값은 0x06C5CEC8 이 4번 반복되고 마지막은 0x06C5CECC 가 되는 문자열을 대입해야겠네요.

다만 여기서 리틀이디언 방식을 사용하니 반대로 된 0xC8CEC506 4번 0xCCCEC506 이 되는 값이 대입되어야 합니다.

하지만 이를 4번 모두 하나하나 쓸 수 없어서 방법을 찾아보니 python 관련 명령어를 터미널에서 사용해 사용할 수 있답니다.

위와 같이 python -c 를 사용하고 ' ' 내에 명령어를 입력한다면 그 명령어에 맞는 값을 반환합니다.

즉, 아래와 같이 리턴한다면 리틀이디언 형식으로 바꾼 대입값이 실행인자로 넘겨져 hashcode 와 실행인자값이 같아집니다.

더보기

flag : daddy! I just managed to create a hash collision :)

'정보보안 공부 > Pwnable.kr' 카테고리의 다른 글

Pwnable.kr - bof 문제풀이  (0) 2020.06.09
Pwnable.kr - fd 문제풀이  (0) 2020.06.02
Comments