문제에 접속하여 파일 목록을 보면 col과 flag, col.c 파일이 있고, flag 파일은 col 계정으로 읽을 권한이 없으며 col에 setuid가 걸려있기 때문에 col을 통해 flag파일을 읽을 수 있을 것 같다. col의 소스 파일은 다음과 같다.

hashcode 변수에 0x21DD09EC로 설정되어 있다.

check_password 함수를 보면 인자를 정수로 형변환하고 있고, 4번 반복하여 res에 하나씩 더한다. 정수형 변수이기 때문에 4바이트 이다. res = ip[0] + ip[1] + ip[2] + ip[3] + ip[4]로 총 20바이트가 된다.

프로그램을 실행할 때 인자가 없으면 usage로 시작하는 문자열이 출력되면서 종료되고, 인자 크기가 20이 아니면 passcode 가 꼭 20바이트가 되야 한다는 내용의 문자열이 출력되며 프로그램이 종료된다. 

hashcode의 값(0x21DD09EC)과 check_password 함수에 인자를 넣은 값이 같다면 시스템 함수로 flag 파일을 읽는다.

0x21DD09EC를 5로 나누면 0x6C5CEC8가 나오므로  0x6C5CEC8 * 4 + 0x6C5CECC 는 0x21DD09EC가 된다. col을 실행시키면서 저 값을 리틀 엔디언으로 넣으면 다음과 같이 플래그를 얻을 수 있다.

 

'Project H4C Study Group' 카테고리의 다른 글

[Project H4C][pwnable.kr] flag  (0) 2021.04.02
[Project H4C][pwnable.kr] bof  (0) 2021.04.01
[Project H4C][pwnable.kr] fd  (0) 2021.03.30
[Project H4C] FTZ 12  (0) 2021.03.29
[Project H4C] FTZ (8 ~11)  (0) 2021.03.27

+ Recent posts