技术干货 | Apache的.htaccess利用技巧
Posted 安世加
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了技术干货 | Apache的.htaccess利用技巧相关的知识,希望对你有一定的参考价值。
加入安世加 交流群 和大佬们一起交流安全技术
0x1简介
0x1.1基本概念
.htaccess 文件提供了针对目录改变配置的方法, 即在一个特定的文档目录中放置一个包含一条或多条指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache 的 AllowOverride 指令来设置。
.htaccess 中有 # 单行注释符, 且支持 拼接上下两行。
0x1.2作用范围
.htaccess 文件中的配置指令作用于 .htaccess 文件所在的目录及其所有子目录,但是很重要的、需要注意的是,其上级目录也可能会有 .htaccess 文件,而指令是按查找顺序依次生效的,所以一个特定目录下的 .htaccess 文件中的指令可能会覆盖其上级目录中的 .htaccess 文件中的指令,即子目录中的指令会覆盖父目录或者主配置文件中的指令。
0x1.3配置文件
启动 .htaccess,需要在服务器的主配置文件将 AllowOverride 设置为 All,如 apache2.conf
也可以将 .htaccess 修改为其他名
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/b7ba1860571e43b8aedf4b47e237d6da.jpg)
0x2常见指令
.htaccess 可以实现网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。如需了解详细功能可看这篇文章http://www.htaccess-guide.com/ , 这里就不一一介绍,主要讲解几种常利用的指令。
0x2.1SetHandler
SetHandler 可以强制所有匹配的文件被一个指定的处理器处理
用法:
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/2d96f42ae0da438ca4f4c0cbdd459e02.jpg)
示例1:
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/68d225bde8ea44a2b44962638dc4f693.jpg)
此时当前目录及其子目录下所有文件都会被当做 php 解析
示例2:
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/bbb281fac113440783e07b9efa15fd89.jpg)
apache的服务器状态信息(默认关闭),可以查看所有访问本站的记录
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/eea05b7d6ba64bfcbdbc15cffee54891.jpg)
访问任意不存在的文件,加参数 ?refresh=5 来实现每隔 5s 自动刷新
0x2.2 AddHandler
AddHandler 可以在文件扩展名与特定的处理器之间建立映射
用法:
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/1d33ab599ab8460aae875009262ba6e4.jpg)
例如:
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/3359a2a9f9b944c3982f53b84e8e3313.jpg)
将扩展名为 .xxx 的文件作为 CGI 脚本来处理
0x2.3AddType
AddType 可以将给定的文件扩展名映射到指定的内容类型
用法:
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/92cc2a0808984dbfbfeac3169a9f10a7.jpg)
示例:
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/2ee07267bba94c76a15beaba2d653be6.jpg)
将以 gif 为后缀的文件当做 php 解析
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/fdb4c83c4d114a729130ea859eb209fd.jpg)
将以 .png .jpg .gif 多个后缀当做 php 解析
0x2.4php_value
当使用 PHP 作为 Apache 模块时,也可以用 Apache 的配置文件(例如 httpd.conf)和 .htaccess文件中的指令来修改 php 的配置设定。需要有AllowOverride Options 或AllowOverride All 权限才可以。
php_value 设定指定的值。要清除先前设定的值,把 value 设为 none。不要用 php_value 设定布尔值。应该用 php_flag。
用法:
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/ef62059bf8d54f9db4c9c38158e0342d.jpg)
查看配置可被设定范围
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/c49d33e508e848b584697a4d352fd0e1.jpg)
由上可知 .htaccess 只能用于 PHP_INI_ALL 或 PHP_INI_PERDIR 类型的指令。
查看php.ini 配置选项列表,寻找可利用指令
(1) 文件包含配置选项
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/e1726ce06e1d4f7b8bb9481bc2659435.jpg)
auto_prepend_file:在主文件解析之前自动解析包含的文件
auto_append_file:在主文件解析后自动解析包含的文件
例如:
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/676989a8afac4ea3ae57ed00eecf9ffb.jpg)
访问一个 php 文件时,在该文件解析之前会先自动解析 images.png 文件
(2) 绕过preg_match
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/0ecd6faa377f463b9e9e6976fdb673f3.jpg)
例如:
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/476fd3dafd8541069837206aa7ec21c4.jpg)
设置正则回朔次数来使正则匹配的结果返回为 false 而不是0 ,从而可以绕过正则。
0x2.5php_flag
php_flag 用来设定布尔值的 php 配置指令
用法:
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/9bfaa33e4aeb4afc8ca18839df840b8b.jpg)
查看php.ini 配置选项列表,寻找可利用指令
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/d9e4865d46e34150be93ff17a4b9a85a.jpg)
可以将 engine 设置为 0,在本目录和子目录中关闭 php 解析,造成源码泄露
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/4c1ba91ea186444cb0a61041e50d81e4.jpg)
0x3利用方式
0x3.1文件解析
经常出现在文件上传的黑名单没有限制 .htaceess 后缀,通过上传 .htaccess 文件,再上传图片,使图片的 php 恶意代码得以被解析执行
.htaccess 文件内容有如下两种
1.SetHandler 指令
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/fabf49e294a54c71aae8d941b4d1d2b9.jpg)
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/22f53a74a43b4da0bc2b392956a807fb.jpg)
2.AddType
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/5e352f6facb940b2a88c08c069a926e1.jpg)
0x3.2文件包含
0x3.2.1本地文件包含
通过 php_value 来设置 auto_prepend_file或者 auto_append_file 配置选项包含一些敏感文件, 同时在本目录或子目录中需要有可解析的 php 文件来触发。
.htaccess 分别通过这两个配置选项来包含 /etc/passwd,并访问同目录下的 index.php文件。
auto_prepend_file
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/ec6d9fb9c12c454b9e37b85f44c959a6.jpg)
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/7ba11bd1d6d04596a782832efd60dd1e.jpg)
auto_append_file
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/7566b62e067c41eb88de6ccf3c598004.jpg)
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/d73a2c42224e4999ab33db5ac40872d7.jpg)
0x3.2.2远程文件包含
PHP 的 all_url_include 配置选项这个选项默认是关闭的,如果开启的话就可以远程包含。因为 all_url_include 的配置范围为 PHP_INI_SYSTEM,所以无法利用 php_flag 在 .htaccess 中开启。
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/4a86973d9f1149979d4005c6ffb3b729.jpg)
这里为了演示,就在 php.ini 中设置 all_url_include 为 On
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/77636c8393074fe1847ed6ce9c943e7c.jpg)
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/f83278f1e5ac47ed9d00ae89bb219747.jpg)
0x3.3源码泄露
利用 php_flag 将 engine 设置为 0,在本目录和子目录中关闭 php 解析,造成源码泄露
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/4c1ba91ea186444cb0a61041e50d81e4.jpg)
这里在谷歌浏览器访问会显示源码,用其他浏览器访问会显示空白,还需查看源码,才可看到泄露的源码
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/04bda5e83c504908a384a0eb063be2ef.jpg)
0x3.4代码执行
1.利用伪协议
all_url_fopen、all_url_include 为 On
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/075628efae7845dfacdeef5ea43eac97.jpg)
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/77fa19a5e4c84886b3199fa484876a5b.jpg)
2.解析.htaccess
方法一:
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/82c8ee0df6794f2589e6d2cd7caeabea.jpg)
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/5da9ec5bcbf04bd097e3ba3c9e3dfa7a.jpg)
方法二:
这种适合同目录或子目录没有 php 文件。
需要先设置允许可访问 .htaccess 文件
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/d70777151b8d490abcedab7140f283e5.jpg)
将 .htaccess指定当做 php文件处理
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/6591428d5e9240cf840b904725ac32d3.jpg)
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/c66c611b0cf5448a8d14fdb4161818d3.jpg)
0x3.5命令执行
0x3.5.1CGI启动
cgi_module 需要加载,即 apache 配置文件中有
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/5ee663f0c7ff4b5f913b21258eece0b3.jpg)
.htaccess内容
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/bd42a1ad302548199ba5be0d83ae9fba.jpg)
ce.xx
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/8d124b81a4b7446eab0ceb10029ab651.jpg)
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/8b51da9ae09d4f898379e1c6faa2a591.jpg)
例题可看 De1CTF2020 check in
0x3.5.2FastCGI启动
mod_fcgid.so需要被加载。即 apache 配置文件中有
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/7aa1c637fbf54b37a61025a3a614398d.jpg)
.htaccess
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/b0dc7ea98ccb422ebb3bcddff400a787.jpg)
ce.xx 内容随意
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/70bf8d444c9f4ccdb8c96822e2f0ad7e.jpg)
0x3.6XSS
0x3.6.1 highlight_file
.htaccess
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/764d3e3befb54e23994f1e1c013d103e.jpg)
其中的 highlight.comment 也可以换成如下其他选项
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/683ccdd394f04aef9f7aac7e31e8c05b.jpg)
index.php
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/23936152fbf74752b37186614480c2ea.jpg)
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/5ee632d97a544eada2b6db625f569110.jpg)
0x3.6.2错误消息链接
index.php :
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/97ce2908f0024b61a0f5abdeeea9fc97.jpg)
.htaccess
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/53bf51ff4ae3439db37aa54a082d08b3.jpg)
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/a2e70c6fe8404ba3bc0511da26fc8384.jpg)
0x3.7自定义错误文件
error.php
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/1b949abecf774248bea83be28bc904b9.jpg)
.htaccess
![技术干货 | Apache的.htaccess利用技巧](https://image.cha138.com/20210420/7067a6bb938c4960ba2b8944855b0510.jpg)
访问 error.php,会报错并记录在 shell.php 文件中
因为会经过 html 编码,所以需要 UTF-7 来绕过。
.htaccess
例题可看X-NUCA-ezphp
0x4参考链接
https://www.anquanke.com/post/id/205098
https://www.cnblogs.com/Wanghaoran-s1mple/p/13152075.html
http://httpd.apache.org/docs/2.4/
https://github.com/sektioneins/pcc/wiki/PHP-htaccess-injection-cheat-sheet
https://www.freebuf.com/vuls/218495.html
以上是关于技术干货 | Apache的.htaccess利用技巧的主要内容,如果未能解决你的问题,请参考以下文章
利用Apache漏洞getshell(.htaccess 文件攻击上传shell)
apache_conf htaccess:利用浏览器缓存的指令