关于Mallet
Mallet是一款功能强大的协议安全分析工具,该工具支持针对任意协议创建用于安全审计的拦截代理,该工具本质上与我们所熟悉的拦截Web代理类似,只是通用性更强。
工具运行机制
Mallet建立在Netty框架之上,并且依赖于Netty管道概念,即允许以图形方式组装处理程序图。在Netty世界中,处理程序实例提供帧分隔(即消息从哪里开始和结束)、协议解码和编码(将字节流转换为Java对象,然后再转换回来,或者将字节流转换为不同的字节流),以及更高级别的逻辑。通过仔细区分编解码器与实际操作消息的处理程序,Mallet可以从现有的大量编解码器库中受益,并避免重新实现许多协议。
Mallet 不一定只用于安全审查。由于Mallet是建立在Netty框架之上的,因此一旦使用 Mallet制作了管道原型,我们就可以毫不费力地将代码迁移到普通的Netty应用程序中。
下面给出的是一个简单的SOCKS 代理的示例,可作为我们理解Mallet处理网络流量的一个概览:
一旦我们了解了流量的实际情况,就可以开始在管道中添加适当的ChannelHandler类了。
工具要求
1、最新版本的Java运行时环境;
2、Maven;
工具安装
由于该工具基于Java开发,因此我们首先需要在本地设备上安装并配置好最新版本的Java运行时环境。
接下来,广大研究人员可以直接使用下列命令将该项目源码克隆至本地:
git clone https://github.com/sensepost/mallet.git
然后切换到项目目录中,使用Maven对项目源码进行编译:
cd malletmvn package
工具使用
cd target/java -jar mallet-1.0-SNAPSHOT-spring-boot.jar
项目的examples/目录中提供了一些示例图,其中JSON图要求 JSON客户端通过localhost:9998/tcp连接到 Mallet,而真实服务器则位于localhost:9999/tcp。只有最后一个JSON图(json5.mxe)对传递的 JSON消息的结构做出了任何假设,因此它们应该适用于发送JSON消息的任何应用程序。
demo.mxe显示了一张复杂的图,其中包含两个管道,即TCP和UDP。TCP管道分别支持端口80和443上的HTTP和HTTPS以及WebSockets,同时将任何其他流量直接中继到其目的地。UDP管道用于处理localhost:1053/udp上的DNS请求,将对google.com的查询替换为对www.sensepost.com的查询,并将请求转发到Google DNS服务器。
项目地址
Mallet:【GitHub传送门】
参考资料
GitHub - netty/netty: Netty project - an event-driven asynchronous network application framework
https://netty.io/
https://netty.io/4.1/api/io/netty/channel/ChannelHandler.html