0x01 实现功能

  • 封装各类传输的数据头,PNG/AVI/JPEG
  • 实现自定义的webshell的连接

0x02 实现细节:

  • 数据传输过程中的修改方式,原版webshell不需要修改

为了我们后续实际使用方便,直接新建一个webshell连接类型,按照我们的需要,后续直接修改对应的类型即可

1. 首先我们复制原版jsp下的类,新建一个自定义的webshell类型,以diy_jsp为例:

image-20220414011155195

修改webshell各类功能在传输过程中的加密方法,你用到的所有功能都需要修改,意味着所有的类都需要修改下,具体修改DIY类型下所有的Encrypt()方法

(觉得麻烦的话,完全可以自定义一个Encrypt方法,后续所有的功能直接调用你新增的方法即可)

image-20220414013450656
  • 原版直接获取字节码,我们修改就将,新增数据拼接到原数据前后即可,以视频流的开头为例:(想添加什么头,自己定义即可)
前: UklGRmYKAQBBVkkgTElTVMAAAABoZHJsYXZpaDgAAAA1ggAAoDwAAAAAAAAQCAAAoQAAAAAAAAABAAAABw8AALgBAAB8AQ  新增bytep[]长度:72
image-20220414013302722
后: /9k=	   新增 byte[] 长度:2
image-20220414013408361
2. 修改Params.java的逻辑,使我们新创建的类型能够在实现功能时,调用到对应的类,直接复制原版的函数,新建一个,修改下路径/方法名即可
image-20220414011939249

3. 修改原有的加解密方法,我们只封装一个文件头测试,实际可以自定义加解密方法,以及webshell的实现流程

新增一个解密方法,大致逻辑不变,只修改我们在本地接class字节码的有效范围,原版直接解密获取到字节码,修改版我们需要去掉新增文件头的那部分数据,只取有效的哪部分即可:

  • 新增数据: 开头-byte[] 长度72 后部分 byte[] 长度 2
  • 新建解密方法,取的时候,定义好取的部分即可
  • 新增静态方法中的调用
image-20220414014227896
image-20220414014419293

4. 最后一步,修改UI下的方法,以及Utils下的插件调用功能

  • 新增连接选项
image-20220414014653736
  • 获取插件数据的方法,新增即可
image-20220414014809374
  • 运行Main方法,发现已经成功添加新类型,我们后续的传输就按照自定义的方式去进行了,

    实战发挥脑洞,修改加解密方法,修改参数获取方法,修改传输过程中方式等等....

image-20220414015143023
  • 数据传输
image-20220414020759617

0x03 实际使用

  1. 将所有数据进行混淆,修改加解密方法
  2. 修改为参数传递,不直接传输数据,改为各类参数传递,伪造为正常业务流量