Dict 协议是什么
最近在学校 ssrf 攻击,看到可以用 dict 协议可以加载一个 tcp 端口的提供的服务所返回的部分数据。但是网上很少 dict 协议相关的说明,直到我找到了这个网站:
https://www.cnblogs.com/kkun/archive/2009/03/28/1424052.html
感谢这个博客,让俺明白了啥是 dict 协议
dict 的初体验
多说无益,直接上一个用了 dict 协议的服务让你们来体验一下
首先在你的电脑上安装一个 telnet 客户端 Windows 和 Mac / Linux 上应该都有对应的客户端
安装好了以后用这个命令来登陆
由于编码原因,有些非英文字符在某些系统上可能会乱码
telnet dict.org 2628
之后如果连接上了,能看到对应的提示:
220 dict.dict.org dictd 1.12.1/rf on Linux 4.19.0-10-amd64 <auth.mime><56180310.14213.1628480435@dict.dict.org>
在终端中输入 h 来获取帮助
113 help text follows
DEFINE database word -- look up word in database
MATCH database strategy word -- match word in database using strategy
SHOW DB -- list all accessible databases
SHOW DATABASES -- list all accessible databases
SHOW STRAT -- list available matching strategies
SHOW STRATEGIES -- list available matching strategies
SHOW INFO database -- provide information about the database
SHOW SERVER -- provide site-specific information
OPTION MIME -- use MIME headers
CLIENT info -- identify client to server
AUTH user string -- provide authentication information
STATUS -- display timing information
HELP -- display this help information
QUIT -- terminate connection
The following commands are unofficial server extensions for debugging
only. You may find them useful if you are using telnet as a client.
If you are writing a client, you MUST NOT use these commands, since
they won't be supported on any other server!
D word -- DEFINE * word
D database word -- DEFINE database word
M word -- MATCH * . word
M strategy word -- MATCH * strategy word
M database strategy word -- MATCH database strategy word
S -- STATUS
H -- HELP
Q -- QUIT
在终端中输入 show db
命令(这个东西貌似不区分大小写的样子)来列出所有的字典
在最后我们看到了 english 这个字典
在最后我们输入 define [字典名] [单词]
这样的命令来获取一个单词的解释
比如说 define english hello
服务器就会返回对应的单词解释
dict 协议是啥
dict 协议是一个在线网络字典协议,这个协议是用来架设一个字典服务的。不过貌似用的比较少,所以网上基本没啥资料(包括谷歌上)。可以看到用这个协议架设的服务可以用 telnet 来登陆,说明这个协议应该是基于 tcp 协议开发的。
所以像 mysql 的服务,因为也是基于 tcp 协议开发,所以用 dict 协议的方式打开也能强行读取一些 mysql 服务的返回内容
比如说下面这段程序:
<?php
// 文件名: main.php
$url = "dict://localhost:3306"; // localhost:3306 上架设了我的 mysql 服务
$ch = curl_init($url);
curl_exec($ch);
curl_close($ch);
输出结果:
可以看到虽然乱码,但是还是强行读取出来了一些可以辨识的数据,比如说 mysql 的版本号
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
· C# 13 中的新增功能实操
· Supergateway:MCP服务器的远程调试与集成工具
· Vue3封装支持Base64导出的电子签名组件