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 |