pwnable.kr의 두번째 문제입니다.
계정의 홈 폴더에는 역시나 첫번째 문제와 같이 세 개의 파일이 존재합니다.
소스코드를 살표보면 char형 포인터를 인자로 받는 함수가 있습니다. 이 함수(check_password)는 char형 포인터를 int형 포인터로 Type Casting 합니다.
그리고 char형은 1byte, int형은 4byte의 크기를 가지므로 for 문에서는 들어온 char형 사이즈를 4byte로 5번씩 나누어 res변수에 더해집니다.
main 함수에선 인자를 1개 받도록 하였고, 인자의 사이즈가 20byte여야 합니다. 그리고 hashcode와 check_password된 argv[1]의 값이 같게 되면 collision2의 권한으로 /bin/cat 명령을 수행할 수 있습니다.
0x21DD09EC / 5 = 0x6C5CEC8
0x21DD09EC % 5 = 4
0x21DD09EC = 0x6C5CEC8*4 + 0x6C5CECC
이므로 인자로 6C5CEC8을 4번, (6C5CEC8+4)를 1번 입력해주면 hashcode와 같게 됩니다.
Intel CPU의 바이트 오더링은 Little Endian 방식이므로 2바이트씩 뒤집어서 입력해줘야 합니다.
ex) 0x6C5CEC8 - > \xC8\xCE\xC5\x06
이제 인자로 이 값을 넣어주겠습니다. 저는 스크립트 언어인 python을 이용하였습니다.
collision2 쉘을 획득하여서 /bin/cat 명령을 성공적으로 수행했습니다.
'Wargame > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] mistake 1p (0) | 2016.08.19 |
---|---|
[pwnable.kr] uaf 8p (0) | 2016.08.15 |
[pnwable.kr] random 1pt (0) | 2016.07.29 |
[pwnable.kr] passcode 10p (0) | 2016.07.29 |
[pwanble.kr 1번] fd 1pt (0) | 2016.07.27 |