pwnable.kr第二题collision

 1 col@prowl:~$ ls -al
 2 total 36
 3 drwxr-x---   5 root    col     4096 Oct 23  2016 .
 4 drwxr-xr-x 114 root    root    4096 May 19 15:59 ..
 5 d---------   2 root    root    4096 Jun 12  2014 .bash_history
 6 -r-sr-x---   1 col_pwn col     7341 Jun 11  2014 col
 7 -rw-r--r--   1 root    root     555 Jun 12  2014 col.c
 8 -r--r-----   1 col_pwn col_pwn   52 Jun 11  2014 flag
 9 dr-xr-xr-x   2 root    root    4096 Aug 20  2014 .irssi
10 drwxr-xr-x   2 root    root    4096 Oct 23  2016 .pwntools-cache
11 col@prowl:~$ cat col.c
12 #include <stdio.h>
13 #include <string.h>
14 unsigned long hashcode = 0x21DD09EC;
15 unsigned long check_password(const char* p){
16         int* ip = (int*)p;
17         int i;
18         int res=0;
19         for(i=0; i<5; i++){
20                 res += ip[i];
21         }
22         return res;
23 }
24 
25 int main(int argc, char* argv[]){
26         if(argc<2){
27                 printf("usage : %s [passcode]\n", argv[0]);
28                 return 0;
29         }
30         if(strlen(argv[1]) != 20){
31                 printf("passcode length should be 20 bytes\n");
32                 return 0;
33         }
34 
35         if(hashcode == check_password( argv[1] )){
36                 system("/bin/cat flag");
37                 return 0;
38         }
39         else
40                 printf("wrong passcode.\n");
41         return 0;
42 }

参数构造20位,check_password函数内用int读char,即分成5个数

字符串以‘\x00'结尾,所以用'\x01'来填充,

0x21DD09EC-0x01010101*4=0x1DD905E8

col@prowl:~$ ./col $(python -c "print '\x01' * 16 + '\xE8\x05\xD9\x1D'")
daddy! I just managed to create a hash collision :)

 

posted @ 2019-07-23 17:45  DirWangK  阅读(280)  评论(0编辑  收藏  举报