webhacking/etc

wargame.kr strcmp

qkqhxla1 2014. 10. 2. 19:43


<?php
    
require("../lib.php"); // for auth_code function

    
$password sha1(md5(rand().file_get_contents("/var/lib/dummy_file")).rand());

    if (isset(
$_GET['view-source'])) {
        
show_source(__FILE__);
        exit();
    }else if(isset(
$_POST['password'])){
        
sleep(1); // do not brute force!
        
if (strcmp($_POST['password'], $password) == 0) {
            echo 
"Congratulations! Flag is <b>" auth_code("strcmp") ."</b>";
            exit();
        } else {
            echo 
"Wrong password..";
        }
    }

?>


코드게이트 2013에서 나왔던 php strcmp취약점.


찾아보니 루비야님이 잘 정리 해놓으셨음... http://blog.naver.com/withrubiya/70173344266


데이터 전송시 배열형태로 전송하면 된다. password[]=a


배열 형태이면 무조건 0이 반환.... 근데 루비야님의 실험을 보면 php 5.2부터는 제대로 1로 


나온다고함..



$password는 sha1로 변환한 엄청나게 복잡한 값이고 내가 입력해서 POST방식으로 받은


password변수와 비교해서 0이 리턴되면 통과.


php 4버전 이하로 strcmp함수에 배열값이 들어왔을때 NULL값이 반환되어 무조건 0이 반환된다.


PHP5부터는 패치되서 안된다고 한다. 

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

wargame.kr type_confusion  (0) 2014.10.30
wargame.kr login_with_crypto_but  (0) 2014.10.29
wargame.kr php? c?  (0) 2014.10.04
wargame.kr wtf_code  (0) 2014.09.28
codeshell.kr admin_pass  (2) 2014.09.24