-
Notifications
You must be signed in to change notification settings - Fork 65
Cube的由来
第一次有这个想法的时候,是有一次在不出网的时候做内网测试,需要爆破内网的ssh等服务,用的是F-Scrack,这个工具很好用,但是用python去爆破mssql就有点蛋疼,那时候第一次冒出来这个想法,如果用go实现一遍该多好。现在cube已经完成了cube crack -x mssql -s <ip>
第二次是用fscan对爆破出来的ssh做利用,我看了半天选项没找到可以直接ssh执行命令的地方,只有批量执行,并且不能指定命令。这时候我在想如果我可以单独指定插件,单独指定命令多好。现在cube已经完成了:cube sqlcmd -x ssh -l root -p root -e "whoami"
第三次是公司内网测试一个自定义堡垒机ssh登录,因为和传统的SSH协议不一样,所以需要另外写ssh爆破脚步,这个时候第一次接触go语言和x-crack,我寻思x-crack好像可以改成脚本小子的工具,虽然netxfly师傅在写的时候已经尽力避免成为脚本小子的工具。
然后直接下手干了,第一个版本代码贼丑,我也不知道go的基本语法是什么鬼,就按照x-crack来抄,比如mysql的爆破我就写成了死亡callback:
db, err := sql.Open("mysql", dataSourceName)
if err == nil {
err = db.Ping()
if err == nil {
rows, err := db.Query("select @@version, @@version_compile_os, @@version_compile_machine, @@secure_file_priv;")
if err == nil {
var s string
cols, _ := rows.Columns()
for rows.Next() {
err := rows.Scan(&cols[0], &cols[1], &cols[2], &cols[3])
if err != nil {
fmt.Println(err)
}
s = s + fmt.Sprintf("OS=%s Version=%s Arch=%s File_Priv=%s\t", strings.Split(cols[1], "-")[0], cols[0], cols[2], cols[3])
}
幸好x-crack的README.md写的很详细,简直是手把手教你写代码,第一个版本就是这么抄出来的,我做的就是把x-crack转变成脚本小子的工具。这个版本的工具用一句话形容就是又不是不能用.jpg。
期间我集合了NTLM的扫描到里面去,最开始项目名字叫cube,因为我想写到后面加一个Magic,那就是魔方啦,因为每个插件都可以单独挑出来用,也可以随意组合。爆破的时候用户密码也可以随意组合。
第一个版本出来之后获得了100个star,大概是因为我集合了NTLM扫描的原因。NTLM探测是我硬着头皮用wireshark一步步分析的,当我想抄的时候没在github找到能抄的,只找到了iv4n师傅的文章。
白天晚上都在肝,幸好不是太难给我肝出来了。这是第一个版本,他是能用,但是远远不符合预期,因为运行的参数太乱,代码也没有自己的东西,我打算用一个月的时间重构下,最后花了差不多两个月。
又不是不能用当然是对的,但是在各种各样优秀的工具里面,用起来给人的感觉都是很舒服的,所以我也想做一个看起来稍微好用点的工具,它是可以提升自己的必要通道。现在这个工具已经完成了我对他的幻想,比如插件化开发、参数清晰明了随意定制、输出结构到excel,虽然功能上也就局限在爆破和扫描这两块。