반응형

아래와 같은 소스가 있다.

<?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
블로그 이미지

KuroNeko_

KuroNeko

,