반응형

전체 소스코드는 아래와 같다.


<?php
$hashed_key 
'79abe9e217c2532193f910434453b2b9521a94c25ddc2e34f55947dea77d70ff';
$parsed parse_url($_SERVER['REQUEST_URI']);
if(isset(
$parsed["query"])){
    
$query $parsed["query"];
    
$parsed_query parse_str($query);
    if(
$parsed_query!=NULL){
        
$action $parsed_query['action'];
    }

    if(
$action==="auth"){
        
$key $_GET["key"];
        
$hashed_input hash('sha256'$key);
        
//echo $hashed_input.'\n';
        
if($hashed_input!==$hashed_key){
            die(
"GTFO!");
        }

        echo 
file_get_contents("/flag");
    }
}else{
    
show_source(__FILE__);
}

?>


1. parse_url 함수를 통해 REQUEST_URI의 query 부분을 뽑아낸다.

2. query 중 action이 auth이며 입력한 key값의 sha256 hash값이 $hashed_key 값과 동일하면 flag를 출력시킨다.


해당 문제는 parse_str() 취약점 이용하여 풀 수 있다.

parse_str 함수의 경우 입력받은 값은 변수로 저장하는 역할을 하는 것이라는 것을 이용하는 것이다.


따라서 이미 세팅되어 있는 hashed_key 값을 query에 포함시켜 주면 parse_str 함수에 의해 내가 원하는 값으로 덮어 씌워진다.


즉, key 값으로 임의의 값을 넣은 뒤 hashed_key 값을 임의의 값을 sha256 한 값으로 넣어주면 flag가 출력된다.


payload : 

http://easyphp.ctf.euristica.in/?action=auth&key=1&&hashed_key=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b


참고 ) https://revers3r.tistory.com/96

반응형

'Hacking Contest' 카테고리의 다른 글

[Rooters CTF] baby web  (0) 2019.10.10
[ByteBandits CTF 2019] Online Previewer 1  (0) 2019.04.13
parse_url Hostname Bypass (SwampCTF Brokerboard Writeup)  (0) 2019.04.07
[2019 Encrypt CTF] vault  (0) 2019.04.03
[2019 Encrypt CTF] Sweeeeeet  (0) 2019.04.03
블로그 이미지

rootable

,