干货 | WebShell渗透小技巧

admin 2023年7月21日01:19:49评论274 views字数 1932阅读6分26秒阅读模式

前言

哥斯拉WebShell管理工具里的ShellCodeLoader模块中的shellcode加载以及pe加载这两个功能还是挺实用的,但好像很多人都没用过或者注意到,也有一定免杀效果,比如可以直接反弹cs,msf上线,直接加载fscan开炮!然后最近也没啥时间还是忙里偷闲,就简单分析一下然后理解一下这个功能的使用吧,这里的shell是java的,所以分析的时候就跟着java这走了,文最后有详细的用法教程。

干货 | WebShell渗透小技巧

干货 | WebShell渗透小技巧

代码分析

Shellcode加载
loadButtonClick对应模块中的Load按钮,代码中当if(this.load)为true会将loadState的状态设置为true,runButtonClick就是对应Run按钮了,Run的时候就会判断loadState状态,但是可以看到Run按钮对应的代码实现也调用了Load方法,所以其实可以不Load直接Run就完了,然后就是获取你输入的shellcode并通过HexToByte转换,代入runShellcode,所以输入shellcode的时候需要把shellcode转成Hex,接下来就主要看看Load函数与runShellcode函数代码吧。

干货 | WebShell渗透小技巧

Load函数:

这里load()方法调用了this.loadJar(jar),加载了GodzillaJna.jar。这样做是为了让ShellcodeLoader.classs 能够调用 jna.sun.jna.platform.godzilla.AsmcodeLoad 类中的方法,因为该类位于 GodzillaJna.jar 这个 JAR 包中,然后,load() 方法将加载ShellcodeLoader.classs的内容,并通过this.payload.include("plugin.ShellcodeLoader", data) 方法,将 ShellcodeLoader.classs 的内容传递给目标服务器。

干货 | WebShell渗透小技巧

runShellcode函数:

runShellcode通过调用evalFunc方法与服务器进行通信,并将参数传递给服务器。根据是否传入excuteFile参数来决定执行不同的任务。最终,runShellcode方法获取服务器返回的结果,实现了向服务器发送请求调用ShellcodeLoader run方法获取响应的功能。

干货 | WebShell渗透小技巧

干货 | WebShell渗透小技巧

干货 | WebShell渗透小技巧

ShellcodeLoader.classs run,获取传入的参数,判断有没有传excuteFile来决定走哪个分支最后调用loadAsBin开炮。

干货 | WebShell渗透小技巧

jna.sun.jna.platform.godzilla.AsmcodeLoad,可以看到是通过CreateRemoteThread运行的。

干货 | WebShell渗透小技巧

Pe加载

loadButtonClick对应模块中的LoadPe按钮了,重点关注runPe的第一个参数,第二个参数,command就是对应我们要运行程序的参数,peContent对应就是我们程序的字节数组,然后默认是注入C:\Windows\System32\rundll32.exe的。

干货 | WebShell渗透小技巧

干货 | WebShell渗透小技巧

runPe 方法的调用了 PeLoader.peToShellcode 来转换 PE 文件为 Shellcode,并且在转换成功后调用 runShellcode 方法来运行该 Shellcode。

干货 | WebShell渗透小技巧

peToShellcode 方法将 PE 文件转换为 Shellcode,pe相关处理调用了pecoff4j这个库,首先解析传入的 PE 文件内容,获取其结构信息,然后根据结构信息构建一个新的字节数组 _peBuffer,用于存放转换后的 Shellcode。然后,将 PE 文件的节数据填充到 _peBuffer 中,根据节的 RVA 进行填充,同时确保 Shellcode 包含正确的 PE 头信息。在转换过程中,还会检查 PE 文件的数据目录中是否包含必要的信息,如基址重定位表和 .NET COM 描述符,并记录警告信息。最后,根据 PE 文件是 32 位还是 64 位,选择对应的 stub 文件,将其内容插入到新的字节数组 newExeBuffer 中,构建 Shellcode 的跳转代码并插入到 newExeBuffer 的开头。最终返回经过转换后的 Shellcode,即可以在目标服务器上执行的 PE 文件内容,具体可以阅读donut与pe2shellcode项目。

干货 | WebShell渗透小技巧

然后剩下的runshellcode就跟上面的一样了。

干货 | WebShell渗透小技巧

干货 | WebShell渗透小技巧

干货 | WebShell渗透小技巧

用法

把x去掉,填好注入进程以及shellcode Run就行了。

干货 | WebShell渗透小技巧

干货 | WebShell渗透小技巧

填好参数,LoadPe选好加载的PE文件就行了。

干货 | WebShell渗透小技巧

总结

分析的很粗,忙里偷闲,想详细了解的可以去看看源码以及相关的一些项目,市面上已经有很多优秀的项目了,可以多看看多学习,在人家的基础上搞点好玩的有意思的

原文始发于微信公众号(渗透安全团队):干货 | WebShell渗透小技巧

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年7月21日01:19:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   干货 | WebShell渗透小技巧https://cn-sec.com/archives/1895297.html

发表评论

匿名网友 填写信息