文件上传漏洞基础

发布于 2022-08-06  445 次阅读


蚁剑安装使用

  1. 蚁剑安装:蚁剑分为加载器和核心模块两部分,加载器名:AntSword-Loader-v4.0.3-win32-x64,模块名:antSword-2.1.11.1,打开加载器,点击初始化,打开模块目录文件夹即可
  2. webshell命令< ?php @eval($_POST[cmd]);? >,添加webshell地址,密码为post内容,添加webshell后可以右键可进行可视化文件操作

upload靶场搭建

  • 文件名upload-labs-env-win-0.1,解压运行bat文件,直接打开exe启动旧版本apache即可,访问127.0.0.1进入

拦截方式与漏洞

  1. 从拦截入手:如果是前端拦截,可以上传合格的文件后缀,通过前端的函数检查后,bp抓包修改即可
  2. 从询问方式入手:
    1. 向浏览器询问:$_FILES['upload_file'] [ 'type']命令向浏览器询问上传文件的后缀,bp抓包修改contant-type(不确定格式可以通过上传合格后缀后查看浏览器的contant-type格式)为image/png
    2. getimagesize()函数询问,上传图片马(cmd中copy 1.jpg/a+1.php/b 2.jpg )
    3. php_exif模块询问,上传图片马
  3. 从黑名单与白名单入手: $deny_ext = array('.asp','.aspx','.php','.jsp'); if(!in_array($file_ext, $deny_ext))(白名单去掉!)
    1. 末尾加点,没有deldot()函数
    2. 末尾加空格,没有trim()函数
    3. 后缀名大小写,没有strtolower()函数
    4. 末尾加::$DATA,没有去除字符串 str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
    5. 组合方式:部分网页做了以上4点,但只重复一次,可以尝试加 点 空格 点 空格 一类
  4. 从处理方式入手:
    1. 部分网页收到不合格后缀后可能删除后缀,而不是阻止上传,可以复写后缀
    2. 部分网页收到不合格后缀后可能删除文件,而不是阻止上传,可以bp大量上传使之来不及删除
    3. 图片二次渲染,imagecreatefromgif()类函数,改写了上传的图片马,可使用winhex寻找未被修改的16进制片段,将一句话木马插入(不能放头部,会破坏文件类型识别)(仅适用于gif,png较复杂)
  5. 从拦截入手
    1. 如果为get方法可以直接%00截断,filename部分后缀改为合格后缀,post部分输入文件名.php后加%00
    2. 如果为post方法,在post部分如webshell.php a,bp查看hex,在61对应的16进制前的数改为00

upload靶场wp

l1

  • 网页利用函数检查上传文件后缀,修改文件后缀为png,上传时bp抓包将文件后缀改回去

l2

  • $_FILES['upload_file'] [ 'type']向浏览器询问文件后缀,bp抓包修改contant-type(不确定格式可以通过上传真图片后查看浏览器的报文)为image/png

l3

  • 发现 $deny_ext = array('.asp','.aspx','.php','.jsp');

    设置了黑名单,考虑上传phtml,php3,php4,php5,pht

  • 网页上传文件时如果对文件名进行修改,可通过抓包软件查看返回数据

l4

  • 与l3类似,发现过滤掉所有有关的后缀名php,加点空格点空格
  • 也可以利用.htaccess文件,修改apache配置,从而将所有格式的后缀都被当做php解析
  • sethandler application/x-httpd-php
  • 蚁剑直接连接png文件即可,注意:如果蚁剑测试连接成功而无法建立连接可能是填网址的时候没加http://

l5

  • 与l3类似,发现过滤掉所有有关的后缀名,没有strtolower()函数可以大小写绕过
  • 页面提示文件中存在readme.php,也可以上传.user.ini文件,输入

l6

  • 与l3类似,发现过滤掉所有有关的后缀名,没有trim()函数,在后缀名后加空格

l7

  • 与l3类似,发现过滤掉所有有关的后缀名,没有deldot()函数,在后缀名后面加点

l8

  • 与l3类似,发现过滤掉所有有关的后缀名,没有去除字符串 str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA,在后缀名后加这个

l9

  • 与l4相同

l10

  • 黑名单拦截不报错,而是删除后缀,考虑加双后缀.phpphp

l11

  • 使用了白名单,但是可以尝试在post部分用%00将.php后面的内容截断

l12

  • 同l11,但使用post方法,需要16进制修改00

l13

  • 使用白名单,通过$strInfo()函数读文件的前2个字节判断文件类型,上传图片马(方法见上)

l14

  • 使用getimagesize()函数读取文件头获得文件类型,上传图片马

l15

  • 使用php_exif模块判断文件类型,上传图片马

l16

  • 图片二次渲染,方法见上文

l17

  • 与l11类似,但无法截断未经过则被删除,考虑连续上传大量文件,使服务器来不及删除(bp爆破模块中选择null payload和continue)

l18

  • 与l17类似,先上传再删除,连续上传

l19

  • 黑名单,可通过大写绕过

l20

  • 没搞懂
届ける言葉を今は育ててる
最后更新于 2024-02-07