[Dreamhack] php-1
문제 설명
- php로 작성된 Back Office 서비스입니다.
- LFI 취약점을 이용해 플래그를 획득하세요.
- 플래그는
/var/www/uploads/flag.php에 있습니다.
풀이
문제 페이지에 처음 접속하면 아래와 같이 Home, List, View 네비바가 존재한다.

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를 누르면 아래와 같이 권한이 없다고 나온다.

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

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

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

댓글남기기