htaccess文件是一个简单的配置文件,可以重写某个目录以及子目录下的apache解析规则。使用htaccess文件重写规则需要将apache配置文件中的AllowOverride选项设置为All(默认为None)。在CTF中的某些文件上传的题目中可以使用htaccess文件绕过过滤。
使用方法
下面是一些htaccess文件常规的使用方法
访问控制
可以设置允许或者禁止某个IP访问,也可以将htaccess文件设置为deny from all
禁止htaccess文件的访问,防止htaccess文件被查看
|
|
文件名还可以使用通配符和正则表达式,下面的配置可以设置了仅允许本地访问i开头的文件,下面的是正则表达式,如果用通配符可以将文件名写成i*.php
|
|
自定义错误页面
在htaccess文件中加入如下的一段规则可以自定义404页面,除此之外也能自定义其他状态码的错误页面。不过其中的根目录指的是网站根目录而非linux根目录,无法进行目录穿越
|
|
允许/禁止显示目录列表
在允许目录遍历的情况下加入如下的一段规可禁止显示目录列表:
|
|
目录重定向
写入如下的规则后访问/old
目录会自动跳转到/new
目录
|
|
文件解析
文件上传中比较常用的方法,在过滤php后缀时可以先上传图片马,然后上传.htaccess文件使得图片马可以被执行
SetHandler
强制目录下所有文件被一个指定的处理器处理
|
|
AddHandler
使得扩展名与文件处理器之间建立映射
|
|
AddType
可以将给定的文件扩展名映射到指定的文件类型
|
|
修改php.ini中的选项
php_value
可用于修改php.ini中的设置,可以查看配置可被设定范围,然后可知.htaccess可用于PHP_INI_ALL
或 PHP_INI_PERDIR
模式的指令,然后在php.ini配置选项列表可以找到可用的指令
可以设置auto_prepend_file
进行文件包含,包含的文件可以是php伪协议
|
|
还可以在.htaccess文件中设置包含自己:
|
|
也可以设置正则回溯次数绕过preg_match
函数
|
|
php_flag
可用于设置布尔值的 php配置指令,例如关闭php解析可以造成源码泄露
|
|
执行CGI脚本
需要apache2启用cgi模块:
|
|
然后在htaccess文件中添加如下的规则以支持sh为后缀的cgi脚本的执行
|
|
写入一个简单的CGI脚本可以执行命令并回显
#!/bin/sh
echo "Content-type: text/plain\r\n"
whoami
利用错误日志写马
这个思路应该是来自[XNUCA2019Qualifier]EasyPHP
先通过error_log配合include_path构造报错写马,为避免被html编码需要使用UTF-7编码
|
|
然后将php编码设置为UTF-7执行写入的UTF-7编码的php文件
|
|
waf绕过
可以用反斜线绕过关键字的过滤,例如文件上传内容过滤php,可以用反斜线绕过对php的过滤
|
|
绕过<?
的过滤可以使用UTF-7编码,例如下面是一个设置了自包含的htaccess文件:
|
|
使用#\
可以注释最后一行的脏字符,使得.htaccess文件符合规范,例如在写入的文件末尾添加了"\nJust one chance"
可以用#\将其注释掉,注释后的文件如下:
|
|
基于htaccess文件的盲注
今年津门CTF中Nu1L战队的wp里的盲注:
|
|
file的目录为绝对目录,然后通过正则表达式将flag与字符串匹配进行盲注,如果flag能匹配上则在404页面中会有"wupco"字符,然后不断猜解字符可以进行盲注