[Dreamhack] php-1


문제 설명

  • php로 작성된 Back Office 서비스입니다.
  • LFI 취약점을 이용해 플래그를 획득하세요.
  • 플래그는 /var/www/uploads/flag.php에 있습니다.


풀이

문제 페이지에 처음 접속하면 아래와 같이 Home, List, View 네비바가 존재한다.

{B732658A-67A9-4A60-9631-DC78783AFC36}


index.php 소스 코드는 아래와 같고 page 파라미터를 include로 받아와서 값이 없다면 main.php를 보여주고, 아니면 .php를 붙여서 php 파일을 불러와서 보여준다.

<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>PHP Back Office</title>
</head>
<body>
    <!-- Fixed navbar -->
    <nav class="navbar navbar-default navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <a class="navbar-brand" href="/">PHP Back Office</a>
        </div>
        <div id="navbar">
          <ul class="nav navbar-nav">
            <li><a href="/">Home</a></li>
            <li><a href="/?page=list">List</a></li>
            <li><a href="/?page=view">View</a></li>
          </ul>

        </div><!--/.nav-collapse -->
      </div>
    </nav><br/><br/>
    <div class="container">
      <?php
          include $_GET['page']?$_GET['page'].'.php':'main.php';
      ?>
    </div> 
</body>
</html>
<h2>List</h2>
<?php
    $directory = '../uploads/';
    $scanned_directory = array_diff(scandir($directory), array('..', '.', 'index.html'));
    foreach ($scanned_directory as $key => $value) {
        echo "<li><a href='/?page=view&file={$directory}{$value}'>".$value."</a></li><br/>";
    }
?>


List 탭에서 flag.php를 누르면 아래와 같이 권한이 없다고 나온다.

{50F33681-88B1-404C-893B-CE538A2E7FC7}


따라서 page 파라미터 값으로 ../uploads/flag를 입력해보니 can you see $flag? 라는 문자열이 나오면서 이 방법은 아닌 것 같다.

{4CA86E66-E36C-4BF2-895C-D8781A0B869C}


php Wrapper를 이용해 filter로 아래와 같은 페이로드를 입력해보았다.

{75D7E1F5-8A31-4E0C-AEE0-1891C63DF8E3}


burp를 이용해 base64로 디코딩 해보면 flag가 잘 출력되는 것을 확인할 수 있다.

{466C5F1E-F725-46A1-8019-6775A0B0CFCE}

댓글남기기