webhacking/etc

wargame.kr login_with_crypto_but

qkqhxla1 2014. 10. 29. 19:50

function enc($str){
 
$s_key "L0V3LySH:";
 
$s_vector_iv mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_3DESMCRYPT_MODE_ECB), MCRYPT_RAND);
 
$en_str mcrypt_encrypt(MCRYPT_3DES$s_key$strMCRYPT_MODE_ECB$s_vector_iv);
 
$en_base64 base64_encode($en_str);
 
$en_hex bin2hex($en_str);
 return 
$en_hex;
}

function 
sucker_enc($str){
 for(
$i=0;$i<8;$i++) $str enc($str);
 return 
$str;
}

function 
get_password($user,$ssn){
 
db_conn();
 
$user mysql_real_escape_string($user);
 
$ssn  mysql_real_escape_string($ssn);
 
$result mysql_query("select user_ps from accounts where user_id='{$user}' and encrypt_ss='".sucker_enc($ssn)."'");
 
$row mysql_fetch_array($result);
 if (
$row === false) {
  die(
"there is not valid account!");
 }
 return 
$row[0]; 
}

ini_set("display_errors"true);

if( (isset(
$_POST['user']) && isset($_POST['ssn']) && isset($_POST['pass'])) ){
 
 
sleep(2); // do not bruteforce !!!! this challenge is not for bruteforce!!

 
if($_POST['pass'] == get_password($_POST['user'],$_POST['ssn'])){

  if(
$_POST['user'] == "admin"){
   echo 
"Login Success!!! PASSWORD IS : <b>".auth_code("login with crypto! but..")."</b>";
  }else{
   echo 
"Login Success. but you r not 'admin'..";
  }
 }else{
  echo 
"Login Failed";
 }

}


http://blog.naver.com/dmbs335 참조 sucker_enc는 문자열 길이를 엄청나게 늘려줌.


user,ssn,pass가 존재하면 검사를 하는데 $_POST['pass']와 get_password로 user와 ssn을 


넣은 값을 반환받아서 검사. get_password함수는 ssn을 sucker_enc로 암호화하는데 길이가 매우 김.


근데 mysql_query함수에서 길이가 엄청나게 진짜 엄청나게 긴 문자열을 넣으면 죽어버리고 NULL을


반환. 이것은 boolean형의 false로서 ===false와 비교하면 자료형이 틀리기때문에 그냥 넘어간다고 함.


결과적으로 ssn에 존나 문자열을 많이 집어넣으면 되고, 그것으로 there is not valid account!를


통과. 그리고 pass에 아무것도 입력안하면 ==null과 같다고 판단되어 null==null이 되어 통과된단다.


login with crypto.txt




'webhacking > etc' 카테고리의 다른 글

overthewire natas 1~10  (0) 2014.11.24
wargame.kr type_confusion  (0) 2014.10.30
wargame.kr php? c?  (0) 2014.10.04
wargame.kr strcmp  (0) 2014.10.02
wargame.kr wtf_code  (0) 2014.09.28