0


iwebsec靶场 文件上传漏洞通关笔记5-.htaccess过滤绕过

第05关 .htaccess过滤绕过

1.打开靶场

http://iwebsec.com:81/upload/05.php

构造脚本info.php,内容为<?php phpinfo();?>,如下所示

随手上传脚本,提示不让上传php文件

2.源码分析

如下所示文件过滤方式为检查是否包含大小写不敏感的php关键字

<?php

  require_once('../header.php');
  ?>
<html>
<meta http-equiv="Content-Type" content="text/html;  charset=utf8"/>
    <head>
        <title>.htaccess文件上传</title>
    </head>
    <h2>.htaccess文件上传</h2>
        <div class="alert alert-success">
            <p>请上传PHP文件</p>
        </div>
    <body>
<form  enctype="multipart/form-data" method="post" name="uploadfile">
请上传文件:<input type="file" name="upfile" /><br> 
<input type="submit" name="submit" value="submit" />
</form> 
</html>
<?php 
//print_r($_FILES["upfile"]); 
if(is_uploaded_file($_FILES['upfile']['tmp_name'])){ 
$upfile=$_FILES["upfile"]; 
//获取数组里面的值 
$name=$upfile["name"];//上传文件的文件名 
$type=substr($name, strrpos($name, '.')+1);//上传文件的类型 
$size=$upfile["size"];//上传文件的大小 
$tmp_name=$upfile["tmp_name"];//上传文件的临时存放路径 
//判断是否为图片 
if (preg_match('/php/i', $type)) {
echo "<script>alert('不能上传php文件!')</script>";
die();
}else{
 
$error=$upfile["error"];//上传后系统返回的值 
echo "================<br/>"; 
echo "上传文件名称是:".$name."<br/>"; 
echo "上传文件类型是:".$type."<br/>"; 
echo "上传文件大小是:".$size."<br/>"; 
echo "上传后系统返回的值是:".$error."<br/>"; 
echo "上传文件的临时存放路径是:".$tmp_name."<br/>"; 

echo "开始移动上传文件<br/>"; 
//把上传的临时文件移动到up目录下面 
move_uploaded_file($tmp_name,'up/'.$name); 
$destination="up/".$name; 
echo "================<br/>"; 
echo "上传信息:<br/>"; 
if($error==0){ 
    echo "文件上传成功啦!"; 
    echo "<br>图片预览:<br>"; 
    echo "<img src=".$destination.">"; 
    //echo " alt=\"图片预览:\r文件名:".$destination."\r上传时间:\">"; 
    }
}
}

?>

关键部分的代码如下所示

//判断是否为图片 
if (preg_match('/php/i', $type)) {
echo "<script>alert('不能上传php文件!')</script>";
die();
}

这个时候可以使用绕过的方法就包括.htacess法,.ini法,空格过滤法等,应本关卡的主题.htaccess过滤,于是选择htaccess法绕过

3.htaccess文件介绍

(1)什么是.htaccess文件

htaccess文件全称是超文本入口,提供了针对目录改变配置的方法,即在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。

htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。上传.htaccess文件,来绕过黑名单。

(2)如何配置使.htaccess生效

是否只要上传.hataccess文件就一定产生作用?

不一定,需要配置相应的文件.

(1)配置文件mod_rewrite模块开启

(2)配置文件httpd.conf需要AllowOverride 处于All状态

(3)ts多线程安全版本

特别要注意的是phpstudy版本中默认安装的php为nts版本,不支持.htaccess功能绕过。也就是说需要绑定ts版本的php,否则.htaccess文件也是无法生效的。

4.如何通过.htaccess文件绕过过滤

方法1:

如下配置的原理是jpg后缀名的文件使用php解析,然后再上传一个带有webshell的jpg文件即可。

AddType application/x-httpd-php .jpg //含义:将jpg文件解析为php文件

方法2:

该语句作用是让Apache将其他类型文件均以php格式解析,这样可以上传任意webshell的非php文件格式

SetHandler application/x-httpd-php //含义:将所有的文件都当做PHP执行

方法3:

该语句的作用是将指定info5.jpg按照php格式执行,这样上传info5.jpg后,这个info5.jpg将被当作php文件执行

<FilesMatch "info5.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

5.构造htaccess文件

基于如上分析,使用方法3来进行绕过,创建.htaccess文件,内容如下

<FilesMatch "info5.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

同时将info.php改名为info5.jpg,如下所示,

6.上传脚本

将info5.jpg和.htaccess均上传到服务器中,如下所示.htaccess文件由于不在黑名单中,可以上传成功

接下来将info5.jpg上传

7.获取上传图片url地址

在info5.jpg上传成功的图片预览处,右键鼠标复制图片地址

8.访问上传脚本

phpinfo()http://iwebsec.com:81/upload/up/info5.jpg

如上所示,渗透成功


本文转载自: https://blog.csdn.net/mooyuan/article/details/128062899
版权归原作者 mooyuan天天 所有, 如有侵权,请联系我们删除。

“iwebsec靶场 文件上传漏洞通关笔记5-.htaccess过滤绕过”的评论:

还没有评论