渗透测试web安全 - webshell 免杀 绕过waf总结

在做渗透测试的过程中经常会遇到waf的阻拦,针对waf绕过webshell篇总结如下,肯定有遗漏,之后学习之后再继续补充。

 

小型网站常见的waf有:

D盾

 一句话免疫,主动后门拦截,SESSION保护,防WEB嗅探,防CC,防篡改,注入防御,防XSS,防提权,上传防御,未知0day防御,异 形脚本防御等等。 防止黑客入侵和提权,让服务器更安全。
 

云锁

云上的安全边界越来越模糊,依靠传统的硬件堆叠的安全防御方式已经很难解决云上的安全问题。 CC、SQL注入、XSS跨站等黑客攻击以及后门、webshell等恶意代码时刻威胁企业的信息安全。(主要解决以上问题)

 

安全狗

提供木马查杀、漏洞防御、非法请求拦截等功能,致力于保护网站和服务器的安全。它具有应用防护WEB应用风险、拦截各类SQL注入、XSS攻击防御、0Day攻击防御、特定资源保护、网络木马文件、恶意畸形文件、0Day漏洞、黑链等特性。

 

护卫神

以分离权限为基础,通过一系列独特技术手段,保障网站不被入侵的安全性防护软件。它适用于各类ASP和PHP编写的程序,在目前网站日益猖狂的挂马、入侵情况下,护卫神可以彻底解决用户所面临的众多安全难题,为网络安全保驾护航。 它具有实时木马程序查杀、网站挂马拦截、文件篡改保护、PHP拒绝服务攻击防御、SQL防御、XSS跨站攻击防御、入侵拦截防护、远程桌面安全保护等特性。

 

查杀技术

目前主流的木马查杀方法有:静态检查、动态检测、日志检查三种方式。
a、静态检查通过匹配特征码、危险函数和木马特征值来查杀木马程序,它的特点是快速方便,对已知的木马程序查找准确率较高,它的缺点是误报率较高,无法查找0Day型的木马程序,而且容易被绕过。
b、动态检测通过木马程序的动态特征来检测,当木马程序被上传到服务器上后,攻击者总会去执行它,当木马程序被执行时所表现出来的特征就是所谓的动态特征。
c、日志检测则主要通过日志分析检测技术来实现,它主要通过分析大量的日志文件并建立请求模型来检测出异常文件。它的优点为当网站上的访问量级达到一致值时,这种检测方法具有比较大参考性价值。它的缺点则是存在一定误报率,对于大量的日志文件,检测工具的处理能力和效率都会变的比较低。

 

免杀技巧

木马程序可以使用多种编程语言来设计,不同的编程语言有不同特性以及提供的系统函数,所以在实现免杀时可以首先考虑灵活运用语言的特性来实现免杀,其次可以根据查杀软件的查杀规则来重构木马程序,躲避木马查杀工具的查杀,同时可以考虑密码学中的加密解密对源木马程序进行加密解密处理,以此来躲避木马查杀工具的检查。木马免杀技术的核心在于“灵活多变”。

 

以下正式介绍免杀技巧,编写的webshell上述waf测试均免杀,但是不保证现在还能用,学习思路编写自己的shell,其余waf绕过自行测试编写。

 

引用免杀

因为D盾、安全狗、护卫神会对关键字eval中的执行变量进行溯源,当追溯到要执行的变量为一个通过POST接收的可疑数据时就会显示可疑木马,为了躲避这种溯源方式,可以通过多次使用&来引用前一个变量,通过一连串的赋值操作最后将要执行的内容与反引号拼接后传入eval实现免杀,具体实现如下所示:

可变变量

可变变量是PHP中一种较为独特的变量,它可以动态的改变一个变量的名称,这种特性可以用于木马免杀中。首先可以定义一个变量$do并为其赋值为todo,之后将木马内容赋值给可变变量$$do,最后在调用eval函数执行时将执行对象定义为$todo即可,具体实现如下所示:

二维数组

在免杀时我们可以考虑见要执行的一句话木马程序放到一维数组中执行达到绕过的目的,例如:

 二维数组变异:

数组交集

在做免杀研究是,发现我们可以通过数组的交集来获得我们想要的值,之后将其利用到木马程序的构造当中,例如:

回调函数

array_map() 回调函数会返回用户自定义函数作用后的数组。array_map() 函数具体使用方法和参数说明如下:

语法

array_map(myfunction,array1,array2,array3...)
参数描述
myfunction必需。用户自定义函数的名称,或者是 null。
array1必需。规定数组。
array2可选。规定数组。
array3可选。规定数组。

技术细节

返回值:返回包含 array1 的值的数组,在向每个值应用自定义函数后。
PHP 版本:4.0.6+

通过回调函数编写webshell,可以先定义一个函数test,其中第一个参数$a用作回调函数名称,第二个参数$b用作回调函数的参数,之后将其传递给array_map()函数进行执行,之后我们在外部调用test函数,同时传入回调函数名称和回调函数的参数:

免杀—大马免杀

加密&混淆

在免杀处理的众多方法中,加密免杀算是一种常用的技巧,常见的加密方式有rot13、base64加解密等。具体例子不展示。自行测试。

Create_function免杀

在免杀的过程中,发现了一个PHP的内置函数Create_function,它主要用于创建一个函数,这里可以使用它来进行免杀,但是由于D盾、安全狗有关键词查杀所以这里需要对Create_function进行一个拆分处理,同时需要加入混淆处理,最后木马程序重构结果如下所示:

可变变量

可变变量是PHP中一种较为独特的变量,它可以动态的改变一个变量的名称,这种特性可以用于木马免杀中。首先可以定义一个变量$do并为其赋值为todo,之后将加密处理过后的木马内容赋值给可变变量$$do,最后在调用eval函数执行时将执行对象定义为$todo即可,具体实现如下所示:

 

总结

免杀与查杀在一次又一次的攻防较量中不断的进步,而我们在使用现有的webshell时也需要留意该webshell的可信程度,有些webshell留有后门,至少笔者分析的N多个大马时发现加密的木马文件几乎都有相关的后门。所以在免杀研究时还是自己尝试编写木马程序为好,一些大马文件的功能不外乎由编程语言的功能函数来实现外加各种加密解密、编码/解码方法等。当然,随着木马查杀库的更新我们也需要研究更多的木马查杀方法与木马查杀机制的缺陷,促进攻防两端的进步。

相关推荐
©️2020 CSDN 皮肤主题: 成长之路 设计师:Amelia_0503 返回首页