아래와 같은 소스가 있다.
<?php
if (isset($_GET['view-source'])) {
show_source(__FILE__);
exit();
}
if(isset($_POST['ps'])){
sleep(1);
mysql_connect("localhost","md5_password","md5_password_pz");
mysql_select_db("md5_password");
mysql_query("set names utf8");
/*
create table admin_password(
password char(64) unique
);
*/
include "../lib.php"; // include for auth_code function.
$key=auth_code("md5 password");
$ps = mysql_real_escape_string($_POST['ps']);
$row=@mysql_fetch_array(mysql_query("select * from admin_password where password='".md5($ps,true)."'"));
if(isset($row[0])){
echo "hello admin!"."<br />";
echo "Password : ".$key;
}else{
echo "wrong..";
}
}
?>
지금 보면 md5함수에 true 인자값이 보일 것이다.
이 인자는 원래 md5함수가 32byte 해쉬를 가지는데 true를 해주면 16byte로 변경해준다.
만약 해쉬가 ~~'=' 을가지면 유니코드를 인식을 하는 mysql은 auto typecasting에 의해서 0으로 변환되고
0='' 이기때문에 로그인에 성공한다.
'Write up > Wargame' 카테고리의 다른 글
[Wargame.kr] strcmp (550p) (0) | 2016.04.29 |
---|---|
[Wargame.kr] Easy_CrackMe (500p) (0) | 2016.04.29 |
[Wargame.kr] md5 compare (500p) (0) | 2016.04.29 |
[Wargame.kr] fly me to the moon (500p) (0) | 2016.04.29 |
[Wargame.kr] DB is really good (500p) (0) | 2016.04.27 |