打造一款基于Golang的高交互渗透测试框架(下) | 技术精选0134


本文约1900字,阅读约需7分钟。


“为什么要自己写?”

“自己写的工具有大公司写的成熟工具好用吗?”

这是当初有这想法的时候,大佬们问得最多的问题。其实对我个人而言,只是想学习一下Go语言,同时为开源社区做做贡献而已。


然而,在日常渗透测试时,时常发现有些工具用着不很顺手——参数太多记不住、想用的功能还要收费、明明存在问题的地方用工具测试居然报错、不支持跨平台......

这些不方便的地方又增强了自己写一个工具的想法。然而,在随后边学边写的过程中,发现自己写了个BUG出来。


上一期,我们讲到了这个BUG的CLI和基础扫描模块。这一期,我们继续讲一下它的弱口令爆破模块以及POC模块,当然,还有项目的开源地址


1

弱口令爆破模块

代码结构:


目前支持"RDP","JAVADEBUG","REDIS","FTP", "SNMP", "POSTGRESQL","SSH","MONGO","SMB","MSSQL","MYSQL","ELASTICSEARCH"这些协议的弱口令,实现方式大体相同,以FTP服务进行举例。

首先会从数据库中获取将要扫描的IP:


读取用户名字典(user.txt)和密码字典(pass.txt),随后进行爆破:


一开始是直接执行,扫描完成后输出结果,后来同事看到我敲完命令后没有动静,以为是卡死了,搞得很尴尬。从那以后,这一点变成了需求——要对用户有反馈。

那就增加个进度条吧:


2

POC模块

代码结构:


框架对比:

搜索网上开源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的编码规则,先自定义一个结构体:


利用init函数进行插件注册,在编译时自动加载:


设置插件基础信息,并将插件信息存入数据库:


定义返回结果的函数:


利用Check函数执行POC代码:


Yaml插件


对于Yaml插件的处理,采用类似Xray的处理方式,也利用cel表达式进行解析,首先将Yaml反序列化到结构体:


为了有更好的兼容性,将Yaml插件的语法表达为类似Xray的格式:


加载Yaml插件:


set参数保存全局变量,通过cel表达式解析后,定义一个map来对这些变量进行保存:


在expression字段中有一个response结构体,但是在cel中是不能直接使用golang的struct的,需要用proto来做一个转换:


通过protoc-I . --go_out=. http.proto生成Go文件:


检查rule中设置的参数:


对url进行访问,执行POC:


如果设置了search规则对返回的结果进行正则匹配:


对执行POC后的结果进行判断,是否存在风险:


完成后的效果:

以CVE-2022-22965为例进行演示:


3

项目地址

最后说一下给项目起的名字。给项目起名是个问题,还专门查了一下山海经,发现上古神兽、神器都被各大厂商取了一个遍,实在没想到什么了,索性暂定为taiji,希望它有无限的可能,也欢迎各位大佬交流使用。


项目地址:

https://github.com/sulab999/Taichi

参考资料:

https://github.com/c-bata/go-prompthttps://github.com/hrvngit/gobusterhttps://github.com/jjf012/gopochttps://github.com/opensec-cn/kunpeng


4

免责声明

该工具仅用于安全自查检测。由于传播、利用此工具所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。

作者拥有对此工具的修改和解释权。未经网络安全部门及相关部门允许,请勿善自使用本工具进行任何攻击活动,请勿以任何方式将其用于商业目的。


- END -


往期推荐

记一次卑微的渗透测试

pwn入门之栈入门

MYSQL另类利用方式

长按下方图片即可关注

点击下方阅读原文,加入社群,读者作者无障碍交流
读完有话想说?点击留言按钮,让上万读者听到你的声音!
免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。查看原文

为您推荐