반응형
전체 소스코드는 아래와 같다.
<?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__);
}
$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 :
반응형
'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 |