阿里云第三届伏魔挑战赛wp

admin 2024年4月10日09:34:09评论17 views字数 2550阅读8分30秒阅读模式
阿里云第三届伏魔挑战赛wp
一位苦于信息安全的萌新小白帽
本实验仅用于信息防御教学,切勿用于它用途
公众号:XG小刚
2023年忙里偷闲学习了JAVA开发和JSP语言,并尝试写了一个webshell免杀小工具《XG_NATI》(https://github.com/xiaogang000/XG_NTAI),刚好年底阿里云开始了第三届伏魔挑战赛,就想着重参加一下,感受一下最新引擎的魅力。由于之前两届没参加过,测试过程中也遇到很多的坑、核心重复、复现失败、黑盒测试非预期结果、和管理人员battle等等。
第三届主要是参加的WebShell赛道,总共提交了11和报告,JSP通过了3个、PHP通过了3个,最终排名第六。(已经是超过我预期了,前几名大佬是真狠啊)    
阿里云第三届伏魔挑战赛wp
阿里云第三届伏魔挑战赛wp
复盘
由于伏魔活动要求结束三个月后才能公开相关技术文章,等我写这篇笔记时其实已经忘的差不多了。
1、不在乎后缀、只在乎内容
伏魔这次活动,可以检测三种语言的webshell:jsp、php、asp。但是在测试过程中,发现并没有根据相应的语言进行分类上传,引擎不管你上传文件后缀是什么,它会自动根据文件内容判断你属于哪种语言。所以我们就不用在乎文件后缀的检测,就算上传个txt文件里面有一句话也是一样查杀。
2、免杀检测有多个引擎
伏魔引擎是多个检测引擎层层递进的,每个引擎检测的功能是不一样的,据管理人员battle了解的引擎就有:动态沙箱检测引擎、污点检测引擎、AI识别引擎。根据我判断动态沙箱引擎可能根据不同的语言使用不同的沙箱,污点检测则不清楚了。
他们检测的过程就好比,我上传一个文件,第一个引擎检测属于什么语言,然后传递给下一个引擎进行内容处理,然后再传递给动态沙箱引擎进行检测,这里如果检测出来则直接爆毒,否则继续传递给下一个引擎进行检测,层层检测,最后传递给污点检测引擎(这是一个兜底的引擎,走到这一步就算结束了),至于后面还有啥引擎我就不清楚了。
在测试过程中应该能感受出来,有的样本上传后秒出结果,有的则是等好一阵才出结果,有的则等一阵死机了。。。。
3、动态沙箱引擎
这个引擎应该很好理解,就是把你webshell运行一下,能正常执行传递参数就会查杀。想绕过也是手法挺多的,if、switch等分支,一些运行报错会阻断动态沙箱的运行,版本异常导致的解析错误等等。
PHP沙箱相对好绕过,伏魔引擎只支持到PHP7,一些PHP8的新语法功能则是秒杀(虽然不收)。针对PHP7版本使用一些7新增的语法、强制类型转换、标量类型声明、Generator Return Expressions等等,造成报错打断运行也是可以绕过的。PHP全版本使用一些函数语法导致Fatal error也是可以绕的。
这里重点说一下我理解的JSP沙箱,JSP解析想必大家都知道,tomcat将jsp文件解析为.java文件,然后java将.java编译为.class文件。我在测试时发现,jsp沙箱重点检测.class文件,如果你的jsp文件无法正常编译到.class文件时,就会导致绕过。这次活动所通过的2个jsp样本,原理就是利用的tomcat8和10版本的差异,导致jsp无法编译为.class文件从而绕过,只能在特定tomcat版本才能正常解析运行。再就是jsp转为.class文件时的一些原理细节,限制jsp文件名、限制加载的类名等等,也可以导致编译异常绕过。(限制jsp文件名是因为上传沙箱后会将jsp重命名,利用这个特性实现的绕过)    
4、污点检测引擎
污点检测这东西比较有点意思了,说他厉害吧确实很厉害,兜底的引擎。具体原理吧可以去伏魔活动的说明,说的挺详细的。
绕污点检测的手法,在之前学习一下大牛的文章也了解了很多,像是通过本地写文件再读取打断污点传递、php缓存区存入取出打断污点传递、再就是使用一些php特定环境的函数打断污点传递。相对于动态沙箱引擎,它其实并没有真正的将代码从头到尾的运行一遍,根据和管理员battle,污点检测其实是实现了一些函数,他会去自动识别你的代码里面存在的函数和运行逻辑,然后识别参数从哪获取,又去到何方,最终是否能到高危函数。
其实在测试时候也能感受出来,比如我上传一个故意写错无法运行的php木马,在沙箱引擎肯定是通过的,但是在污点检测方面还是检测到了,这就是他的魅力。他会识别你的代码逻辑,以自己的方式将你的代码正常运行,然后终结你。
就因为污点引擎是实现的一些函数,并且不是原生函数,这就导致某些冷门函数并没有实现、有些函数和原生函数有差异、有些常量也并没有实现。
上面提到的本地写文件再获取,可能就是未完全实现文件操作类函数从而导致打断了参数传递过程
第三期通过的1个PHP样本也是AES解密函数并不是原生函数,导致解密出来的代码并不是真实代码
第三期还有一个样本则是未实现php7新增的语法,从而打断的污点传递。
再一个样本则是PHP的某些常量并未实现,未实现的常量在污点检测引擎中默认值为0,使用这些常量当key进行加解密时则会导致结果不同。   
5、核心绕过点
由于咱们测试算是黑盒测试,在确认核心绕过点时可能和后面开发存在不同。比如我提交一个报告,我认为的核心绕过点是通过某某手段绕沙箱运行,然而开发可能给的答复是污点检测引擎绕过重复或通过。通过就不多说了拿钱走人,重复咱可得battle一下。
咱们提交一个样本,如果想完全通过检测,其实是使用了某一个手段绕过沙箱检测,再用某一个手段绕其他引擎,再再用某一个手段绕污点检测。这几种手段都是不能和其他人重复的。好比我有10种绕沙箱手段,但是只使用了一种绕污点检测的手段,那我能通过的报告可能只有1个(具体还是要和管理人员沟通的)。
就是这种原因,导致活动后期提交报告重复率超高,可能重复的并不是别人,而是重复的自己提交的第一个报告。
所以提交报告审核后,重复了就去找管理员确认重复的具体原因,然后自己去判断是沙箱重复还是污点重复,哪个重复换哪个。
上面就是本次挑战赛之后的心得,文笔粗糙还是需要自己研究摸索,如果有其他大佬分享细节记得分享一下我。
后续会尝试将此次的样本优化后补充到《XG_NATI》工具中,每个样本的详细代码和原理文章则会放到免杀星球里。   

原文始发于微信公众号(XG小刚):阿里云第三届伏魔挑战赛wp

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月10日09:34:09
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   阿里云第三届伏魔挑战赛wphttps://cn-sec.com/archives/2643511.html

发表评论

匿名网友 填写信息