打造一款基于Golang的高交互渗透测试框架(下) | 技术精选0134
2022-6-13 11:30:12 Author: www.secpulse.com(查看原文) 阅读量:35 收藏

本文约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-prompt
https://github.com/hrvngit/gobuster
https://github.com/jjf012/gopoc
https://github.com/opensec-cn/kunpeng
4
免责声明
该工具仅用于安全自查检测。由于传播、利用此工具所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。
作者拥有对此工具的修改和解释权。未经网络安全部门及相关部门允许,请勿善自使用本工具进行任何攻击活动,请勿以任何方式将其用于商业目的。
- END -

本文作者:酒仙桥六号部队

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/180701.html

酒仙桥六号部队

文章数:88 积分: 865

提前看好文,搜索-微信公众号:酒仙桥六号部队

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号


文章来源: https://www.secpulse.com/archives/180701.html
如有侵权请联系:admin#unsafe.sh