문제 설명은 간단하다.
문제확인해 보자
문제화면이다 host, path를 보면 경로에 대한 문제인 거 같다.
코드를 확인해 보자.
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>PHParse</title>
</head>
<body>
<!-- php code -->
<?php
$url = $_SERVER['REQUEST_URI'];
$host = parse_url($url,PHP_URL_HOST);
$path = parse_url($url,PHP_URL_PATH);
$query = parse_url($url,PHP_URL_QUERY);
echo "<div><h1> host: $host <br> path: $path <br> query: $query<br></h1></div>";
if(preg_match("/flag.php/i", $path)){
echo "<div><h1>NO....</h1></div>";
}
else echo "<div><h1>Cannot access flag.php: $path </h1></div> ";
?>
<style type="text/css">
body {
margin: 1em;
}
div {
margin: 0 5px 0 0;
padding: 0.1em;
border: 2px solid silver;
border-radius: 7px;
}
</style>
</body>
</html>
중요한 부분만 보도록 하자
<?php
$url = $_SERVER['REQUEST_URI'];
$host = parse_url($url,PHP_URL_HOST);
$path = parse_url($url,PHP_URL_PATH);
$query = parse_url($url,PHP_URL_QUERY);
echo "<div><h1> host: $host <br> path: $path <br> query: $query<br></h1></div>";
if(preg_match("/flag.php/i", $path)){
echo "<div><h1>NO....</h1></div>";
}
else echo "<div><h1>Cannot access flag.php: $path </h1></div> ";
?>
URL을 가져와 parse_url 함수를 통해 URL(host, path, query) 부분을 가져온다.
preg_match() 함수를 이용해서 URL의 경로에 'flag.php'가 포함되어 있는지 검사하는 거 같다.
요약하면 답은 flag.php 에 있는데 그걸 막아놓은 거 같다.
풀 수 있는 방법은 flag.php를 URL 인코딩을 하여 변환하는 사람이 많았는데...
나는 path를 host 부분으로 인식하게 해서 문제를 풀었다.
/test를 입력하면 path로 /test이 입력되지만
//test를 입력하면
host 부분으로 인식하면 경로가 이동되었다고 볼 수 있다.
이걸 이용해서 풀어보면
플래그가 출력된다.
'DreamHack' 카테고리의 다른 글
DreamHack - command-injection-1 (0) | 2024.05.31 |
---|---|
DreamHack - simple-ssti (0) | 2024.05.17 |
DreamHack - image-storage (0) | 2024.05.17 |
DreamHack - baby-sqlite (0) | 2024.04.30 |
Dreamhack - Csrf2 (수정) (0) | 2024.04.05 |