[dreamhack] simple-phparse

IMKYU·2024년 11월 24일

문제

웹페이지

문제파일

<!-- index.php -->
<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>

설명

  • flag.php에 접속하면 flag가 나올 것이라고 추측할 수 있다.
  • 하지만 필터링 되고 있기 때문에 우회해야한다.
  • $url은 url의 path 이후에 데이터이다. ex) http://localhost:8080/”flag.php?content=hello”
  • parse_url함수는 문자열을 url로 해석하고 그 에 맞게 배열을 생성해준다. 또한 url이 유효한지 검사를 하지 않는다.
    • parse_url은 //로 시작하면 host로 인식하기 때문에 //flag.php로 path를 지정하면 path검증을 우회 할 수 있다.
  • http://host//flag.php 을 입력한다.
  • 여기서 //flag.php를 입력해도 정상적으로 작동하는게 궁금해서 찾아봤는데 기본적을 아무 설정을 안건들이면 중복슬래시는 자동으로 하나로 변환된다고 한다.

결과

profile
아무것도 안 한 거랑 다를께 없잖아??

0개의 댓글