|如何创建自己的Tracker( 七 )


|如何创建自己的Tracker
本文插图

【|如何创建自己的Tracker】我已经将其设置为与我的Quasar实例一起运行 , 但是由于尚未设置插件 , 因此您可以使其保持原样 。 该工具会通过指定目标IP , 端口和插件来设置多个目标 。
让我们回到核心脚本:
|如何创建自己的Tracker
本文插图

在第54行 , 对targets.yaml文件进行了解析 , 并提取其内容 。 然后调用函数connect_targets():
|如何创建自己的Tracker
本文插图

对于targets.yaml文件中的每个目标执行connect()函数:
|如何创建自己的Tracker
本文插图

connect()函数位于第22行 , 它使用_connect()回调函数启动线程 , 并将ip , port和plugin传递给该函数 。 _connect在第27行被调用 。 首先 , 它从plugin文件夹中导入一个插件 , 然后在第29行 , 使用插件构造函数连接到RAT , 接下来调用插件的connect , register和loop函数 。 创建的所有插件扩展了puppet_rat.py中类的所有属性 。 因此 , 让我们查看下:
|如何创建自己的Tracker
本文插图

于第16行 , 我们可以看到该类的构造函数 , 就像之前在核心脚本中看到的那样 , 于第29行被触发 。 第16行的构造函数设置了客户端属性——ip , 端口 , 伪进程ID , 记录所有事件的记录器和用于表示套接字的conn变量 。 最重要的功能是:

  1. connect用来实现从客户端到服务器的连接
  2. register用来实现注册功能
  3. loop用来等待服务端发送命令
接下来我们对该脚本进行测试 。 首先我们从最简单的事情开始 , 让我们修改target.yaml文件以满足我们的需求 , 可以在上文找到示例 。 接下来 , 请下载quasar.py和clientidentity_pb2.py , 将它们放到plugins文件夹中 。
现在 , 我会逐行回顾我的插件代码:
|如何创建自己的Tracker
本文插图

首先 , 让我们来看下构造函数——它扩展了PuppetRat类 , 从而继承了其所有属性 。 我添加了message成员 , 以便可以随时对其进行编辑 。 用户必须自己设置的是Tag , EncryptionKey和Signature , 它们在客户端之间传输 。 另外 , 我添加了一个名为message的protobuf消息成员 , 在第70行可以看到 。 它创建了未初始化的Quasar消息 。
同时我增加了4个自定义函数 , 这些函数使研究人员可以更改tag , id , key及signature , 并且可以生成和设置protobuf消息 。 函数__del__是一标准的Python函数 , 当对象被销毁时执行——它会关闭为Quasar创建的连接 。
|如何创建自己的Tracker
本文插图

重新实现的connect函数——该函数与测试脚本中的非常相近 。 在我们阅读其源码 之前 , 请先从我的Github上下载utils.py文件 , 并将其放置在stage props文件夹中 。 在第112行 , 创建一个tcp套接字 , 然后将该套接字绑定到SSL套接字 。 create_ssl_sock是一个添加到utils脚本中的自定义函数 。 就像在我们的测试脚本 , 它所做的只是创建一个SSL套接字并将其绑定 , 以便我们可以验证Quasar证书 。 然后 , 连接到Quasar服务器并尝试进行握手 。 如果一切顺利 , logger会显示一正确的消息 。
|如何创建自己的Tracker


推荐阅读