这是当初有这想法的时候,大佬们问得最多的问题。其实对我个人而言,只是想学习一下Go语言,同时为开源社区做做贡献而已。然而,在日常渗透测试时,时常发现有些工具用着不很顺手——参数太多记不住、想用的功能还要收费、明明存在问题的地方用工具测试居然报错、不支持跨平台......这些不方便的地方又增强了自己写一个工具的想法。然而,在随后边学边写的过程中,发现自己写了个BUG出来。上一期,我们讲到了这个BUG的CLI和基础扫描模块。这一期,我们继续讲一下它的弱口令爆破模块以及POC模块,当然,还有项目的开源地址。
目前支持"RDP","JAVADEBUG","REDIS","FTP", "SNMP", "POSTGRESQL","SSH","MONGO","SMB","MSSQL","MYSQL","ELASTICSEARCH"这些协议的弱口令,实现方式大体相同,以FTP服务进行举例。读取用户名字典(user.txt)和密码字典(pass.txt),随后进行爆破:一开始是直接执行,扫描完成后输出结果,后来同事看到我敲完命令后没有动静,以为是卡死了,搞得很尴尬。从那以后,这一点变成了需求——要对用户有反馈。搜索网上开源POC框架时,选取了三个可以支持Go插件的框架,xray、goby和kunpeng,通过对比发现插件的类型主要有三种:Yaml、Go和Json类型:对比各种插件能否动态加载,发现不管是Yaml、Go还是Json写的插件,都有动态加载的方式实现:
Go插件
首先看一下Go插件的动态加载,通过搜索网上的资料,Golang在1.8版本之后提供了一个GoPlugins的插件机制,可以动态的加载so文件,实现插件化。本以为这样就可以解决Go插件动态加载了,然而自己还是太年轻,看到大家的友情提示,才发现这个东西不支持Windows。网上还有一种思路,是实现一个Go解释器。因为Golang不支持编译后动态加载插件的原因是因为它是编译性语言,对Go文件需要编译后才能运行。内置一个动态解析运行Go脚本的Go解释器,就能够在不使用其他语言的情况下,实现动态加载Go插件。然而理想很美好,现实很残酷,由于精力有限,没有继续深入研究。目前,Go插件的处理是借鉴kunpeng的加载方式,将Go插件在编译时利用interface机制动态注册:Go插件的编写符合kunpeng的编码规则,先自定义一个结构体:
Yaml插件
对于Yaml插件的处理,采用类似Xray的处理方式,也利用cel表达式进行解析,首先将Yaml反序列化到结构体:为了有更好的兼容性,将Yaml插件的语法表达为类似Xray的格式:set参数保存全局变量,通过cel表达式解析后,定义一个map来对这些变量进行保存:在expression字段中有一个response结构体,但是在cel中是不能直接使用golang的struct的,需要用proto来做一个转换:通过protoc-I . --go_out=. http.proto生成Go文件:如果设置了search规则对返回的结果进行正则匹配:最后说一下给项目起的名字。给项目起名是个问题,还专门查了一下山海经,发现上古神兽、神器都被各大厂商取了一个遍,实在没想到什么了,索性暂定为taiji,希望它有无限的可能,也欢迎各位大佬交流使用。
https://github.com/sulab999/Taichi
该工具仅用于安全自查检测。由于传播、利用此工具所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。作者拥有对此工具的修改和解释权。未经网络安全部门及相关部门允许,请勿善自使用本工具进行任何攻击活动,请勿以任何方式将其用于商业目的。
读完有话想说?点击留言按钮,让上万读者听到你的声音!
免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。
查看原文