由于哥斯拉流传过于广泛,以至于实际业务中很多设备会对其进行查杀,主要手段一是查杀webshell,二是针对流量特征进行分析。
这篇先大致讲下如何对自己shell的流量进行保护。
先看下原版哥斯拉的流量特征有什么
大致了解下过程,在点击链接时候会发送三个包,第一个强特征发送自定义的函数列表给服务端(后期内部命令执行,文件查看等功能都是在此时把接口传入服务端的),返回值获得session
第二个验活。没什么特殊
第三个返回对方服务器的配置等信息,就是每次连接时的基础信息那部分
上面数据包包括返回结果,从算法与长度上都非常容易被检测,稍加探测即可发现是恶意攻击流量。
为了规避这些检查,需要对请求与返回包进行自定义,对webshell动态加载。
自定义profile
增加profile管理功能, 最基础的增删改查。
具体如何实现ui可通过swing进行编写,就不过多阐述
shellsetting
在添加完ui后需进入shellsetting添加Profile下拉框等组件,方便使用
` ``private JComboBox<String> c2ProfileComboBox;`` `
绑定布局
`GBC gbcLC2Profile = (new GBC(0, 13)).setInsets(5, -40, 0, 0);``GBC gbcC2Profile = (new GBC(1, 13, 3, 1)).setInsets(5, 20, 0, 0);`
添加控件
`this.basicsPanel.add(this.c2ProfileLabel, gbcLC2Profile);``this.basicsPanel.add(this.c2ProfileComboBox, gbcC2Profile);`
添加事件
这些做完之后就能收获一个完整的profile功能
但是仅仅这样是不够的,现在我们只能创建profile,怎么把他应用到数据包中呢?
shellentity
===================
为了使我们创建的profile能应用进数据包中,我们需要修改哥斯拉存储shell实体的部分代码
添加新字段并编写对应代码以存储profile信息
信息存储了还远远不够需要有地方能够处理。
c2channel
=================
c2channel算是哥斯拉中的核心,负责处理载荷与发送c2请求,所以最核心的地方我们需要在发送数据包前处理有关profile的代码
在c2channel中我们需要处理好从shellentity获取到的profile值,初始化好模板后,匹配profile规则对数据包进行梳理重构。在一切进行完成后就可通过sendRequest发送请求。
在完成到这一步时基本你已经学会了怎么控制哥斯拉发送的数据包格式等操作,具体实现代码就自己想把,抄作业没啥意思。
在修改完profile后还可以顺手实现全随机化生成数据包功能,只需要在处理数据包前添加链表通过随机值拼接完整数据包即可。玩法很多还需深入挖掘。
sendRequest大致代码: