Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

White Security

Collision 문제풀이 본문

Wargame Writeups/pwnable.kr

Collision 문제풀이

POSIX 2019. 2. 4. 21:13


Daddy told me about cool MD5 hash collision today.
I wanna do something like that too!

ssh col@pwnable.kr -p2222 (pw:guest)


Toddler's Bottle 2번 문제입니다.

이전 문제와 마찬가지로 ssh 계정이 주어졌네요.


#include <stdio.h>
#include <string.h>
unsigned long hashcode = 0x21DD09EC;
unsigned long check_password(const char* p){
        int* ip = (int*)p;
        int i;
        int res=0;
        for(i=0; i<5; i++){
                res += ip[i];
        }
        return res;
}

int main(int argc, char* argv[]){
        if(argc<2){
                printf("usage : %s [passcode]\n", argv[0]);
                return 0;
        }
        if(strlen(argv[1]) != 20){
                printf("passcode length should be 20 bytes\n");
                return 0;
        }

        if(hashcode == check_password( argv[1] )){
                system("/bin/cat flag");
                return 0;
        }
        else
                printf("wrong passcode.\n");
        return 0;
}


접속하면 소스코드가 주어지는데요.


프로그램 실행 인자를

int 포인터로 캐스팅하여

20 바이트, 즉 int 변수 5개를 더하여

0x21DD09EC가 되면 플래그를 출력하도록 되어 있습니다.



먼저 입력이 20바이트로 제한되어 있기에

20바이트의 공간을 마련했습니다.




NUL은 입력으로 사용할 수 없기에

int 하나를 제외하고는

모두 0x01010101 로 채워 넣었습니다.


>>> hex ( 0x21DD09EC - ( 0x01010101 * 4 ) )
'0x1dd905e8'


목표값인 0x21DD09EC에서

0x01010101 * 4 을 빼면

0x1DD905E8 이 됩니다.



인텔 cpu에서는 변수를

리틀 엔디안으로 저장해야 합니다.


따라서 역순인 E8 05 D9 1D 로

첫번째 변수를 작성하면 되겠군요.


col@ubuntu:~$ ./col $'\xE8\x05\xD9\x1D\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01'
daddy! I just managed to create a hash collision :)

작성한 것을 바이트 형식 인자로 전달해주면
플래그를 얻을 수 있었습니다.


 echo -en '\xE8\x05\xD9\x1D\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' | xargs ./col


echo와 xargs를 이용해서 인자를 전달하는 방법도 있습니다.

'Wargame Writeups > pwnable.kr' 카테고리의 다른 글

Random 문제풀이  (0) 2019.02.06
Passcode 문제풀이  (0) 2019.02.06
Flag 문제풀이  (0) 2019.02.05
Bof 문제풀이  (0) 2019.02.05
Fd 문제풀이  (0) 2019.01.31
Comments