文件上传靶场解题思路

Track-子羽   ·   发表于 2022-11-02 16:57:40   ·   CTF&WP专版

文件上传漏洞

  • 文件上传漏洞是指由于程序在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件(恶意文件)

靶场实操

Pass-01 前端验证绕过


存在文件类型检测,仅允许jpg\png\gif类文件上传

  • JS代码运行在我们本地,所以通过浏览器禁用js即可绕过检测(更标准做法是上传jpg文件抓包改后缀)

  • 禁用后就可以上传写有一句话木马文件

  • 通过菜刀连接1.php

Pass-02 Content-Type方式绕过

  • 后端检测,仅能上传image\jpg类型文件
  • 首先上传一个 图片马 可以是 jpg格式的
  • 使用burp抓取上传文件包
  • 可以直接在数据包中修改 filename 后面的参数

例如把 filename="1.jpg" 修改为 filename="1.php"


phpinfo()成功 [上传php木马文件成功后都可以测试一下是否能phpinfo()]

Pass-03 黑名单绕过

  • 禁止了一些文件类型,以及格式的检测
  • php执行不单只有.php后缀的文件才可以执行php代码,还可以写.php3.php4.php5.phtml
  • jsp代码可以通过.jspjspxjspf后缀文件执行
  • asp代码可以通过.asp.asa.cer.aspx后缀文件执行
  • exe还可以通过.exee文件执行

  • 上传.phtml后缀的一句话木马文件
  • 更改文件类型后连接菜刀

Pass-04 .htaccess文件绕过

  • .htaccess分布式配置文件(针对不同文件夹可以有不同的规则,默认不开启)

  • 限制了文件类型及格式

  • 编写.htaccess文件(意思是上传的jpg文件可以当做php执行)

  • 首先上传.htaccess文件,再上传写了一句话木马的jpg文件

  • jpg文件可以被当做php代码执行

Pass-05 后缀大小写绕过

  • 禁用文件类型,一些格式检测
  • 上传包含一句话木马的jpg文件,抓包改文件后缀,并更改大小写(大小写格式没有被包含在代码限制中)

Pass-06 文件后缀(空)绕过

  • 过滤了文件类型,增加了强制小写
  • 上传包含一句话木马的jpg文件,抓包修改文件名并在后缀加上空格
  • php和php 不是一个情况

Pass-07 文件后缀(点)绕过

  • 文件类型过滤,转小写,增加了收尾去空
  • 同样上传包含木马的jpg文件,抓包修改后缀并在结尾加一个.


Pass-08 ::$DATA(Windows文件流绕过)

  • 文件类型过滤,转小写和收尾去空,并增加了祛除结尾的点
  • 文件备用流中如123.php::$DATA等同于123.php

>> 浏览器输入时需要删除::$DATA

Pass-09 构造文件后缀绕过

  • 文件类型过滤,转小写和收尾去空,祛除结尾的点,增加了祛除字符串
  • 没有循环检测,尝试增加后缀复杂度,上传jpg文件抓包更改后缀并增加如. .的方式上传

  • 祛除末尾的.,转小写,收尾去空,最后剩下多写的.

Pass-10 双写文件后缀绕过

  • 文件类型限制,有替换功能,出现限制的文件类型后直接删除关键词
  • 但同样没有循环检测,上传文件修改后缀为如pphphp,检测会删除中间的php,剩下的p和hp可以组成php后缀

Pass-11 00截断绕过

  • oo截断:源于电报,如呼叫呼叫…over,over就相当于结束,但是计算机无法通过语言分析哪里是结束
  • 计算机通过标识符辨别数据是否结束:出现00字符代表结束(move_upload_file函数在php5.3以下版本中存在该漏洞)

  • 白名单检测,只允许上传jpg\png\gif类文件,上传的文件名会被改为随机值加时间

  • 可以控制上传路径信息,抓包更改路径信息,添加%00中断,如../upload/1.php%00/xxxxxxxxxxxxxxx.jpg,这是上传文件本来的完整信息,但是我们手动更改将我们的文件放在upload路径后添加%00,计算机会认为到/upload/1.php就可以了,所以会留下1.php

