Rust 从 0 到 1 (生命周期、返回值、错误处理)
Rust 从 0 到 1 (生命周期、返回值、错误处理)生命周期是 Rust 特有的,在 Rust 中函数和变量有其作用域,在一个函数中可以嵌套作用域,如:
123456fn main(){ let a = 0; // a { let b = 2; // b } // end b } // end a
对于生命周期其实就是引用的有效作用域,大多数情况下无需手动声明生命周期,编辑器可以进行自动推导,当然也有无法推导的情况
悬垂指针和生命周期生命周期的主要作用是避免悬垂引用,它会导致程序引用了不该引用的数据,如:
12345678910{ let r; { let x = 5; r = &x; } println!("r: {}", r);}
在这里首先是 let r 没有初始化,在其次是 r 引用了内部作用 ...
OpenMetadata 身份认证绕过漏洞与多个表达式注入漏洞复现
OpenMetadata 身份认证绕过漏洞与多个表达式注入漏洞复现0x01 简介OpenMetadata是一个用于数据发现、数据沿袭、数据质量、可观察性、治理和团队协作的一体化平台。它是发展最快的开源项目之一,拥有充满活力的社区,并被各行业垂直领域的众多公司采用。OpenMetadata 由基于开放元数据标准 API 的集中式元数据存储提供支持,支持各种数据服务的连接器,可实现端到端元数据管理,让您可以自由地释放数据资产的价值。
0x02 漏洞概述OpenMetadata 容易受到多个 SpEL 表达式注入和身份验证绕过的攻击,从而导致预身份验证远程代码执行。相关的漏洞编号如下:
CVE-2024-28253
CVE-2024-28254
CVE-2024-28845
CVE-2024-28848
CVE-2024-28255(Authentication Bypass)
0x03 影响版本OpenMetadata < 1.2.4
0x04 环境搭建本次复现用到的环境为了 OpenMetadata 1.2.2,可以 Github 下载 docker-compose.yml 一 ...
VxWorks 启动流程 & 溢出分析
VxWorks 启动流程分析以及溢出测试在前面的文章成功编译并启动了 VxWorks,这边篇文章将介绍 VxWorks 的启动流程,为了更好的研究启动流程我们使用 gdb 对 vxworks 进行调试。
1. 编译可调式的 vxworks首先新建 VSB 项目,配置如图 1-1 所示:
图 1-1 新建 BSP
下一步为 BSP 项目添加 DEBUG 配置选项,操作步骤 如下:
在 Project Explorer 视图中展开 BSP 项目
右键单击Source Build Configuration ,然后选择 Edit Source Build Configuration
搜索 debug 关键字,选择 Global Debug Flag 将 value 改为 y
最终效果如图1-2 所示:
图 1-2 配置 VSB debug
最后构建 VSB。构建完 VSB 之后创建 VIP,如图 1-3 所示:
图 1-3 新建 VIP
在 VIP 中需要配置 INCLUDE_DEBUG_AGENT 和 INCLUDE_DEBUG_AGENT_START,可以搜索 DEB ...
JumpServer 漏洞复现(CVE-2024-29201&CVE-2024-29202)
JumpServer 漏洞复现(CVE-2024-29201&CVE-2024-29202)0x01 简介JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统。
0x02 漏洞概述CVE-2024-29201 远程代码执行漏洞,该漏洞可绕过 JumpServer 的 Ansible 中的输入验证机制,在 Celery 容器中执行任意代码CVE-2024-29202 Jinin2 模板注入漏洞,该漏洞是有 JumpServer 的 Ansible 中存在 Jinja2 模板注入,在 Celery 容器中执行任意代码。值的注意的是:两个漏洞利用的条件都需要账号且至少有一个资产。
0x03 影响版本v3.0.0 <= JumpServer <= v3.10.6
0x04 环境搭建首先下载官方提供的脚本,下载后编辑 quick_start.sh,将脚本中的 VERSION 修改为存在漏洞版本,如:V3.10.6。如下图所示:
等待服务启动,启动完成后访问 http://ip/
JumpServer 默认账号密码为 adm ...
GitLab任意用户接管漏洞复现(CVE-2023-7028)
GitLab任意用户接管漏洞复现(CVE-2023-7028)0x01 简介GitLab 是一个基于 Git 版本控制系统的开源软件平台,用于软件开发和协作。它提供了代码仓库管理、问题跟踪、持续集成、代码审查等功能,旨在帮助团队高效地协作和管理软件开发项目。
0x02 漏洞概述CVE-2023-7028 GitLab 任意用户密码重置漏洞,攻击者可以利用忘记密码功能,构造恶意请求获取任意账号密码重置链接从而重置密码。因此漏洞的利用条件为:
任意用户的邮箱
邮件功能正常使用
总得来说利用条件还是有点难度的。
0x03 影响版本16.1 <= Gitlab CE/EE < 16.1.6
16.2 <= Gitlab CE/EE < 16.2.9
16.3 <= Gitlab CE/EE < 16.3.7
16.4 <= Gitlab CE/EE < 16.4.5
16.5 <= Gitlab CE/EE < 16.5.6
16. ...
CVE-2024-21893 Ivanti Connect Secure SSRF to RCE
CVE-2024-21893 Ivanti Connect Secure SSRF to RCE0x01 简介Ivanti Connect Secure 为远程和移动用户提供了一个无缝的、具有成本效益的SSL VPN 解决方案,使他们能随时随地从任何可上网的设备访问企业资源。
0x02 漏洞概述CVE-2024-21893 是存在 Ivanti Connect Secure SAML 组件中的 SSRF 漏洞,该漏洞主要是由于使用存在漏洞第三方库,并且第三方库没有及时的更新导致的,可以绕过 CVE-2024-21887 命令注入漏洞的补丁,达到未授权 RCE 的目的。
CVE-2024-21887 具体分析可以查看 dnslaoge 师傅的分析,总结一下就是 /api/v1/license/keys-status/ 存在命令注入。
0x03 影响版本Ivanti Connect Secure(9.x、22.x)Ivanti Policy Secure(9.x、22.x)Ivanti Neurons for ZTA SAML组件(这个只能SSRF)
0x04 环境搭建本次复现使用 Iva ...
Rust 从 0 到 1 (泛型和特征、集合类型)
Rust 从 0 到 1 (泛型和特征、集合类型)泛型在我们的编程生涯中,经常遇到同一功能的函数处理不同的类型数据,如整合的加法、浮点数的加法等,在不支持泛型的语言中你需要:
123456789fn add_i8(a:i8, b:i8) -> i8 { a + b}fn add_i32(a:i32, b:i32) -> i32 { a + b}fn add_f64(a:f64, b:f64) -> f64 { a + b}
在编程的时候,我们经常利用多态。通俗的讲,多态就是好比坦克的炮管,既可以发射普通弹药,也可以发射制导炮弹(导弹),也可以发射贫铀穿甲弹,甚至发射子母弹,没有必要为每一种炮弹都在坦克上分别安装一个专用炮管,即使生产商愿意,炮手也不愿意,累死人啊。所以在编程开发中,我们也需要这样“通用的炮管”,这个“通用的炮管”就是多态。
因此呢,泛型就是一种多态。泛型主要是为了减少代码量,避免程序臃肿,同时也可以丰富语言本身的表达能力。在 Rust 中泛型的声明如下:
123fn a ...
Rust 从 0 到 1 (流程控制,匹配模式,方法)
Rust 从 0 到 1 (流程控制,匹配模式,方法)流程控制在所有的编程语言都有 if else 流程控制语句,如果没有请告诉我!
if elseRust 中的 if else 语法如下:
123456let condition = true;if condition { // run A} else { // run B}
读作:若 condition 的值为 true,则执行 A 代码,否则执行 B 代码。
在 Rust 中 if else 还有一种用法是:
12345678let condition = true; let number = if condition { 5 } else { 6 }; println!("The value of number is: {}", number);
这里的代码解释为:如果 condition 为真,那么 number 的值为 5 否做为 6。这种用法 ...
记录最近遇到的两个设备漏洞
记录最近遇到的两个设备漏洞最近在做应急的时候遇到的两个漏洞,一个华硕路由器的 CVE-2023-39238,最开始由国外的安全研究员公开的详情,但是是个后台漏洞没啥用,在华硕路由器的后台提供了执行命令的方式,因此这个漏洞并没有什么用;另外一个是 Zyxel VPN 防火墙的未授权 RCE,只影响 VPN50, VPN100, VPN300, VPN500, VPN1000 这几个路由器,但是影响范围还是挺大的。
0x01 CVE-2023-39238该漏洞主要影响
华硕 RT-AX55:3.0.0.4.386_51948 或更高版本
华硕 RT-AX56U_V2:3.0.0.4.386_51948 或更高版本
华硕 RT-AC86U:3.0.0.4.386_51915 或更高版本
众所周知,华硕路由器在启动时需要从 nvram 中读取一些部分环境,因此模拟启动重点放在这部分。好在一些大佬写好了工具,如 https://github.com/firmadyne/libnvram、https://github.com/zcutlip/nvram-faker。还有专门针对华硕路由器的编译 ...
Rust 从 0 到 1(所有权和借用,复合类型)
Rust 从 0 到 1 学习记录(二)所有权和借用
在以往,内存安全几乎都是通过 GC 的方式实现,但是 GC 会引来性能、内存占用以及 Stop the world 等问题,在高性能场景和系统编程上是不可接受的,因此 Rust 采用了与众不同的方式:所有权系统。
在程序运行时,都需要和计算机内存打交道,如何申请,如何释放不用的空间。在计算机语言不断演变的过程中,出现了三种流派:
垃圾回收机制(GC),在程序运行的过程中不断的寻找不再使用的内存,如:Go,Python,Java
手动管理内存的分配和释放:在程序中,通过函数调用的方式来申请和释放内存,如:C++
通过所有权来管理内存,编译器在编译时会根据一系列规则检查
Rust 选了所有权来管理内存,这种检查在编译期就完成了,对运行的程序不会造成任何性能的损失。
栈与堆栈栈中的所有数据都必须占用已知且固定大小的内存空间。栈中的数据遵循先进后出的原则,增加数据叫进栈,移除数据叫出栈。
堆与栈不同,对于大小未知或者可能变化的数据,我们需要将它存储在堆上。堆是一种缺乏组织的数据结构,因此可能带来隐藏的安全问题。
当向堆上放入数据时, ...