打造一款基于Golang的高交互渗透测试框架(下) | 技术精选0134
2022-5-11 18:0:0 Author: mp.weixin.qq.com(查看原文) 阅读量:36 收藏

本文约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另类利用方式

长按下方图片即可关注
点击下方阅读原文,加入社群,读者作者无障碍交流
读完有话想说?点击留言按钮,让上万读者听到你的声音!

文章来源: http://mp.weixin.qq.com/s?__biz=MzAwMzYxNzc1OA==&mid=2247499692&idx=1&sn=707adc365519d25821ee975b01bfeabb&chksm=9b3ad91dac4d500ba5b92e96887205437ac317e84e0b37034df6e02b0f747e9abca978ffe4e2#rd
如有侵权请联系:admin#unsafe.sh