码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 文件上传漏洞


    目录

    前言

    1.原理

    2.类型

    3.复现

    3.1环境

    3.1.1函数介绍

    3.2过程

    3.2.1客户端绕过

    3.2.2服务端绕过

            黑名单检查后缀

            白名单检查后缀


    前言

    文件上传漏洞是wb安全中经常用到的一种漏洞形式。是对数据与代码分离原则的一种攻击。上传漏洞顾名思义,就是攻击者上传了一个可执行文件如木马,病毒。恶意脚本,WebShell等到服务器执行,并最终获得网站控制权限的高危漏洞。本文仅关联相关安全问题无其他导向

    1.原理

    程序员在开发任意文件上传功能时,并未考虑文件格式后缀的合法性校验或者是否只在前端通过js代码进行后缀检验。这时攻击者可以上传一个与网站脚本语言相对应的恶意代码动态脚本,例如asp、php、aspx、php3、php5等文件后缀)到服务器上,从而访问这些恶意脚本中包含的恶意代码,进行动态解析最终达到执行恶意代码的效果,进一步影响服务器安全。

    2.类型

    客户端绕过、服务端绕过

    3.复现

    3.1环境

    upload-labs靶场+phpStudy小皮

    GitHub - c0ny1/upload-labs: 一个想帮你总结所有类型的上传漏洞的靶场一个想帮你总结所有类型的上传漏洞的靶场. Contribute to c0ny1/upload-labs development by creating an account on GitHub.https://github.com/c0ny1/upload-labs小皮面板(phpstudy) - 让天下没有难配的服务器环境!phpStudy官网2019正式推出phpStudy V8.0版本PHP集成环境,支持Windows与Linux系统,支持WEB面板操作管理,一键网站开发环境搭建配置,另经典版本phpStudy2016/2018/JspStudy环境套件同步更新中,欢迎网站开发者或运维下载使用!https://www.xp.cn/

    3.1.1函数介绍

    1. trim()作用:从一个字符串的两端删除空白字符
    2. deldot()作用:从字符串的尾部开始,从后向前删除点.,直到该字符串的末尾字符不是.为止
    3. strrchr()作用:查找字符串在另一个字符串中最后一次出现
    4. strtolower()作用:转换大小写
    5. str_ireplace()作用:字符串替换操作,不区分大小写

    https://www.jb51.net/article/239371.htm#_label1https://www.jb51.net/article/239371.htm#_label1

    3.2过程

    3.2.1客户端绕过

    原理

    由于程序猿只在前端通过js代码进行后缀检验,正是他的粗心导致了可利用的漏洞

    方法

    1. (1)停用JavaScript(适用于upload-labs靶场的第一关)
    2. ctrl shift+i-->设置-->偏好设置-->停用Javascript

    总结

    文件上传漏洞中如果是出现前端js限制这种情况,那么绕过方法非常简单就是停用浏览器的JavaScript,这种前端黑名单的限制方法是不应该出现的,更加严谨的是需要前端后端都需要进行限制,upload-labs的第二关就是对后端也进行了限制

    3.2.2服务端绕过

    原理

    通过后端限制的缺陷来进行绕过,一般都是在网页上写一段javascript脚本,校验上传文件的后缀名是否合法,有白名单和黑名单两种形式,区别就是,黑名单明确了不能上传的文件格式,白名单则明确了可以上传的文件格式

    黑名单检查后缀

    方法 

    1. (2)使用抓包工具burp修改包数据(适用于upload-labs靶场的第一、二关)
    2. 创建一句话-->修改后缀满足“.jpg|.png|.gif”(绕过前端限制)-->设置浏览器代理(burp代理)-->通过burp抓包然后修改上传文件后缀然后放行

    1. (3)通过大小写的方法绕过(适用于upload-labs靶场的第五关)
    2. PHP、Aspx等

    1. (4)空格绕过(upload-labs靶场第六关)
    2. 后缀使用空格技巧通过,绕过原因为后端并没有过滤空格,这里前提也是在Windows下利用它的特性会去除文件名空格

    1. (5)使用点绕过(upload-labs第七关)+burp抓包绕过
    2. 由于没有过滤点,我们可以通过后缀加点的方法绕过,这里是依据Windows系统自动去除上传文件的点

     

    (6)Windows数据流特性,完整的数据后面是含有::$DATA的而这个::$DATA就称为数据流,只不过在文件的后缀中不会显示出来,所以利用这个特性我们就可以通过upload-labs靶场的第八关

    1. (7)路径拼接绕过(upload-labs靶场第九关)
    2. 第九关虽然限制的看似没有问题但是恰恰问题就出现在它的限制顺序中,我们考虑如果我们按照它的限制顺序让它把过滤的都过滤掉只剩下我们需要上传的就可以了

    1. (8)双写绕过(upload-labs靶场第十关)
    2. 通过burp抓包+双写后缀来绕过

    1. (9)php后缀特性绕过(upload-labs靶场第三关)
    2. php2、php3、php5、phtml等,一般php配置文件中不会设置这样的特性,所以不会生效

    1. (10)利用.htaccess配置+图片马绕过(upload-labs靶场第四关)
    2. 利用它的伪静态特性,首先在.htaccess配置文件中写入命令让传入目标文件下的文件都用php执行,然后我们通过cmd合成一个图片马传入目标文件目录下,然后通过.htaccess文件的特性来使用php执行该图片马

    编写.htaccess配置文件通过vscode进行修改内容如下,并将它传入目标路径下

    1. "image">
    2. SetHandler application/x-httpd-php

    在cmd中通过以下命令生成图片马,test.php中的内容为我们写入的一句话木马

    copy aa.png/b + test.php/a image.png

    白名单检查后缀

    方法

    1. (1)MIME类型绕过
    2. 服务端MIME类型检测是通过检查http包的Content-Type字段中的值来判断上传文件是否合法
    3. burp抓包修改content-Type实现绕过

    常见的MIME类型 - Scivous - 博客园1,常见的MIME类型(通用型): 超文本标记语言文本 .html text/html xml文档 .xml text/xml XHTML文档 .xhtml application/xhtml+xmlhttps://www.cnblogs.com/scivous/p/14059858.html

    1. (2)00截断漏洞&get型(出现于php5.2版本漏洞)(upload-labs第十一关)
    2. 使用burp抓包添加%00然后修改php后缀名的方式绕过

    00截断原理:\0截断了后面的执行语句让其默认已经执行完成了,所以导致恶意文件上传成功 

     

    1. (3)00截断漏洞&post型(upload-labs第十二关)
    2. get传参首先在url要解码所以你就需要提前将\0进行编码成%00,而post传参不需要所以要把这里的%00解码
    3. 使用burp抓包添加%00先对%00进行url-decode然后修改php后缀名的方式绕过

     

    1. 引入特别的Windows特性
    2. 实例:U-Mail邮件系统
    3. 在Windows+php+iis(phpstudy2018)环境下Windows具有以下特性
    4. 小于号(<)相当于星号(*)
    5. 大于号(>)相当于问号(?)
    6. 双引号(")相当于小数点(.)
    7. 这里我们又知道在操作系统中*星号表示所有的意思,所以利用这个特性我们可以去绕过一些特别的限制eg:当我们将这样的bypass.<<<文件上传到目标路径下相当于匹配了php后缀也就是bypass.php那么就可以达到我们想要的效果
    1. (4)文件包含漏洞绕过(upload-labs靶场第十三、十四、十五关)
    2. 生成图片马方法和前面的第4关中一样,然后上传验证是否成功

    文件包含漏洞形成原因是:用户可以控制你包含的文件

    文件包含漏洞解决方法:如果你使用了文件包含函数,那么你就需要将文件包含的文件写死,不要让用户可以去控制(url中输入的文件使包含成功)

    1. (5)特殊的文件包含漏洞绕过(upload-labs靶场第十六关)
    2. 使用了imagecreatejpeg()函数,通过010editor工具对比上传前后函数变化的位置,将一句话木马写入到未改变的位置来实现绕过

       

    通过010工具对比修改前后的位置差异来插入一句话实现绕过 

    1. (6)时间型竞争漏洞(upload-labs第十七关)
    2. 依据“先上传后删除的特性+burp抓包进行时间竞争绕过

  • 相关阅读:
    【每日一题】找到字符串中所有字母异位词
    数据输出(进制、小数位,左对齐右对齐
    【Mysql】mysql学习之旅01-相关概念
    薪资25k,从华为外包测试“跳”入字节,说说我转行做测试的这5年...
    R reason ‘拒绝访问‘的解决方案
    Gerrrit 管理员常用命令
    面试官:工作中用过锁么?说说乐观锁和悲观锁的优劣势和使用场景
    vue项目使用高德地图时报错:AMap is not defined
    三位数的IMU长什么样?二位数的呢?不要钱的呢?| 为FishBot配置IMU惯性测量单元
    Linux高级编程--gdb调试
  • 原文地址:https://blog.csdn.net/newlife1441/article/details/126329763
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号