蹉跎工具箱开发笔记
前言
南京疫情,哪儿也去不了,正好也闲下来了,不如写点小工具,求索推出之后得到了一些认同,干脆这次就把其中的一些功能拆出来做一个客户端版本,正好最近开了go的GUI开发。
主要针对的场景是一些渗透过程中的辅助手段,不要打开太多额外的工具就可以满足部分需求,主要还是提高效率,节约时间。
本来想做成teamserver模式的,但是一想,做成teamserver那不是重复造求索和GoRat的轮子嘛,罢了罢了,就本地模式吧。
产品构思
产品构思很简单,四个大模块
1. 常用指令
即快捷笔记,记录一些日常用的命令,语句等
可以理解成一个渗透的snippet,好比求索中的笔记功能,但是去掉了分类功能,只有顶级目录,这样更容易抓住重点,而不是在这里记录太多的过程中的数据。
2. 聊天协同
其实我一直想给求索加上聊天功能,但是实在是懒,而且需要考虑的太多,也没那么多连续的时间。
先在蹉跎上实现了该功能,其实也比较简单,就是蹉跎支持以服务端模式或客户端模式启动,这样比如在打一个CTF或其他形式的线下比赛,但是禁止了外网通讯,这样在不依赖其他软件的情况下可以实现一个加密聊天室的功能,也支持文件/图片的传输分享,还算比较方便,甚至你也可以假设在公网上,服务端不存储任何聊天记录,只做一个转发的作用。
3. 信息查询
基本也是求索中的必备模块.
这里面集了4个小模块,分别是 目录扫描、子域爆破、端口扫描、api查询。
目录和端口没啥好说的,子域名爆破这块参考了ksubdomain的思路,可以做到高并发,但是实际用wifi或家庭带宽的话效果不是很好,而且也需要system、root权限才可以执行。
api接口这块只保留了佛法和securitytrails的。
4. 编码/加密
这个是新增的一个新模块。
这部分实际还没做完,目前就是常用的加密、编码,如base64,urlencode,md5,sha1等,额外把http://jackson-t.ca/runtime-exec-payloads.html的powershell encode和bash encode加了进来。
后面其实还要把shellcode生成,shellcode loader生成的功能加进来
心得体会
规划
功能上就这么多,理论上我应该还会把GoRat的部分功能在集成进来,比如一个简易的C/S的Rat,在加上端口映射、代理等功能。
理想情况下是做一个AllInOne的工具箱,其实也没什么难点,无非就是把常用的东西集成进去罢了,更多的是一些业务逻辑上的开发,没有啥挑战,所以可能永远就是理想情况下了,哈哈。
UI部分
UI部分采用的Wails.App实现的,配合Vue写的界面,这个框架总的来说写一些简单的程序没问题,之前也用过fyne相比之前还是wails更快一点,fyne写的太要命了,完全需要自己去用他的语法描述界面,特别痛苦。
Wails采用的类似Electron的模式,通过webview调用打包好的html资源,然后通过ws做rpc调用和go的方法进行bind,达到在js里面调用native的方法,也支持参数的传递,而且不限制参数类型,string,int,甚至json也可以自动序列化,这点还是不错的。
相比electron他打包出来的体积只有10M左右,因为wails并不会内置一个浏览器进去,而是调用系统自带的浏览器,这点的话因为我开发用的chrome,实际跑起来竟然用的是safari,有一些兼容性问题踩了一些坑。
功能部分
没啥太多难的地方,Vue我也没怎么写过,也是边学边做,主要是卡在调css之类的地方,虽然用的element-ui,但是还是有一些细节需要调整的,前后写了2天,也学到不少东西。
大部分功能基本都是求索里面的模块,正好之前也拆出来写了一个go module,基本做一些调用就行了,唯一下功夫的地方就是在子域爆破这块,
实际是调用libpcap发原生的dns查询包,然后开俩个gorountine,一个负责发,一个负责收,收的这块就是用libpcap的过滤器拦截返回包进行解析就行了,发这块需要防止丢包,实际上是需要一个重试机制,简单的理解就是如果没有应答的请求就一直重发,然后带一个限流器做限速。