본문 바로가기
Pwnable/Pwnable CTF

[Pwnable.kr] Toddler's Bottle_collision

by Y06 2021. 3. 23.

SeedUbuntu를 이용하여 문제를 풀 거다. 처음 문제에 들어갔을 때 보이는 모습이다. 

비밀번호를 치고 해당 문제로 들어갔다.

ls -a 명령을 이용해서 파일의 목록을 확인하였다. col에 setuid가 걸려있다.

 

먼저, cat 명령어를 이용하여 col.c 파일을 확인하였다.

전역변수로 선언된 hashcode라는 함수에 0x21DD09EC가 들어있다.

check_password 함수에서는 인자로 p를 입력받는다.

그 후에 인자로 받은 p배열의 int 값(4bytes)을 인덱스를 이동하면서 5씩 더해준다.

그 값을 res에 저장한 후, 리턴한다.

main 함수에서 인자로 받은 20bytes 값을 check_password에 전달한 후, check_password의 리턴값과 hashcode의 값이 같을 때 flag를 볼 수 있다.

 

즉, check_password에 전달할 때 4bytes씩 5번 더하는 것이다.

0x21DD09EC 값을 다섯개로 나누어서 넣어준다.

0x21DD09EC = 5681341224 = 113626824 * 4 + 113626828 = 0x06C5CEC8 * 0x4 + 0x06C5CECC

 

값을 넣을 때는 리틀엔디안 방식으로 넣어야 한다.

 

값: ./col `python -c 'print "\x01"*16+"\xe8\x05\xd9\x1d"'`

 

이렇게 넣어주면 check_password에서 리턴하는 값은 0x21DD09EC이 된다.

 

 

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

'Pwnable > Pwnable CTF' 카테고리의 다른 글

[Pwnable.kr] Toddler's Bottle_random  (0) 2021.04.06
[Pwnable.kr] Toddler's Bottle_passcode  (0) 2021.03.31
[Pwanable.kr] Toddler's Bottle_flag  (0) 2021.03.31
[Pwnable.kr] Toddler's Bottle_bof  (0) 2021.03.23
[Pwnable.kr] Toddler's Bottle_fd  (0) 2021.03.17