Pass-12 00截断绕过(二)

  • %00是url编码,通过抓包修改16进制将%00塞到数据中

  • 修改a为%00

Pass-13 图片马绕过

  • 检测文件内容信息,根据标识符判断是否是一个图片文件

  • 图片马:图片和木马结合。图片必须越小越好,本地测试成功再使用
  • 准备一张图片和一句话木马的php文件,将两个文件合并输出为图片马(/b是指二进制)

Pass-14 getimagesize图片类型绕过

  • 同样制作一个图片马
    >> 夹心图片马:图+马+图

Pass-15 php_exif模块图片类型绕过

  • php_exif 用于读取标头查看图片信息
  • 同样上传图片马

Pass-16 二次渲染绕过

  • 二次渲染:把图片重新渲染一次,根据图片把图片重做一次,可以清除掉其中写入的代码
  • 图片有一些基础属性是无法改变的,如图片的开头标头不会变(jpg\png很难绕过二次渲染,gif属性多好绕过)
  • 在hex中编辑写入一句话木马

Pass-17 条件竞争绕过

  • 先后顺序问题,代码中执行先上传然后再进行检测,上传和删除都需要一定的时间,可以采用马生马的方式在执行间歇中生成另外的木马文件
  • 用函数file_put_contents来执行马生马的过程(该函数主要是把一个字符串写入文件中)

  • 构建一个文件,当执行这个文件时,就回生成名为‘123’的php文件,内容是一句话木马

【条件竞争在本地搭建环境复现】

  • 再抓一个上传包

  • 对上传和访问进行爆破(因为只需要频繁访问直到创建了小木马文件即可)



  • 然后就可以生成123.php


Pass-19 move_uploaded_file()截断

  • 也是一个00截断,抓包修改路径,通过hex修改00

Pass-20 IIS6.0解析漏洞(一)

  • iis是web容器,如IIS\APACHE\NGINX
  • 该漏洞仅存在于IIS 6.0版本。解析漏洞在于可以根据漏洞以特殊访问手法或特殊后缀名可以被当做后端代码执行(例如类似的.htaccess)
  • IIS 6.0 => Windows Server 2003全版本默认安装自带IIS 6.0(ASP站点可以尝试一下这个漏洞)
  • asa\cdx\cer在这个版本中都会当做asp执行

  • 会检测文件类型
  • 编写一个一句话木马的.asa文件,上传并抓包修改文件类型


  • 图片上传的位置与我们最开始访问的站点不一样

  • 将image/a.asa替换到url显示的路径中:http://靶场地址/a/image/a.asa
  • 通过菜刀连接

Pass-21 IIS6.0解析漏洞(二)

  • IIS 6.0在处理含有特殊符号的文件路径时会出现逻辑错误,从而造成文件解析漏洞,如:test.asp;.jpg 会被当做asp进行解析 | test.asp/123.jpg 被当做asp进行解析
  • 上传包含asp一句话木马的jpg文件,抓包修改文件后缀

  • 菜刀连接

Pass-22 IIS6.0解析漏洞(三)

  • 如果上传文件存在文件夹名存在.asp,则会认为该文件夹中所有文件都是asp文件

  • 连接菜刀

Pass-23 CGI解析漏洞(四)

  • CGI(是php和web容器的通讯方法),该漏洞会导致任何文件后加/xx.php,该文件就会被当成php文件执行
  • NGINX及IIS 7.0\7.5、Lighttpd中比较常见

  • 上传一个带马的图片文件

  • 拷贝图片连接访问,在图片连接后加上/.php,这时这个图片文件会被当成php执行

  • 菜刀连接拿flag

打赏我,让我更有动力~

0 条回复   |  直到 2022-11-2 | 1004 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.