pwnable.kr collision
4129 ワード
タイトル:
タイトルリンク:http://pwnable.kr/play.php -->接続ログインソースコードは以下の通りです.
に従って
入力される長さは20です.
要check_password[argv[1]==hashcode,すなわちcheck_password[argv[1]==0 x 21 DD 09 EC,check_passwordの役割は,入力したデータを整数変換し,求め,返すことである.入力されたデータが12345678の場合、整数変換時のメモリは次のようになります.
20バイトに対して、入力した整数変換後の5つの整数和==0 x 21 DD 09 ECを構築するには、最初のアイデアは、最初の16バイトにx 00を割り当て、最後の4バイトは0 xEC 09 DD 21であるが、x 09はHTabであり、入力が遮断される.2つ目のアイデア:最初の16バイトはx 01を割り当て、最後の4バイトはxE 8x 05xD 9x 1 Dで、うん、そうします.
flag:daddy! I just managed to create a hash collision :)
タイトルリンク:http://pwnable.kr/play.php -->接続ログインソースコードは以下の通りです.
#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]
", argv[0]);
return 0;
}
if(strlen(argv[1]) != 20){
printf("passcode length should be 20 bytes
");
return 0;
}
if(hashcode == check_password( argv[1] )){
system("/bin/cat flag");
return 0;
}
else
printf("wrong passcode.
");
return 0;
}
に従って
if(strlen(argv[1]) != 20){
printf("passcode length should be 20 bytes
");
return 0;
}
入力される長さは20です.
if(hashcode == check_password( argv[1] )){
system("/bin/cat flag");
return 0;
}
要check_password[argv[1]==hashcode,すなわちcheck_password[argv[1]==0 x 21 DD 09 EC,check_passwordの役割は,入力したデータを整数変換し,求め,返すことである.入力されたデータが12345678の場合、整数変換時のメモリは次のようになります.
20バイトに対して、入力した整数変換後の5つの整数和==0 x 21 DD 09 ECを構築するには、最初のアイデアは、最初の16バイトにx 00を割り当て、最後の4バイトは0 xEC 09 DD 21であるが、x 09はHTabであり、入力が遮断される.2つ目のアイデア:最初の16バイトはx 01を割り当て、最後の4バイトはxE 8x 05xD 9x 1 Dで、うん、そうします.
./col `python -c "print '\x01' * 16 + '\xE8\x05\xD9\x1D'"`
flag:daddy! I just managed to create a hash collision :)