打造一款基于Golang的高交互渗透测试框架(下) | 技术精选0134
这是当初有这想法的时候,大佬们问得最多的问题。其实对我个人而言,只是想学习一下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
https://github.com/c-bata/go-prompt
https://github.com/hrvngit/gobuster
https://github.com/jjf012/gopoc
https://github.com/opensec-cn/kunpeng
该工具仅用于安全自查检测。由于传播、利用此工具所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。
作者拥有对此工具的修改和解释权。未经网络安全部门及相关部门允许,请勿善自使用本工具进行任何攻击活动,请勿以任何方式将其用于商业目的。
本文作者:酒仙桥六号部队
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/180701.html