[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가 잘 출력되는 것을 확인할 수 있다.
댓글남기기