[wargame.kr]php type confusion 문제
PHP 형 변환
- 문제
 - 서로 비교할 때 비교 각 대상의 타입이 일치하지 않아 발생하는 취약점이다.
 - php 의 
==을 이용하여 비교를 진행할 때 발생한다. - json 로 입력을 받을 때 발생할 수 있다.
 
문제 분석
- json 형태로 입력을 받아 디코드 한다.
 
$json = json_decode($_POST['json']);
- 
    
json 형태로 넘겨줄 때 공격자는 타입을 정수형 또는 boolean 형 또는 string 형으로 넘겨줄 수 있다.
 - 
    
현재 여기서
==을 이용하여 두 개의 값이 같은지만을 확인한다. 
if ($json->key == $key)
- 즉 자동으로 형 
$key값이 앞의 비교하는 형식으로 변환이 되는 취약점을 가지고 있다. 
테스트
<?php
$a = true;
if ($a == "dsf"){
        echo "true";
}else {
        echo "false";
}
?>
- true를 출력하는 것을 확인할 수 있다.

 
<?php
$a = true;
if ($a == ""){
        echo "true";
}else {
        echo "false";
}
?>
- 
    
false 를 출력하는 것을 확인할 수 있다.

 - 
    
즉
""아무것도 없을 때는 false 로 타입 변환이 일어나고"asdf"임의의 글자가 있을 때는 true 로 타입 변환이 되는 것을 확인할 수 있다. 
공격 페이로드
json={"key":true}
if($json->key == "xyz") 비교 하면
"xyz" => true 로 형 변환이 일어난다.
대응 방안
- php 에서 두개의 값을 비교할 때 
==을 이용하여 값 만 비교하는 것이 아닌===을 사용하여 값과 타입을 모두 비교하도록 해주면 된다. 
댓글남기기