본문 바로가기

Security study/Pwnable

[pwnable.kr] collision 문제 풀이

ssh col@pwnable.kr -p2222 (pw:guest) 로 우분투에서 접속했다.

접속

그 후 ls -li로 어떤 파일들이 있는지 확인했다.

ls -li 결과

3개가 있는데 flag는 col 계정으로는 못 읽는다. 짐작해보면 특수 권한이 있는 col 파일로 flag를 읽어야 할 것 같다.

일단 col.c가 col의 소스코드로 보이니 cat으로 읽어보자.

col.c 내용

일단 hashcode가 0x21DD09EC 이다. check_password(const char* p) 함수에서는 반복문으로 int형 4byte씩 더해주어 res변수에 저장하고 있는 걸 알 수 있다. 

main에서는 조건문들을 봤을 때 매개변수의 길이가 20이 아닌 걸 입력하면 "passcode length should be 20 bytes"를 출력할 것 같고, hashcode 와 check_password(argv[1]) 즉, 매개변수가 같다면 flag 파일을 읽어준다는 것을 알 수 있다. 만약 매개변수의 길이가 20글자긴 한데 hashcode와 다를 시에는 "wrong passcode."가 출력된다.

 

우리는 길이가 20byte 인 값을 매개변수로 넣어주기 위해 파이썬을 쓰면 된다. hashcode 와 같은 값을 만들기 위해 다양한 계산법을 쓸 수 있는데 2가지만 보겠다. 1번째 방법

hashcode / 5 한 결과

6C5CEC8이 나온다. 근데 21DD09EC에서 6C5CEC8*5한 값을 빼면 4가 모자라므로 마지막에 6C5CEC8 + 4 한 값인

6C5CECC를 넣어주면 21DD09EC가 된다.

2번째 방법

1010101 *4 +1dd905E8을 해주면 21DD09EC가 나온다.

flag 출력된 모습

플래그 : daddy! I just managed to create a hash collision :)

'Security study > Pwnable' 카테고리의 다른 글

gdb 활용 코드 분석  (0) 2021.05.12
GDB 사용방법  (0) 2021.05.12
setuid 개념 정리  (0) 2021.05.05
[2주차 과제] swing_pwn_chall 풀이  (0) 2021.04.28
pwntools 사용법 및 기능  (0) 2021.04.28