📰 最近消息
模块踩踏主要是将shellcode注入到合法DLL的.text部分。这样我们就不需要去申请内存了,之前我们是通过VirtualAlloc申请私有内存,将shellcode写入到其中。.text部分是通常包含了可执行的代码,那么攻击者就可以覆盖其这部分代码,将合法的代码替换为shellcode。那么首先肯定是需要去加载某个DLL文件的,一般我们会使用LoadLibrary函数去动态加载DLL,但是这会出现一个问题,通过LoadLibrary函数去动态加载DLL会受到控制流(CFG)的限制。CFG会组织执行未经过签名的和验证的代码。
首先我们来看看代码的真实执行过程(懒了直接偷演讲时的PPT动画)首先通过JSR跳转到label1,并向栈中压入下一条指令的地址之后我们手动插入了一个POP指令的调用,RA2被弹出,因此最终RET指令返回执行时会执行Real Code Here那么我们接下来再看看IDEA的解析处理,通过两次JSR跳转压入两条指令返回地址由于并没有对POP做处理,因此最终返回执行RA2所指向的Fake Code Here因此我们便可以利用IDEA解析与真实执行的差异性构造出这样的混淆例子,将真实代码隐藏,虚假代码做展示达到一个很好的混淆效果(IDEA所有版本均可)
MemShellParty 自带很多 docker 环境,可直接测试,启动 integration-test/docker-compose/tomcat/docker-compose-5-jdk6.yaml,(war 包就是项目里面的靶场包,编译命令为 ./gradlew :vul:vul-webapp:war)开启远程调试,在靶场的 TestServlet.java 打断点,发请求我在控制台里面翻了好久,突然想起来大佬说用 c0ny1/java-object-searcher,不过我还是决定另辟蹊径,使用 HeapDump 配合 JProfiler。
这样打进去之后就能够回显了。利用ProcessImpl的执行命令只需获取到pid然后初始化命令执行结果,将本地命令执行的输出流转换为程序执行结果的输出流最后再吧获取本地执行结果的输入流给输出来即可。
— 让搜索更高效 · 让信息更有价值 —🔍帮你找到有趣的群组、频道、视频、音乐、电影、新闻📢: @CJYQNEWS | 🤖: @CJYQ👇点击下方按钮,进行搜索👇
— 让搜索更高效 · 让信息更有价值 —🔍帮你找到有趣的群组、频道、视频、音乐、电影、新闻📢: @CJYQNEWS | 🤖: @CJYQ👇点击下方按钮,进行搜索👇
— 让搜索更高效 · 让信息更有价值 —🔍帮你找到有趣的群组、频道、视频、音乐、电影、新闻📢: @CJYQNEWS | 🤖: @CJYQ👇点击下方按钮,进行搜索👇
— 让搜索更高效 · 让信息更有价值 —🔍帮你找到有趣的群组、频道、视频、音乐、电影、新闻📢: @CJYQNEWS | 🤖: @CJYQ👇点击下方按钮,进行搜索👇
— 让搜索更高效 · 让信息更有价值 —🔍帮你找到有趣的群组、频道、视频、音乐、电影、新闻📢: @CJYQNEWS | 🤖: @CJYQ👇点击下方按钮,进行搜索👇
— 让搜索更高效 · 让信息更有价值 —🔍帮你找到有趣的群组、频道、视频、音乐、电影、新闻📢: @CJYQNEWS | 🤖: @CJYQ👇点击下方按钮,进行搜索👇