mirror of
https://github.com/gelusus/wxvl.git
synced 2025-08-13 11:28:20 +00:00
一行代码即可让iPhone“变砖”:iOS高危漏洞解析、【安全圈】TensorRT-LLM高危漏洞可导致攻击者远程执行代码、7天如何从捡破烂到成功挖出一堆0day、AirBorne漏洞可导致苹果设备被完全劫持、分享短信轰炸漏洞小窍门、CVE - 2025 - 29927 POC Next.js 存在严重漏洞,可导致黑客绕过授权、Java代码审计之命令执行漏洞详解、SAP NetWeaver RCE 漏洞 (CVE-2025-31324):深度剖析、高级威胁与全方位防御策略、小程序渗透记录 通过细节挖掘漏洞的艺术、zyxel路由器CVE-2024-9200漏洞调用链分析、
This commit is contained in:
parent
c04daba7a6
commit
c71d544fd6
12
data.json
12
data.json
@ -13569,5 +13569,15 @@
|
||||
"https://mp.weixin.qq.com/s?__biz=MzA4NTY4MjAyMQ==&mid=2447900492&idx=1&sn=6c2281952da1439b110f84c51a848774": "SAP NetWeaver RCE 漏洞 (CVE-2025-31324):深度剖析、高级威胁与全方位防御策略",
|
||||
"https://mp.weixin.qq.com/s?__biz=MzIzMTIzNTM0MA==&mid=2247497546&idx=1&sn=5e65d132cee50ec6533c214ebb178613&subscene=0": "$9000 赏金的漏洞",
|
||||
"https://mp.weixin.qq.com/s?__biz=Mzg5MTc5Mzk2OA==&mid=2247503712&idx=1&sn=3aedd26d153b0fa835c0002d815b5a8e": "数字青春,榜样力量!360漏洞云五四特别直播回顾!",
|
||||
"https://mp.weixin.qq.com/s?__biz=MzIyOTAxOTYwMw==&mid=2650237152&idx=1&sn=b10e2842659aaa2534416d1b9464e8b8&subscene=0": "聊聊对安全漏洞的一些关键认知"
|
||||
"https://mp.weixin.qq.com/s?__biz=MzIyOTAxOTYwMw==&mid=2650237152&idx=1&sn=b10e2842659aaa2534416d1b9464e8b8&subscene=0": "聊聊对安全漏洞的一些关键认知",
|
||||
"https://mp.weixin.qq.com/s?__biz=MzI5NTM4OTQ5Mg==&mid=2247635703&idx=4&sn=3d67251e1067caab5ccecc4d2f163671": "一行代码即可让iPhone“变砖”:iOS高危漏洞解析",
|
||||
"https://mp.weixin.qq.com/s?__biz=MzIzMzE4NDU1OQ==&mid=2652069434&idx=2&sn=d5df9c61dfde5337bda54bd34af3c2af": "【安全圈】TensorRT-LLM高危漏洞可导致攻击者远程执行代码",
|
||||
"https://mp.weixin.qq.com/s?__biz=MzkyNTU4OTc3MA==&mid=2247485436&idx=1&sn=28a3a050921bca199f7b8d1e0f90a17d": "7天如何从捡破烂到成功挖出一堆0day",
|
||||
"https://mp.weixin.qq.com/s?__biz=MzkwMTQyODI4Ng==&mid=2247496630&idx=2&sn=25f5ebd829c7e4484aeac65832518e9e": "AirBorne漏洞可导致苹果设备被完全劫持",
|
||||
"https://mp.weixin.qq.com/s?__biz=MzU3NzY3MzYzMw==&mid=2247499771&idx=1&sn=058e197a5164b2ff43ba6e50660596f7": "分享短信轰炸漏洞小窍门",
|
||||
"https://mp.weixin.qq.com/s?__biz=MzAwMjQ2NTQ4Mg==&mid=2247499007&idx=1&sn=5c9c1acc054b4a079dffc9c45a06eb2c": "CVE - 2025 - 29927 POC Next.js 存在严重漏洞,可导致黑客绕过授权",
|
||||
"https://mp.weixin.qq.com/s?__biz=MzU2NDY2OTU4Nw==&mid=2247520322&idx=1&sn=e1eb82b0c1dcaa7bdf2d0fe4925b4701": "Java代码审计之命令执行漏洞详解",
|
||||
"https://mp.weixin.qq.com/s?__biz=Mzg3OTUxNTU2NQ==&mid=2247490781&idx=2&sn=83846431249d32b3551ab831c080c3d9": "SAP NetWeaver RCE 漏洞 (CVE-2025-31324):深度剖析、高级威胁与全方位防御策略",
|
||||
"https://mp.weixin.qq.com/s?__biz=Mzg5NzUyNTI1Nw==&mid=2247497293&idx=1&sn=7970fdd3e428d9e4fd731c1d472ad18a": "小程序渗透记录 通过细节挖掘漏洞的艺术",
|
||||
"https://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458593264&idx=1&sn=677156abb956ed47c5886b74f930f289": "zyxel路由器CVE-2024-9200漏洞调用链分析"
|
||||
}
|
146
doc/2025-05/7天如何从捡破烂到成功挖出一堆0day.md
Normal file
146
doc/2025-05/7天如何从捡破烂到成功挖出一堆0day.md
Normal file
@ -0,0 +1,146 @@
|
||||
# 7天如何从捡破烂到成功挖出一堆0day
|
||||
sekirolove UKFC安全 2025-05-04 12:07
|
||||
|
||||
这是一个在2月初就酝酿要写的博客,因为本人大三下处于关键的十字路口考虑升学or就业实习,时间紧迫,以及厂商迟迟未出补丁,故搁置良久,恰逢此刻已到新的人生阶段,并且看到近期厂商已经发了修复后的固件,突然想起,便写下此文
|
||||
|
||||
时间线
|
||||
|
||||
根据厂商的要求,在修补后的固件发布之前,我对该漏洞的细节进行了保密。现在新版本固件已发布,在此分享此次漏洞挖掘的经历(包括挖掘思路,仿真模拟等),希望能为各位师傅带来一些启发。
|
||||
|
||||
(2025年春节伊始,为了能在之后的春招有竞争的优势,故开始独立着手挖掘一些具有生命周期的iot产品的漏洞)
|
||||
|
||||
2025年2月初 先着手开始复现并挖掘一些远古iot产品漏洞,在不断的捡破烂中学习😓
|
||||
|
||||

|
||||
|
||||
2月5日,定位到dlink厂商的
|
||||
DIR-823X AX3000双频无线千兆路由
|
||||
> https://www.dlink.com.cn/home/product?id=3118
|
||||
|
||||
|
||||
(主要是点进官网就是这个产品,并且发现产品较新cve较少)
|
||||
|
||||

|
||||
|
||||
2月5-10日
|
||||
在工作日同dlink国区电话及邮件沟通上报漏洞及解决措施,并同dlink美区做邮件沟通申报漏洞,得到许可在新固件修补并发布之后公开
|
||||
|
||||
2月10日 预申报cve并提供了漏洞具体方案
|
||||
|
||||

|
||||
|
||||
此为上图对应的链接
|
||||
> https://gist.github.com/SekiroLove/a548a87bafec0d6c143072383098afdf
|
||||
|
||||
|
||||
后续
|
||||
但比较遗憾的是直到最后我把这个经历模糊的写到简历上,并且一发入魂,成功去到我心仪的大厂后,也无人给我回复,并在最近看到有人申请了这个漏洞,且时间线在我写好poc并发邮件的时间线之后,可能是求职期间嘴瓢了,让别人知道并申报了,并且自己一没申请cve经验二没怎么上心,不过也无所谓了,分享一下挖掘的过程吧😀
|
||||
|
||||
漏洞挖掘思路
|
||||
|
||||
这个漏洞的成因本身是源于之前版本的修复不慎
|
||||
|
||||
具体参考24年的的这个命令执行的cve-2024-39202
|
||||
> https://www.cve.org/CVERecord?id=CVE-2024-39202
|
||||
|
||||
|
||||
主要漏洞部分是
|
||||
涉及参数拼接的内容,由于该cve明确指出了过往版本没有对一些参数输入做过滤,而导致命令执行的危险,故最开始主要针对这一点进行研究与深挖,发现最新版本20240802版本加设了对应的过滤
|
||||
|
||||

|
||||
|
||||
但以一个pwn人常年打ctf的赛棍经验来说,这远远不够,拼接符“&”和“|”的未过滤导致了这依旧存在漏洞的隐患,故针对性的对每一个有隐患的漏洞构造poc即可
|
||||
|
||||
之后占小部分的漏洞是
|
||||
一些藏在功能函数子函数的popen的漏洞,这个就不说了,厂商未作任何过滤,一个分号即可命令执行(
|
||||
这可能也是研发和安全之间存在的割裂吧,毕竟只要写出来功能就行了 ,没必要考虑那么多所谓的安全隐患,而安全人员要擦的屁股可就多了😋
|
||||
|
||||
到了这里之后基本就比较简单了,能够成功仿真后,摸清交互便可成功命令执行
|
||||
|
||||
仿真复现
|
||||
|
||||
提取固件很简单 binwalk即可 未作任何加密
|
||||
|
||||
#
|
||||
QEMU仿真
|
||||
|
||||
仿真的过程基本都是围绕报错做对应patch,根据init的话,其中主要的服务位于/usr/sbin/goahead
|
||||
|
||||
对于这个路由固件,
|
||||
在qemu仿真过程中注意该二进制文件正常启动服务需要****新建一个名为 “br-lan” 的网卡
|
||||
```
|
||||
sudo brctl addbr br0
|
||||
sudo ifconfig br0 ip
|
||||
```
|
||||
|
||||
方可正确打开服务,打开残缺路由login网页,此时即可进行漏洞挖掘
|
||||
|
||||
#
|
||||
系统仿真
|
||||
|
||||
拿openwrt刷底包
|
||||
```
|
||||
sudo qemu-system-aarch64 \
|
||||
-M virt \
|
||||
-cpu cortex-a57 \
|
||||
-smp 4 \
|
||||
-m 512M \
|
||||
-kernel /home/sekiro/pwnTest/IoTsec/dlink/DIR-823X/openwrt-23.05.5-armsr-armv8-generic-kernel.bin \
|
||||
-initrd /home/sekiro/pwnTest/IoTsec/dlink/DIR-823X/openwrt-23.05.5-armsr-armv8-rootfs.cpio \
|
||||
-nographic \
|
||||
-append "root=/dev/ram rw console=ttyAMA0" \
|
||||
-net nic \
|
||||
-net tap,ifname=tap0,script=no,downscript=no
|
||||
```
|
||||
|
||||
再进行网络配置 方便虚拟机/wsl和 qemu 进行通信
|
||||
|
||||
添加一个虚拟网卡,并为添加的虚拟网卡配置 IP 地址,这块就不再赘述了,网上资料以及ai都能很方便的解决
|
||||
|
||||
此时需要把解包后的官方镜像打包传输到qemu
|
||||
```
|
||||
scp rootfs.tar.gz root@*.*.*.*:/root/rootfs
|
||||
tar zxvf rootfs.tar.gz
|
||||
```
|
||||
|
||||
再chroot启动,从执行init文件开始,这样的方式基本就可以启动一个完整的路由器服务
|
||||
|
||||
需要更多的功能的话应该还得对于去patch,不过由于我们只是做漏洞挖掘复现,这些便已绰绰有余
|
||||
|
||||
#
|
||||
复现成功后
|
||||
|
||||
由于该路由主要功能都集中在授权后,故需在第一次登录后进行对应授权认证,满足正确的session_id, auth_token方可进入常规功能,具体脚本已在后文链接中,此处不做赘述。
|
||||
|
||||
(这块的内容由于时间原因已记忆模糊,有任何错误请随时指出)
|
||||
|
||||
POC及漏洞复现
|
||||
|
||||
声明:本文仅供用于安全技术的交流与学习,下文poc及demo仅适用于本地实验场景,若读者将本文内容用作其他用途,由读者承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
|
||||
|
||||
具体漏洞利用链不做更多阐述,由于篇幅问题等,复现demo等均在下文链接,其中涉及30个组件的漏洞
|
||||
仅可作本地复现用途
|
||||
> https://gist.github.com/SekiroLove/a548a87bafec0d6c143072383098afdf
|
||||
|
||||
|
||||
由于官方已经下架了去年的漏洞固件版本,故在此提供相应下架链接,
|
||||
仅作复现学习需求,其他行为本人概不负责
|
||||
> https://github.com/SekiroLove/IoT/blob/main/Firmwares/firmware-240802.bin
|
||||
|
||||
|
||||
后记
|
||||
|
||||
感觉一切都是这么巧合,尽管从时间线来看,发邮件,漏洞及poc链接来说,都比其他人至少快1周,但最后也比较遗憾没有拿到cve(暂时。。。),但看了一下好像评分还挺高,但事实上这只是个授权的漏洞罢了,真在真实场景实用价值并不高,过程和后续影响似乎更重要一些🥺
|
||||
|
||||
也幸好进入了新的人生阶段了,单纯的
|
||||
“这种连固件都不买就能挖到cve”的iot的生涯也早早收手结束,无论如何都算有所收获,给了我进入宇宙厂的筹码和实践检验,也算给这3个月前的经历画个句号😶🌫️
|
||||
|
||||
之后就是转战下到底层硬件上到常规app安全全方位的系统安全领域了
|
||||
"Hope it goes dope, yo!"
|
||||
|
||||

|
||||
|
||||
peace~
|
||||
|
||||
Q.E.D.
|
||||
|
@ -1,12 +1,13 @@
|
||||
# AirBorne漏洞可导致苹果设备被完全劫持
|
||||
FreeBuf 商密君 2025-05-03 10:05
|
||||
网络安全与人工智能研究中心 2025-05-04 08:48
|
||||
|
||||

|
||||
|
||||
**苹果AirPlay协议及SDK中的漏洞使苹果及第三方设备面临攻击风险,包括远程代码执行。**
|
||||
|
||||
****
|
||||
网络安全公司
|
||||
Oligo
|
||||
在苹果AirPlay协议及软件开发套件(SDK)中发现一系列严重漏洞(统称为AirBorne),影响苹果及第三方设备。攻击者可利用这些漏洞实施零点击/单点击远程代码执行(RCE)、绕过访问控制列表(ACL)、读取本地文件、窃取数据,以及发起中间人(MITM)或拒绝服务(DoS)攻击。这些漏洞可被组合利用,通过无线或点对点连接完全劫持设备。
|
||||

|
||||
|
||||
网络安全公司Oligo在苹果AirPlay协议及软件开发套件(SDK)中发现一系列严重漏洞(统称为AirBorne),影响苹果及第三方设备。攻击者可利用这些漏洞实施零点击/单点击远程代码执行(RCE)、绕过访问控制列表(ACL)、读取本地文件、窃取数据,以及发起中间人(MITM)或拒绝服务(DoS)攻击。这些漏洞可被组合利用,通过无线或点对点连接完全劫持设备。
|
||||
|
||||
|
||||
**01**
|
||||
@ -16,8 +17,7 @@ Oligo
|
||||
**漏洞影响范围广泛**
|
||||
|
||||
|
||||
AirBorne
|
||||
漏洞虽未影响所有苹果设备,但全球有23.5亿台活跃苹果设备(包括超1亿台Mac和数千万台支持AirPlay的第三方设备),潜在影响范围极大。研究人员发现编号为CVE-2025-24252和CVE-2025-24132的两个漏洞可实现可蠕虫传播的零点击RCE,攻击者不仅能劫持支持AirPlay的设备,还能通过本地网络传播恶意软件。由于AirPlay在苹果及第三方设备中的广泛存在,这些漏洞可能导致间谍活动、勒索软件和供应链攻击等风险。
|
||||
AirBorne漏洞虽未影响所有苹果设备,但全球有23.5亿台活跃苹果设备(包括超1亿台Mac和数千万台支持AirPlay的第三方设备),潜在影响范围极大。研究人员发现编号为CVE-2025-24252和CVE-2025-24132的两个漏洞可实现可蠕虫传播的零点击RCE,攻击者不仅能劫持支持AirPlay的设备,还能通过本地网络传播恶意软件。由于AirPlay在苹果及第三方设备中的广泛存在,这些漏洞可能导致间谍活动、勒索软件和供应链攻击等风险。
|
||||
|
||||
|
||||
**02**
|
||||
@ -30,9 +30,7 @@ AirBorne
|
||||
CVE-2025-24252是macOS系统中的高危释放后使用(use-after-free)漏洞,远程攻击者可触发该漏洞执行任意代码。当与CVE-2025-24206组合利用时,可对网络设置开放的AirPlay设备发起零点击蠕虫攻击。攻击者无需用户交互即可通过公共WiFi等途径在网络间传播恶意软件。
|
||||
|
||||
|
||||
CVE-2025-24132是AirPlay SDK中的基于栈的
|
||||
缓冲区溢出漏洞
|
||||
,影响所有支持AirPlay的扬声器和接收器,同样可实现零点击蠕虫式RCE。利用该漏洞可从播放媒体内容到严重入侵(如在敏感环境中通过设备麦克风窃听)等多种攻击效果。
|
||||
CVE-2025-24132是AirPlay SDK中的基于栈的缓冲区溢出漏洞,影响所有支持AirPlay的扬声器和接收器,同样可实现零点击蠕虫式RCE。利用该漏洞可从播放媒体内容到严重入侵(如在敏感环境中通过设备麦克风窃听)等多种攻击效果。
|
||||
|
||||
|
||||
**03**
|
||||
@ -44,6 +42,7 @@ CVE-2025-24132是AirPlay SDK中的基于栈的
|
||||
|
||||
Oligo向苹果报告了23个漏洞,其中17个获得CVE编号。双方通过合作已识别并修复问题,遵循负责任的漏洞披露流程发布更新。为降低风险,用户应:
|
||||
|
||||
|
||||
- 及时更新设备系统
|
||||
|
||||
- 停用不必要的AirPlay接收功能
|
||||
@ -52,45 +51,16 @@ Oligo向苹果报告了23个漏洞,其中17个获得CVE编号。双方通过
|
||||
|
||||
- 将"允许AirPlay访问"设置为"仅限当前用户"
|
||||
|
||||
|
||||
|
||||
报告特别强调:"企业必须立即更新所有支持AirPlay的公司设备,安全负责人还需明确告知员工及时更新个人设备。"
|
||||
|
||||

|
||||
|
||||
编辑:陈十九
|
||||
来源|“FreeBuf”公众号
|
||||
|
||||
审核:商密君
|
||||
编辑|音叶泽
|
||||
|
||||
**征文启事**
|
||||
|
||||
大家好,为了更好地促进同业间学术交流,商密君现开启征文活动,只要你对商用密码、网络安全、数据加密等有自己的独到见解和想法,都可以积极向商密君投稿,商密君一定将您的声音传递给更多的人。
|
||||
审核|秦川原
|
||||
|
||||
|
||||
[](https://mp.weixin.qq.com/s?__biz=MzI5NTM4OTQ5Mg==&mid=2247633989&idx=1&sn=cd6647451cec618b20dd28533702603b&scene=21#wechat_redirect)
|
||||
|
||||
|
||||
点击购买《2023-2024中国商用密码产业发展报告》
|
||||
|
||||

|
||||
|
||||
来源:
|
||||
FreeBuf
|
||||
|
||||
注:内容均来源于互联网,版权归作者所有,如有侵权,请联系告知,我们将尽快处理。
|
||||
|
||||

|
||||
|
||||
|
||||

|
||||
|
||||
|
||||

|
||||
|
||||
点分享
|
||||
|
||||

|
||||
|
||||
点点赞
|
||||
|
||||

|
||||
|
||||
点在看
|
||||
|
||||
|
@ -0,0 +1,23 @@
|
||||
# CVE - 2025 - 29927 POC Next.js 存在严重漏洞,可导致黑客绕过授权
|
||||
Khan安全团队 2025-05-04 09:34
|
||||
|
||||
在 Next.js 这个开源 Web 开发框架中发现了编号为 CVE-2025-29927 的严重漏洞,该漏洞可能允许攻击者绕过授权检查,使其无需经过关键安全检查就能发送到达目标路径的请求。Next.js 是一个流行的 React 框架,在 npm 上每周下载量超 900 万次,用于构建全栈 We b 应用程序,其中包含用于身份验证和授权的中间件组件,被前端和全栈开发人员广泛用于构建 React 的 Web 应用,TikTok、Twitch、Hulu、Netflix、Uber 和 Nike 等知名公司也在其网站或应用中使用了 Next.js 。
|
||||
|
||||

|
||||
## 授权绕过
|
||||
##
|
||||
|
||||
在 Next.js 中,中间件组件在请求到达应用程序路由系统之前运行,并用于身份验证、授权、日志记录、错误处理、重定向用户、应用地理阻止或速率限制等目的。
|
||||
|
||||
为了防止中间件重新触发自身的无限循环,Next.js 使用一个名为“x-middleware-subrequest”的标头来指示是否应应用中间件功能。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
负责处理传入请求的“runMiddleware”函数会检索该标头。如果检测到“x-middleware-subrequest”标头具有特定值,则会绕过整个中间件执行链,并将请求转发到其目的地。
|
||||
|
||||

|
||||
|
||||
研究人员 Allam Rachid 和 Allam Yasser(inzo_)发现攻击者能手动发送含正确值标头的请求绕过保护机制,此标头及其值如同通用密钥可覆盖规则。该漏洞影响 Next.js 15.2.3、14.2.25、13.5.9 和 12.3.5 之前的所有版本,鉴于利用细节已公开,建议用户尽快升级。Next.js 安全公告称 CVE - 2025 - 29927 仅影响使用 “next start” 和 “output: standalone” 的自托管版本,Vercel 和 Nerlify 托管及静态导出部署的应用不受影响,而使用中间件进行授权或安全检查且后期未验证的环境同样受影响,若暂时无法修补,建议阻止外部用户发送包含 “x - middleware - subrequest header” 的请求 。
|
||||
|
245
doc/2025-05/Java代码审计之命令执行漏洞详解.md
Normal file
245
doc/2025-05/Java代码审计之命令执行漏洞详解.md
Normal file
@ -0,0 +1,245 @@
|
||||
# Java代码审计之命令执行漏洞详解
|
||||
船山信安 2025-05-04 16:01
|
||||
|
||||
## 0x01 漏洞简介
|
||||
|
||||
在Java代码审计中,命令执行漏洞指应用程序未对用户输入进行严格过滤,直接将外部可控参数拼接到系统命令中执行,导致攻击者可注入恶意命令并获取服务器控制权。其核心原理是开发者误用危险函数执行系统命令时,未对用户输入的参数进行安全校验或转义,导致用户可通过构造特殊字符(如管道符|
|
||||
、命令分隔符;
|
||||
)或参数注入(如${}
|
||||
表达式)将恶意指令与原始命令拼接。该漏洞常出现在参数动态拼接的场景,且受操作系统特性影响。
|
||||
|
||||
**Windows系统命令注入表**
|
||||
|
||||

|
||||
|
||||
**Linux系统命令注入表**
|
||||
|
||||

|
||||
## 0x02 Java命令执行方法
|
||||
### 2.1 Runtime.exec()
|
||||
|
||||
Runtime.exec()
|
||||
是Java中执行系统命令的核心方法,提供多种重载形式,本质是启动子进程执行外部命令。直接拼接用户输入会导致命令注入漏洞,需使用参数数组形式并严格校验输入。Java中命令执行用到最多的方法就是java.lang.Runtime#exec()
|
||||
。
|
||||
```
|
||||
```
|
||||
|
||||

|
||||
|
||||
从上面可知exec()方法在执行命令的时候,传入的参数有字符串和字符串数组两种形参,将这种方法封装到靶场上且限制必须包含ping来执行观察其效果,分析可利用的方式。
|
||||
|
||||

|
||||
|
||||
首先使用exec(String)执行ping命令,正常返回结果,执行其他命令则异常
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
使用&
|
||||
进行命令拼接,但是发现也异常了
|
||||
|
||||

|
||||
|
||||
切换为exec(String[])
|
||||
时,直接使用&
|
||||
拼接,发现两条命令都可以被执行。
|
||||
|
||||

|
||||
|
||||
思考下,为什么exec(String)
|
||||
使用了&
|
||||
会异常,而exec(String[])
|
||||
不会呢?来动态调试exec(String)
|
||||
的调用链加深理解,开始断点调试,发现调用的是exec(command, null, null);
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
继续跟进,发现这里最终也去调用的是exec(cmdarray, envp, dir)
|
||||
,那为什么最终的命令执行的结果不一样呢,分析下面的代码可以发现,传入的command
|
||||
是经过了StringTokenizer
|
||||
进行处理的,那么问题的关键就是StringTokenizer
|
||||
是怎么去处理的
|
||||
|
||||

|
||||
|
||||
跟进StringTokenizer
|
||||
,发现这里对传入的命令做了一个分割,将传入的字符串str
|
||||
按照默认的空白分隔符(包括空格、制表符\t
|
||||
、换行符\n
|
||||
、回车符\r
|
||||
和换页符\f
|
||||
)进行分割,将字符串拆解为一系列连续的子字符串
|
||||
|
||||

|
||||
|
||||
String[] cmdarray = new String[st.countTokens()];
|
||||
的作用是创建一个字符串数组cmdarray
|
||||
,其长度等于StringTokenizer
|
||||
对象st
|
||||
中分割后的子字符串数量,最终命令变成了["calc&ping","baidu.com"]
|
||||
传入了exec(cmdarray, envp, dir)
|
||||
|
||||

|
||||
|
||||
最终交给ProcessBuilder
|
||||
去执行,命令被错误的分割成<font style="color:rgba(0, 0, 0, 0.88);">["calc&ping", "baidu.com"]</font>
|
||||
,Java会尝试执行第一个参数calc&ping
|
||||
,视为可执行程序名,calc&ping
|
||||
不是一个有效程序,因此抛出IOException: Cannot run program "calc&ping"
|
||||
。
|
||||
|
||||

|
||||
|
||||
如果是exec(String[])
|
||||
呢?最终命令是["cmd", "/c", "calc&ping", "baidu.com"]
|
||||
,Java调用cmd.exe
|
||||
,并传递参数/c
|
||||
和后续参数calc&ping baidu.com
|
||||
。cmd.exe
|
||||
会将calc&ping baidu.com
|
||||
整体视为一个字符串,并按照 Shell 规则解析其中的&
|
||||
符号,将calc&ping baidu.com
|
||||
解析为两条命令,故而执行成功。
|
||||
|
||||

|
||||
|
||||
那exec(String)
|
||||
怎么去进行漏洞利用呢?可以利用Shell的解析逻辑实现命令注入,直接拼接cmd /c
|
||||
即可
|
||||
|
||||

|
||||
|
||||
### 2.2 ProcessBuilder
|
||||
|
||||
ProcessBuilder命令执行漏洞的核心在于通过ProcessBuilder
|
||||
类直接构造并执行系统命令时,若未对用户输入参数进行严格过滤或拆分,攻击者可注入恶意命令实现任意代码执行,ProcessBuilder
|
||||
不支持以字符串形式传入命令,只能拆分成List或者数组的形式传入。
|
||||
|
||||

|
||||
|
||||
从靶场漏洞代码中可知道,是直接将用户输入的参数传入到ProcessBuilder
|
||||
进行命令执行,从而攻击者可以拼接恶意命令造成漏洞
|
||||
|
||||

|
||||
|
||||
跟进ProcessBuilder.start()
|
||||
方法,ProcessBuilder.start()
|
||||
是Java中启动外部进程的核心方法,其底层实现最终通过调用ProcessImpl.start()
|
||||
完成操作系统级别的进程创建。
|
||||
|
||||

|
||||
### 2.3 ProcessImpl
|
||||
|
||||
ProcessImpl
|
||||
是 Java 中Process
|
||||
抽象类的具体实现类 ,其设计目的是为ProcessBuilder.start()
|
||||
方法提供底层支持,用于创建和管理操作系统进程 。由于ProcessImpl
|
||||
的构造函数被声明为private
|
||||
,无法直接通过new
|
||||
实例化,开发者通常需通过ProcessBuilder
|
||||
或Runtime.exec()
|
||||
间接调用其功能 。若需直接操作ProcessImpl
|
||||
,必须通过反射技术绕过访问限制。ProcessImpl
|
||||
的start()
|
||||
方法是静态的,可通过反射获取该方法并传入参数(如命令数组、环境变量等)创建进程。
|
||||
```
|
||||
```
|
||||
|
||||
靶场效果
|
||||
|
||||

|
||||
|
||||
## 0x03 代码审计思路
|
||||
|
||||
学习完Java命令执行的一些方式,就可以知道需要审计哪些危险函数了,是否手动创建了shell,然后关注参数是否可控,若不可控则无法命令注入,若参数可控注意空格等会导致分割,可编码绕过(如${IFS}
|
||||
代替空格)。核心思路是识别所有可能导致命令注入的代码路径,重点围绕“参数可控性”和“Shell调用方式”两个维度进行分析:
|
||||
|
||||
1、定位危险入口点,识别所有可能执行系统命令的代码位置
|
||||
- Runtime.getRuntime().exec()
|
||||
|
||||
- ProcessBuilder.start()
|
||||
|
||||
- 反射调用ProcessImpl
|
||||
、UNIXProcess
|
||||
等底层类的方法
|
||||
|
||||
审计技巧:
|
||||
- 使用IDE全局搜索关键词:exec(
|
||||
、ProcessBuilder
|
||||
、start(
|
||||
、getRuntime()
|
||||
。
|
||||
|
||||
- 检查反射调用:搜索Class.forName()
|
||||
、Method.invoke()
|
||||
等代码块,确认是否操作危险类(如ProcessImpl
|
||||
)。
|
||||
|
||||
2、分析参数来源,判断命令参数是否完全或部分可控。
|
||||
- HTTP请求参数(GET/POST)、Headers、Cookies
|
||||
|
||||
- 文件上传内容、数据库查询结果
|
||||
|
||||
- 配置文件(如YAML/Properties)中的动态值
|
||||
|
||||
- 是否存在字符串拼接(如"sh -c " + userInput
|
||||
)
|
||||
|
||||
- 是否通过String.format()
|
||||
、StringBuilder
|
||||
动态生成命令
|
||||
|
||||
3、验证调用方式与参数解析,确认是否通过Shell环境执行命令,以及参数解析是否安全,Shell会解析命令中的特殊符号(如;
|
||||
、&&
|
||||
、$()
|
||||
),导致命令注入。
|
||||
- 检查是否显式调用Shell,如使用sh -c
|
||||
、bash -c
|
||||
、cmd.exe /c
|
||||
等Shell解释器,如new ProcessBuilder("sh", "-c", userCmd)
|
||||
|
||||
- 检查参数分割逻辑,如使用exec(String command)
|
||||
传递单个字符串命令
|
||||
|
||||
- 检查反射绕过,通过反射直接调用 <font style="color:rgba(0, 0, 0, 0.88);background-color:rgb(246, 246, 246);">ProcessImpl.start()</font>
|
||||
,绕过参数安全检查。
|
||||
|
||||
## 0x04 防御与修复
|
||||
|
||||
1、避免执行系统命令
|
||||
|
||||
优先使用Java原生API替代直接执行系统命令。例如:删除文件使用File.delete()
|
||||
而非rm
|
||||
命令 ,网络请求使用通过HttpClient
|
||||
而非curl
|
||||
命令等等,规避命令注入风险,同时提升跨平台兼容性。
|
||||
|
||||
2、无法避免系统命令执行时,优先使用Runtime.exec(String[] cmdarray)
|
||||
或ProcessBuilder
|
||||
的数组传参方式,避免将命令与参数拼接为字符串
|
||||
```
|
||||
```
|
||||
|
||||
3、避免shell调用,禁止通过sh -c
|
||||
、cmd.exe /c
|
||||
等方式创建Shell环境,直接调用可执行文件路径。
|
||||
```
|
||||
```
|
||||
|
||||
4、危险字符过滤,过滤|
|
||||
、&
|
||||
、;
|
||||
、$()
|
||||
等Shell元字符,以及路径遍历符号(../
|
||||
),可使用OWASP ESAPI等安全库进行编码处理
|
||||
```
|
||||
```
|
||||
|
||||
|
||||
|
||||
来源:[
|
||||
https://www.freebuf.com/articles/web/427845.html]
|
||||
|
@ -1,5 +1,5 @@
|
||||
# SAP NetWeaver RCE 漏洞 (CVE-2025-31324):深度剖析、高级威胁与全方位防御策略
|
||||
原创 Hankzheng 技术修道场 2025-05-04 00:34
|
||||
sec0nd安全 2025-05-04 13:58
|
||||
|
||||

|
||||
|
||||
|
424
doc/2025-05/zyxel路由器CVE-2024-9200漏洞调用链分析.md
Normal file
424
doc/2025-05/zyxel路由器CVE-2024-9200漏洞调用链分析.md
Normal file
@ -0,0 +1,424 @@
|
||||
# zyxel路由器CVE-2024-9200漏洞调用链分析
|
||||
CLan_nad 看雪学苑 2025-05-04 10:02
|
||||
|
||||
本文主要是针对于zyxel厂商的路由器的zhttpd程序进行漏洞分析,作者在挖掘zyxel设备漏洞时,翻到一篇较新的漏洞公告:
|
||||
|
||||
|
||||
Zyxel security advisory for buffer overflow and post-authentication command injection vulnerabilities in some 4G LTE/5G NR CPE, DSL/Ethernet CPE, fiber ONTs, and WiFi extenders | Zyxel Networks
|
||||
|
||||
|
||||
其中我关注到CVE-2024-9200这个漏洞,比较经典的ping功能产生命令注入,日期比较新,就决定简单地看看这个漏洞。然而网上搜不到该漏洞的详细信息,便自己去他们官网下载了一个新版固件来分析(型号vmg4005)。然而在自己分析的过程中,发现该漏洞调用链还是有一点点的复杂度的。
|
||||
|
||||
|
||||
本文就是分享我分析该漏洞时遇到的一些问题和知识点,或许可以给挖掘zyxel设备或遇到zhttpd这个框架的师傅一些帮助。
|
||||
|
||||
|
||||
|
||||
**1**
|
||||
|
||||
**固件仿真**
|
||||
|
||||
|
||||
可以用FirmAE直接进行模拟,启动后可能不知道管理员默认密码,FirmAE模拟时使用-d参数开启终端,使用passwd admin修改密码就可以登录web页面了。
|
||||
|
||||
|
||||
这里值得一说的是,要分析的程序zhttpd,打开后函数是没有命名的,影响了分析,不过我在data段找到了一张表,容易看出里面存储着的就是url页面和对应的处理函数。
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
那么函数名这里就可以恢复了,使用ida python的脚本就行。
|
||||
|
||||
|
||||
```
|
||||
import idc
|
||||
import idaapi
|
||||
import idautils
|
||||
|
||||
def fix_function_names(start_addr, end_addr):
|
||||
""" 从指定地址开始解析符号表,修复函数名。 """
|
||||
print(f"开始修复函数名,符号表起始地址: {hex(start_addr)},截止地址: {hex(end_addr)}")
|
||||
offset = 0
|
||||
|
||||
while True:
|
||||
# 计算当前符号表条目的地址
|
||||
entry_addr = start_addr + offset
|
||||
|
||||
# 如果当前地址超出截止地址,停止解析
|
||||
if entry_addr >= end_addr:
|
||||
print("已到达符号表截止地址,停止解析。")
|
||||
break
|
||||
|
||||
# 读取函数名字符串地址和函数地址
|
||||
name_addr = idc.get_wide_dword(entry_addr) # 前4字节是函数名地址
|
||||
func_addr = idc.get_wide_dword(entry_addr + 4) # 后4字节是函数地址
|
||||
|
||||
# 如果函数名地址或函数地址无效,跳过当前条目
|
||||
if name_addr == 0 or func_addr == 0:
|
||||
print(f"无效的符号表条目,地址: {hex(entry_addr)},跳过...")
|
||||
offset += 8
|
||||
continue
|
||||
|
||||
# 获取函数名字符串
|
||||
func_name = idc.get_strlit_contents(name_addr, -1, idc.STRTYPE_C)
|
||||
if func_name is None:
|
||||
print(f"无法读取函数名字符串,地址: {hex(name_addr)},跳过...")
|
||||
offset += 8
|
||||
continue
|
||||
|
||||
# 将函数名解码为字符串,并替换非法字符
|
||||
try:
|
||||
func_name = func_name.decode('utf-8', errors='ignore')
|
||||
# 替换非法字符为 _
|
||||
illegal_chars = ['/', '-', '?', '=']
|
||||
for char in illegal_chars:
|
||||
func_name = func_name.replace(char, '_')
|
||||
except Exception as e:
|
||||
print(f"解码函数名失败,地址: {hex(name_addr)},错误: {e}")
|
||||
offset += 8
|
||||
continue
|
||||
|
||||
# 重命名函数
|
||||
if idc.set_name(func_addr, func_name, idc.SN_NOWARN):
|
||||
print(f"函数名已修复: {hex(func_addr)} -> {func_name}")
|
||||
else:
|
||||
print(f"无法重命名函数: {hex(func_addr)} -> {func_name}")
|
||||
|
||||
# 移动到下一个符号表条目
|
||||
offset += 8
|
||||
|
||||
# 调用函数,指定符号表起始地址和截止地址
|
||||
fix_function_names(0x573B8, 0x575E8)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
**2**
|
||||
|
||||
**漏洞分析**
|
||||
|
||||
|
||||
以下是从公告中获取的漏洞信息,知道了触发页面在诊断(diagnostic)中,参数就是host。
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
对应页面内容
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
点击按钮后抓包,发了三个包,第一个是put,但是参数被加密了,后面两个包是get类型,应该是获取结果。
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
上面的抓包获取了/cgi-bin/DAL?oid=PINGTEST这个关键信息,那么直接关键词在zhttpd中搜索即可,来到了cgi-bin_DAL这个函数。
|
||||
|
||||
|
||||
(注:下文后面我贴的所有ida中看到的程序的代码,我都做了删改和注释,帮助快速看懂关键代码)
|
||||
|
||||
|
||||
```
|
||||
int __fastcall cgi_bin_DAL(int a1, unsigned __int8 a2)
|
||||
{
|
||||
RdmObjHandler = 0;
|
||||
v34 = 0;
|
||||
oid = 0;
|
||||
method = 0;
|
||||
oid = (char *)cg_http_vallist_getvalue((a1 + 672), (int)"oid");//获取oid的值,也就是抓包中看到的pingtest
|
||||
method = (char *)cg_http_request_getmethod(a1);
|
||||
|
||||
v23 = json_object_new_object(v2);
|
||||
if ( !strcmp(method, "POST") || !strcmp(method, "PUT") )
|
||||
{
|
||||
v24 = cg_string_getvalue((a1 + 4));//获取POST数据
|
||||
v3 = cg_http_packet_getheaderlonglong(a1, "Content-Length");
|
||||
|
||||
v34 = (char *)json_tokener_parse(v24, HIDWORD(v3));
|
||||
|
||||
insertLoginUserInfo((int)v34, a1 + 680, a1 + 712);
|
||||
RdmObjHandler = zcfgFeDalHandler((int)oid, (int)method, (int)v34, 0, (int)s);//根据oid值处理请求,具体实现在libzcfg_fe_dal.so中
|
||||
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
zcfgFeDalHandler这个函数在libzcfg_fe_dal.so中,继续跟进代码。这里的全局变量dalHandler,跟进后可确认就是handler表,保存oid值和对应处理函数。
|
||||
|
||||
|
||||
```
|
||||
int __fastcall zcfgFeDalHandler(char *oid, const char *method, int a3, int a4, char *dest)
|
||||
{
|
||||
|
||||
if ( !oid )
|
||||
return 0;
|
||||
v9 = 0;
|
||||
v10 = 24;
|
||||
while ( 1 )
|
||||
{
|
||||
v11 = *(&dalHandler + v10 * v9);
|
||||
if ( !v11 )
|
||||
{
|
||||
v12 = 0;
|
||||
goto LABEL_7;
|
||||
}
|
||||
v15 = v10;
|
||||
if ( !strcmp(oid, v11) )
|
||||
break;
|
||||
v10 = v15;
|
||||
++v9;
|
||||
}
|
||||
v12 = 1;
|
||||
LABEL_7:
|
||||
printf("handlerName=%s method=%s i=%d\n", oid, method, v9);
|
||||
|
||||
v14 = 24 * v9;
|
||||
if ( !j_parseValidateParameter(a3, method, *(&dalHandler + v14), *(&dalHandler + v14 + 4), dest) )
|
||||
return -17;
|
||||
if ( !*(&dalHandler + v14 + 8) )
|
||||
return 0;
|
||||
return (*(&dalHandler + v14 + 8))(method, a3, a4, dest);//根据oid的值在dalHandler表中匹配到的函数指针,调用对应的函数
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
表中pingtest对应如下,这里很容易判断出zcfgFeDalPingTest就是处理函数。
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
跟进zcfgFeDalPingTest,其中还有多处调用,这里就忽略了,直接来到最后一层关键函数zcfgFeDalIpDiagIPPingEdit。
|
||||
|
||||
|
||||
```
|
||||
int __fastcall zcfgFeDalIpDiagIPPingEdit(int a1)
|
||||
{
|
||||
|
||||
v24 = 0;
|
||||
|
||||
string = json_object_object_get(a1, "ProtocolVersion");
|
||||
|
||||
v4 = string;
|
||||
if ( json_object_object_get(a1, "Host") )
|
||||
{
|
||||
v7 = json_object_object_get(a1, "Host");
|
||||
v6 = json_object_get_string(v7);
|
||||
j_invalidCharFilter(v6, ')');
|
||||
v5 = j_DomainFilter(v6) != 1 && j_IPFilter(v6) != 1 && j_IPv6Filter(v6) != 1;
|
||||
}
|
||||
|
||||
if ( v5 )
|
||||
{
|
||||
puts("\ninvalid input...");
|
||||
return -5;
|
||||
}
|
||||
|
||||
*v25 = 0;
|
||||
*&v25[3] = 0;
|
||||
if ( zcfgFeObjJsonGet(68592, v25, &v24) )
|
||||
{
|
||||
//...
|
||||
}
|
||||
v14 = v24;
|
||||
if ( v24 )
|
||||
{
|
||||
v15 = json_object_new_string(v4);
|
||||
json_object_object_add(v14, "ProtocolVersion", v15);
|
||||
v16 = v24;
|
||||
v17 = json_object_new_string(v6);
|
||||
json_object_object_add(v16, "Host", v17);
|
||||
v18 = v24;
|
||||
v19 = json_object_new_string(v10);
|
||||
json_object_object_add(v18, "DiagnosticsState", v19);
|
||||
v20 = v24;
|
||||
v21 = json_object_new_int(v13, 0);
|
||||
json_object_object_add(v20, "NumberOfRepetitions", v21);
|
||||
v22 = json_object_to_json_string(v24);
|
||||
v5 = zcfgFeObjWrite(68592, v25, v22, 0x20000003, 0);//将数据写入68592标识的对象中
|
||||
|
||||
if ( v24 )
|
||||
json_object_put(v24);
|
||||
}
|
||||
return v5;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
其实到这里后,一开始,就会比较困惑,因为这就是最后一层调用,但是并没有发现ping命令执行的逻辑,仅仅做了把数据保存到json对象中,然后就啥也没干了。经过确认,其实关键函数在于这两行,他们的实现分别在libzcfg_fe_rdm_access.so和libzcfg_fe_rdm_string.so
|
||||
|
||||
|
||||
```
|
||||
zcfgFeObjJsonGet(68592, v25, &v24)
|
||||
```
|
||||
|
||||
|
||||
```
|
||||
zcfgFeObjWrite(68592, v25, v22, 0x20000003, 0);
|
||||
```
|
||||
|
||||
|
||||
|
||||
其实这里具体去追究他们的实现,是比较麻烦而且困难的,因为不仅抽象难懂,还反反复复涉及到了多个外部函数。可以直接猜到这里涉及到的事情。
|
||||
|
||||
|
||||
观察他们的命名,反复出现的zcfg(Z-config)应该是个配置标识,而FE(Front End)往往指前端,那么可以推测,这里肯定是有对应的后端 (BE)的,前端把数据发送给后端,后端再进行处理。而这里的参数68592,很可能就是标识后端的某个数据对象。可能存在某种监控机制,当前端写入数据后,后端监控到该数据对象发生了改变,就进行相应的处理,比如执行ping命令。
|
||||
|
||||
|
||||
而这两个函数也可以猜测出功能:
|
||||
|
||||
zcfgFeObjJsonGet(68592, ...):从后端获取与 `68592` 对应的对象数据。
|
||||
|
||||
|
||||
zcfgFeObjWrite(68592, ...):将数据写入与 `68592` 对应的对象。
|
||||
|
||||
|
||||
最后确实找到了进行后端处理的文件libzcfg_be.so,也找到了对应的执行ping命令的函数。
|
||||
|
||||
|
||||
```
|
||||
int __fastcall beIpPingDiagSet(int a1, int a2, int a3, int a4)
|
||||
{
|
||||
|
||||
|
||||
PartialObj = zcfgBeApplyObjRetrievePartialObj(a1);
|
||||
if ( PartialObj )
|
||||
{
|
||||
v9 = json_object_object_get(PartialObj, "DiagnosticsState");
|
||||
string = (const char *)json_object_get_string(v9);
|
||||
v11 = strcmp(string, "Requested");
|
||||
if ( v11 == 0 )
|
||||
zcfgBeSaveParamValue(68592, a3, (int)"X_ZYXEL_Creator", (int)"ACS");
|
||||
}
|
||||
|
||||
LABEL_19:
|
||||
if ( !strcmp((const char *)a1, "Requested") )
|
||||
{
|
||||
system("killall ping 2>/dev/null");
|
||||
zcfgBeSaveParamValue(68592, a3, (int)"DiagnosticsState", a1);
|
||||
sprintf(s, "echo \"\" >%s", "/var/diagResult");
|
||||
system(s);
|
||||
memset(s, 0, 0x140u);
|
||||
|
||||
strcpy(s, "ping ");
|
||||
v16 = &s[strlen(s)];
|
||||
|
||||
if ( strcmp((const char *)(a1 + 286), "IPv4") )
|
||||
{
|
||||
LABEL_33:
|
||||
v19 = v16 + 2;
|
||||
|
||||
sprintf(
|
||||
v19,
|
||||
"-s %d -c %d -W %d %s >%s&",
|
||||
(a1 + 568),
|
||||
(a1 + 560),
|
||||
v14,
|
||||
(const char *)(a1 + 303), //host的值,即用户输入
|
||||
"/var/diagResult");
|
||||
|
||||
system(s);
|
||||
syslog(6, "Command %s\n", s);
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
跟进到这,也就完成了漏洞分析了,这里分析的是新版固件,可以看到过程中,zcfgFeDalIpDiagIPPingEdit做了对host的过滤,修复了漏洞。
|
||||
|
||||
|
||||
|
||||
**3**
|
||||
|
||||
**补充**
|
||||
|
||||
|
||||
zyxel的这种类型的洞,网上应该是搜不到什么的,所以这里分享出来希望能帮到后面看到文章的师傅。
|
||||
|
||||
|
||||
处理数据的后端文件就是libzcfg_be.so,漏洞也基本都发生在这,要挖的话可以在这找到疑似危险函数,再往上回溯到对应接口验证。
|
||||
|
||||
|
||||
前端不仅做了参数数据加密,还做了对危险字符的过滤,需要打开浏览器开发者模式,在element中的event listeners那一栏找到对应的事件,然后删掉,才能绕开前端过滤。
|
||||
|
||||
|
||||
在逆向分析的时候,由于代码混乱,涉及到大量json数据的处理,而且根据不同的请求方法还有多个分支,所以实际分析的时候还是有很多干扰项的,明确put/post/delete/get四种请求方法的作用,抓包分析,还有一些审计伪代码的经验,都是必要的。
|
||||
|
||||
|
||||
对于zhttpd本身,做了一下未授权接口的分析,核心逻辑在下面,可以看出,只要url包括/cgi-bin/,就需要验证身份,那么未授权接口只要不包含/cgi-bin/就行。
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
看雪ID:CLan_nad
|
||||
|
||||
https://bbs.kanxue.com/user-home-1014504.htm
|
||||
|
||||
*本文为看雪论坛优秀文章,由 CLan_nad 原创,转载请注明来自看雪社区
|
||||
|
||||
|
||||
|
||||
# 往期推荐
|
||||
|
||||
1、[安卓壳学习记录(下)-某加固免费版分析](https://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458592613&idx=2&sn=3509d0611c62f7922a97536583bcd512&scene=21#wechat_redirect)
|
||||
|
||||
|
||||
2、[逆向分析:Win10 ObRegisterCallbacks的相关分析](https://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458592612&idx=1&sn=8ddae3ae29238d0dd594884189b49468&scene=21#wechat_redirect)
|
||||
|
||||
|
||||
3、[VMP入门:VMP1.81 Demo分析](https://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458592604&idx=1&sn=4de551ee6b16fbe78d48fdf7bdfa110c&scene=21#wechat_redirect)
|
||||
|
||||
|
||||
4、[腾讯2025游戏安全PC方向初赛题解](https://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458592525&idx=1&sn=6420cca04db12b6f15b463c61862ece9&scene=21#wechat_redirect)
|
||||
|
||||
|
||||
5、[OLLVM 攻略笔记](https://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458592514&idx=1&sn=937fcf5982a3530520507249573a1f22&scene=21#wechat_redirect)
|
||||
|
||||
|
||||
6、[安卓壳学习记录(上)](https://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458592509&idx=1&sn=eda8cd88f250fecb4ece647b801642e7&scene=21#wechat_redirect)
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
**球分享**
|
||||
|
||||

|
||||
|
||||
**球点赞**
|
||||
|
||||

|
||||
|
||||
**球在看**
|
||||
|
||||
|
||||

|
||||
|
||||
点击阅读原文查看更多
|
||||
|
115
doc/2025-05/【安全圈】TensorRT-LLM高危漏洞可导致攻击者远程执行代码.md
Normal file
115
doc/2025-05/【安全圈】TensorRT-LLM高危漏洞可导致攻击者远程执行代码.md
Normal file
@ -0,0 +1,115 @@
|
||||
# 【安全圈】TensorRT-LLM高危漏洞可导致攻击者远程执行代码
|
||||
安全圈 2025-05-04 11:00
|
||||
|
||||

|
||||
|
||||
|
||||
**关键词**
|
||||
|
||||
|
||||
|
||||
漏洞
|
||||
|
||||
|
||||
NVIDIA 在其 TensorRT-LLM 框架中披露并修补了一个高严重性漏洞,该漏洞可能允许具有本地访问权限的攻击者执行恶意代码、篡改数据并可能破坏 AI 系统。
|
||||
|
||||

|
||||
|
||||
该漏洞被跟踪为 CVE-2025-23254,影响 Windows、Linux 和 macOS 平台上 0.18.2 之前的所有 TensorRT-LLM 版本。
|
||||
## TensorRT-LLM Python Executor 不安全的 pickle 处理
|
||||
|
||||
安全研究人员在 TensorRT-LLM 的 Python executor 组件中发现了一个严重缺陷,特别是在其基于套接字的进程间通信 (IPC) 系统中。
|
||||
|
||||
该漏洞源于对 Python 的 pickle 序列化/反序列化机制的不安全处理,该机制在处理不受信任的数据时以其安全风险而广为人知。
|
||||
|
||||
CVE 的 CVSS 基本分数为 8.8,将其归类为高严重性。它属于常见弱点枚举类别 CWE-502(不受信任数据的反序列化),这是一个可能导致远程代码执行的已知漏洞类别。
|
||||
|
||||
“任何平台的 NVIDIA TensorRT-LLM 都包含 python executor 中的漏洞,攻击者可能会通过本地访问 TRTLLM 服务器导致数据验证问题”,NVIDIA 在其安全公告中警告说。
|
||||
|
||||
“成功利用此漏洞可能导致代码执行、信息泄露和数据篡改”。
|
||||
|
||||
NVIDIA 感谢 Oligo Security 的 Avi Lumelsky 负责任地报告了该漏洞。
|
||||
|
||||
<table><tbody><tr style="box-sizing: border-box;background-color: rgb(240, 240, 240);"><td style="box-sizing: border-box;padding: 2px 8px;border: 1px solid rgba(0, 0, 0, 0);word-break: break-word;"><strong msttexthash="14330498" msthash="69" style="box-sizing: border-box;font-weight: bold;"><span leaf="">风险因素</span></strong></td><td style="box-sizing: border-box;padding: 2px 8px;border: 1px solid rgba(0, 0, 0, 0);word-break: break-word;"><strong msttexthash="3259074" msthash="70" style="box-sizing: border-box;font-weight: bold;"><span leaf="">详</span></strong></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;padding: 2px 8px;border: 1px solid rgba(0, 0, 0, 0);word-break: break-word;"><section><span leaf="">受影响的产品</span></section></td><td style="box-sizing: border-box;padding: 2px 8px;border: 1px solid rgba(0, 0, 0, 0);word-break: break-word;"><section><span leaf="">NVIDIA TensorRT-LLM(0.18.2 之前的 Windows、Linux、macOS 版本)</span></section></td></tr><tr style="box-sizing: border-box;background-color: rgb(240, 240, 240);"><td style="box-sizing: border-box;padding: 2px 8px;border: 1px solid rgba(0, 0, 0, 0);word-break: break-word;"><section><span leaf="">冲击</span></section></td><td style="box-sizing: border-box;padding: 2px 8px;border: 1px solid rgba(0, 0, 0, 0);word-break: break-word;"><section><span leaf="">代码执行、信息泄露、数据篡改</span></section></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;padding: 2px 8px;border: 1px solid rgba(0, 0, 0, 0);word-break: break-word;"><section><span leaf="">利用先决条件</span></section></td><td style="box-sizing: border-box;padding: 2px 8px;border: 1px solid rgba(0, 0, 0, 0);word-break: break-word;"><section><span leaf="">对 TRTLLM 服务器的本地访问 (AV:L)、低攻击复杂性 (AC:L)、低权限 (PR:L)</span></section></td></tr><tr style="box-sizing: border-box;background-color: rgb(240, 240, 240);"><td style="box-sizing: border-box;padding: 2px 8px;border: 1px solid rgba(0, 0, 0, 0);word-break: break-word;"><section><span leaf="">CVSS 3.1 分数</span></section></td><td style="box-sizing: border-box;padding: 2px 8px;border: 1px solid rgba(0, 0, 0, 0);word-break: break-word;"><section><span leaf="">8.8 (高)</span></section></td></tr></tbody></table>## 技术开发路径
|
||||
|
||||
该漏洞特别涉及 Python 的 pickle 模块,该模块可以在反序列化过程中通过 __reduce__() 方法执行任意函数。
|
||||
|
||||
在 TensorRT-LLM 的案例中,对服务器具有本地访问权限的攻击者可以制作恶意序列化数据,当这些数据被应用程序反序列化时,将以正在运行的进程的权限执行任意代码。
|
||||
|
||||

|
||||
|
||||
|
||||
TensorRT-LLM 的 IPC 实现中的 ZeroMqQueue 类特别容易受到攻击,因为它使用 pickle 跨进程序列化和反序列化数据,而无需进行适当的验证。
|
||||
## 已发布的补丁
|
||||
|
||||
NVIDIA 于 2025 年 4 月 29 日发布了 0.18.2 版本,该版本在基于 socket 的 IPC 系统中默认实现了 HMAC(Hash-based Message Authentication Code)加密。
|
||||
|
||||
此安全增强功能通过在反序列化之前验证序列化数据的完整性来防止漏洞被利用。
|
||||
|
||||
该公司强烈建议所有用户立即更新到 0.18.2 或更高版本,并警告“禁用此功能将使您容易受到安全问题的影响”。
|
||||
|
||||
对于无法立即升级的用户,NVIDIA 指出可以手动禁用加密功能,但强烈建议不要这样做:
|
||||
|
||||
在 main 分支上,客户可以在 tensorrt_llm/executor/ipc.py 下的类 ZeroMqQueue 中设置 use_hmac_encryption = False。在 0.18 版本中,客户可以在 tensorrt_llm/executor.py 下的类 ZeroMqQueue 中设置 use_hmac_encryption = False。
|
||||
|
||||
此漏洞凸显了 AI 框架中日益增长的安全挑战,尤其是那些处理复杂模型作的框架。
|
||||
|
||||
TensorRT-LLM 广泛用于加速生成式 AI 的大型语言模型,显著提高生产应用程序的性能。
|
||||
|
||||
敦促使用 TensorRT-LLM 的组织立即实施该补丁,以保护其 AI 基础设施免受潜在利用。
|
||||
|
||||
|
||||
END
|
||||
|
||||
|
||||
阅读推荐
|
||||
|
||||
|
||||
[【安全圈】国家网络安全通报中心公布境外恶意网址和IP](https://mp.weixin.qq.com/s?__biz=MzIzMzE4NDU1OQ==&mid=2652069416&idx=1&sn=515cc01e2351fc7bc0f1b62da0313900&scene=21#wechat_redirect)
|
||||
|
||||
|
||||
|
||||
[【安全圈】迪士尼1.1TB数据泄露](https://mp.weixin.qq.com/s?__biz=MzIzMzE4NDU1OQ==&mid=2652069416&idx=2&sn=f807df4735b9462cfb11efeda17a97a3&scene=21#wechat_redirect)
|
||||
|
||||
|
||||
|
||||
[【安全圈】英国多家零售商遭遇网络黑客攻击](https://mp.weixin.qq.com/s?__biz=MzIzMzE4NDU1OQ==&mid=2652069416&idx=3&sn=54ab1afc45b0f52d9482d1ff5ad86d27&scene=21#wechat_redirect)
|
||||
|
||||
|
||||
|
||||
[【安全圈】IPv6 网络功能被滥用,劫持腾讯等软件更新重定向下载恶意软件](https://mp.weixin.qq.com/s?__biz=MzIzMzE4NDU1OQ==&mid=2652069404&idx=1&sn=d894f9dd38ef94ee8376915b211e1989&scene=21#wechat_redirect)
|
||||
|
||||
|
||||
|
||||
[【安全圈】迪士尼前员工因入侵服务器并篡改餐厅菜单获刑三年](https://mp.weixin.qq.com/s?__biz=MzIzMzE4NDU1OQ==&mid=2652069404&idx=2&sn=d97069dd6bc0436c493dbba070d8c913&scene=21#wechat_redirect)
|
||||
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
**安全圈**
|
||||
|
||||

|
||||
|
||||
|
||||
←扫码关注我们
|
||||
|
||||
**网罗圈内热点 专注网络安全**
|
||||
|
||||
**实时资讯一手掌握!**
|
||||
|
||||
|
||||

|
||||
|
||||
**好看你就分享 有用就点个赞**
|
||||
|
||||
**支持「****安全圈」就点个三连吧!**
|
||||
|
||||

|
||||
|
||||
|
@ -1,13 +1,10 @@
|
||||
# 一行代码即可让iPhone“变砖”:iOS高危漏洞解析
|
||||
FreeBuf 2025-05-03 10:03
|
||||
|
||||

|
||||
|
||||
商密君 2025-05-04 11:45
|
||||
|
||||
iOS系统存在一个高危漏洞(CVE-2025-24091),恶意应用仅需执行一行代码即可永久禁用iPhone。该漏洞通过操作系统的Darwin通知机制触发无限重启循环,导致设备"变砖",必须通过完整系统恢复才能修复。
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
**01**
|
||||
@ -17,7 +14,11 @@ iOS系统存在一个高危漏洞(CVE-2025-24091),恶意应用仅需执行
|
||||
**Darwin通知系统漏洞分析**
|
||||
|
||||
|
||||
该漏洞利用了CoreOS层的底层消息机制——Darwin通知。与常见的NSNotificationCenter或NSDistributedNotificationCenter不同,Darwin通知属于苹果操作系统的遗留API(应用程序接口),工作在系统底层。
|
||||
该漏洞利用了
|
||||
CoreOS
|
||||
层的底层消息机制——Darwin通知。与常见的NSNotificationCenter或NSDistributedNotificationCenter不同,Darwin通知属于苹果操作系统的遗留API(
|
||||
应用程序接口
|
||||
),工作在系统底层。
|
||||
|
||||
|
||||
发现该漏洞的安全研究员Guilherme Rambo解释:"Darwin通知更为基础,属于CoreOS层组件,为苹果系统进程间提供简单的底层消息交换机制。"
|
||||
@ -36,7 +37,7 @@ iOS系统存在一个高危漏洞(CVE-2025-24091),恶意应用仅需执行
|
||||
攻击代码异常简单,仅需执行以下单行指令即可触发漏洞:
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
执行后设备将强制进入"恢复中"状态。由于实际未进行恢复操作,该过程必然失败并提示用户重启设备。研究人员创建了名为"VeryEvilNotify"的概念验证攻击,将漏洞利用代码植入小组件扩展。
|
||||
@ -48,8 +49,7 @@ iOS系统存在一个高危漏洞(CVE-2025-24091),恶意应用仅需执行
|
||||
通过将漏洞代码植入发送通知后反复崩溃的小组件,研究人员构建了持久性攻击——每次重启后都会触发攻击,形成使设备无法使用的无限循环。
|
||||
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
|
||||
**03**
|
||||
@ -65,7 +65,11 @@ iOS系统存在一个高危漏洞(CVE-2025-24091),恶意应用仅需执行
|
||||
|
||||
- 发送进程需持有"com.apple.private.darwin-notification.restrict-post."格式的受限授权
|
||||
|
||||
这并非苹果系统首次出现Darwin相关漏洞。此前卡巴斯基实验室曾发现"Darwin Nuke"漏洞,攻击者可通过特制网络数据包发起远程拒绝服务攻击。
|
||||
这并非苹果系统首次出现Darwin相关漏洞。此前
|
||||
卡巴斯基实验室
|
||||
曾发现"Darwin Nuke"漏洞,攻击者可通过特制网络数据包发起远程
|
||||
拒绝服务攻击
|
||||
。
|
||||
|
||||
|
||||
强烈建议所有iPhone用户立即升级至iOS 18.3或更高版本。早期版本设备仍面临攻击风险,攻击可能通过App Store或其他渠道分发的看似无害的应用或小组件实施。
|
||||
@ -74,45 +78,42 @@ iOS系统存在一个高危漏洞(CVE-2025-24091),恶意应用仅需执行
|
||||
该案例凸显了移动操作系统持续面临的安全挑战——即使简单且被忽视的遗留API,若未妥善保护也可能构成重大风险。
|
||||
|
||||
|
||||

|
||||
编辑:陈十九
|
||||
|
||||
审核:商密君
|
||||
|
||||
**征文启事**
|
||||
|
||||
大家好,为了更好地促进同业间学术交流,商密君现开启征文活动,只要你对商用密码、网络安全、数据加密等有自己的独到见解和想法,都可以积极向商密君投稿,商密君一定将您的声音传递给更多的人。
|
||||
|
||||
|
||||
[](https://mp.weixin.qq.com/s?__biz=MzI5NTM4OTQ5Mg==&mid=2247633989&idx=1&sn=cd6647451cec618b20dd28533702603b&scene=21#wechat_redirect)
|
||||
|
||||
|
||||
点击购买《2023-2024中国商用密码产业发展报告》
|
||||
|
||||
[](https://mp.weixin.qq.com/s?__biz=MjM5NjA0NjgyMA==&mid=2651319699&idx=1&sn=127e9ca1a8d55931beae293a68e3b706&scene=21#wechat_redirect)
|
||||

|
||||
|
||||
[](https://mp.weixin.qq.com/s?__biz=MjM5NjA0NjgyMA==&mid=2651319086&idx=1&sn=e2ff862babd7662c4fa06b0e069c03f2&scene=21#wechat_redirect)
|
||||
来源:
|
||||
FreeBuf
|
||||
|
||||
[](https://mp.weixin.qq.com/s?__biz=MjM5NjA0NjgyMA==&mid=2651319257&idx=1&sn=a603c646a53e3a242a2e79faf4f06239&scene=21#wechat_redirect)
|
||||
注:内容均来源于互联网,版权归作者所有,如有侵权,请联系告知,我们将尽快处理。
|
||||
|
||||

|
||||
|
||||
|
||||

|
||||
|
||||
|
||||

|
||||
|
||||
点分享
|
||||
|
||||

|
||||

|
||||
|
||||
点点赞
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||

|
||||
点在看
|
||||
|
||||
|
164
doc/2025-05/分享短信轰炸漏洞小窍门.md
Normal file
164
doc/2025-05/分享短信轰炸漏洞小窍门.md
Normal file
@ -0,0 +1,164 @@
|
||||
# 分享短信轰炸漏洞小窍门
|
||||
LA安全 网络安全者 2025-05-04 16:00
|
||||
|
||||
暗月渗透测试07文件上传篇11篇合集下载
|
||||
|
||||
链接:https://pan.quark.cn/s/a9f46e6185ce
|
||||
|
||||

|
||||
|
||||
|
||||
===================================
|
||||
免责声明请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。个人微信:ivu123ivu
|
||||
最近在对一批系统搞渗透测试,发现很大一部分系统都存在短信接口,若服务器未做有效校验,则可造成短时间内向目标手机发送大量垃圾短信的情况。
|
||||
|
||||

|
||||
|
||||
就像这个样子,会消耗客户的短信资源,而且万一被黑客利用的话,会被拿去做其他违法的事情,比如调用这个接口做定向的短信轰炸。
|
||||
|
||||
那么,我们针对一个短信接口进行测试的时候,有什么小窍门呢?
|
||||
|
||||
首先我们应该知道,一般短信轰炸都会存在于网站的注册页面,认证页面。如果上述页面存在验证码获取功能,那么我们可以针对性地进行测试。
|
||||
|
||||
一、手工测试
|
||||
|
||||
我们可以使用抓包工具(如
|
||||
Burp Suite
|
||||
)拦截发送验证码的数据包,并进行多次重放攻击,观察是否能在短时间内连续收到多条短信。这也是大多数都在用的测试方法。
|
||||
|
||||

|
||||
|
||||
二、自动化工具
|
||||
|
||||
如果手工验证不存在或者被拦截的话,可以利用专门的插件或脚本如SMS_Bomb_Fuzzer
|
||||
,
|
||||
https://github.com/yuziiiiiiiiii/SMS_Bomb_Fuzzer
|
||||
)对短信接口进行自动化
|
||||
Fuzz
|
||||
测试,尝试绕过各种限制。
|
||||
|
||||
三、尝试绕过
|
||||
|
||||
除了上述的两个方法外,我们还可以使用人工绕过的方法去进行测试。
|
||||
|
||||
(1)
|
||||
|
||||
参数污染:后台发送短信时会提取数字部分,当混入其他字符之后可能绕过对已发送手机号码的限制校验。例如,可以在手机号码中加入特殊符号或者字母。
|
||||
|
||||
(2)
|
||||
|
||||
编码绕过:通过
|
||||
URL
|
||||
编码或者其他编码方式改变手机号的表现形式,从而绕过后台对手机号的校验。例如,将手机号的一部分数字进行
|
||||
URL
|
||||
编码。
|
||||
|
||||
例:
|
||||
```
|
||||
GET /send_code?phone=%31%3769999999 HTTP/1.1
|
||||
Host: example.com
|
||||
```
|
||||
|
||||
|
||||
(3)
|
||||
|
||||
并发请求:在短时间内发起大量的并发请求,试图突破服务器的频率限制
|
||||
|
||||
(4)
|
||||
|
||||
Cookie/Session
|
||||
操作:修改或者替换请求中的
|
||||
Cookie
|
||||
或者
|
||||
Session
|
||||
信息,使得服务器认为每次请求来自不同的用户。
|
||||
|
||||
(5)
|
||||
|
||||
IP
|
||||
伪装:使用代理池或者
|
||||
Tor
|
||||
网络等方式隐藏真实
|
||||
IP
|
||||
地址,避免因单个
|
||||
IP
|
||||
频繁请求而被封禁。
|
||||
|
||||
(6)
|
||||
|
||||
User-Agent
|
||||
变换:改变
|
||||
HTTP
|
||||
请求头中的
|
||||
User-Agent
|
||||
字段,模拟不同的浏览器或设备访问。
|
||||
|
||||
这里给大家准备了一些不同的
|
||||
User-Agent
|
||||
字段
|
||||
|
||||
Chrome浏览器(Windows 10)
|
||||
```
|
||||
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
|
||||
```
|
||||
|
||||
|
||||
Firefox浏览器(Windows 10)
|
||||
```
|
||||
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0
|
||||
```
|
||||
|
||||
|
||||
Safari浏览器(MacOS Big Sur)
|
||||
```
|
||||
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Safari/605.1.15
|
||||
```
|
||||
|
||||
|
||||
Edge浏览器(Windows 10)
|
||||
```
|
||||
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67
|
||||
```
|
||||
|
||||
|
||||
Opera浏览器(Windows 10)
|
||||
```
|
||||
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 OPR/78.0.4093.184
|
||||
```
|
||||
|
||||
|
||||
Internet Explorer 11(Windows 10)
|
||||
```
|
||||
Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
|
||||
```
|
||||
|
||||
|
||||
当然,我们可以将上述多种方法结合使用,这样有助于我们提高绕过的成功率。
|
||||
|
||||
除了常见的注册、登录和找回密码功能外,还应关注其他可能涉及短信发送的功能点,如订单确认、活动参与等。
|
||||
|
||||
小结:短信轰炸漏洞是一个较为常见的
|
||||
web
|
||||
漏洞,我们发现之后应该及时反馈开发,让其进行修复,以下是修复方法。
|
||||
|
||||
1.
|
||||
|
||||
合理配置后台短信服务器的功能,首先验证手机号格式是否正确,其次对于同一手机号码,每次发送短信的间隔应至少为
|
||||
60
|
||||
秒,且十分钟内最多发送三次短信;
|
||||
|
||||
2.
|
||||
|
||||
短信发送页面应加入图形验证码等验证方式。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
**·****今 日 推 荐**
|
||||
**·**
|
||||
|
||||
|
||||

|
||||
|
||||
|
361
doc/2025-05/小程序渗透记录 通过细节挖掘漏洞的艺术.md
Normal file
361
doc/2025-05/小程序渗透记录 通过细节挖掘漏洞的艺术.md
Normal file
@ -0,0 +1,361 @@
|
||||
# 小程序渗透记录 通过细节挖掘漏洞的艺术
|
||||
一天要喝八杯水 无影安全实验室 2025-05-04 04:51
|
||||
|
||||
免责声明:
|
||||
本篇文章仅用于技术交流,
|
||||
请勿利用文章内的相关技术从事非法测试
|
||||
,
|
||||
由于传播、利用本公众号无影安全
|
||||
实验室所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号无影安全实验室及作者不为此承担任何责任,一旦造成后果请自行承担!
|
||||
如有侵权烦请告知,我们会立即删除并致歉。谢谢!
|
||||
|
||||
|
||||
|
||||
朋友们现在只对常读和星标的公众号才展示大图推送,建议大家把"**无影安全实验室**
|
||||
"设为星标,这样更新文章也能第一时间推送!
|
||||
|
||||

|
||||
|
||||
|
||||
安全文章
|
||||
|
||||
|
||||
|
||||
```
|
||||
原文于:https://forum.butian.net/share/4229
|
||||
原文作者:一天要喝八杯水
|
||||
```
|
||||
### 低价享受高价
|
||||
|
||||
锁定一个购票小程序.购买出行船票或车票时都区分为 二等座 一等座 包括舱位、上下卧铺价格也不同上,包括成人价格 儿童老年人优惠等,站点特征明显,厚码叠甲 选择一个目的地出行,然后下单记录数据包
|
||||
|
||||

|
||||
|
||||
选择一个目的地BP记录到了创建订单的接口shipgateway/shipOrderApi/createOrder 创建订单观察到并没有sign
|
||||
校验字段,存在问题可能性较大。遂将这个接口发送到重发器进行修改测试
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
测试支付漏洞我喜欢搜索数据包price
|
||||
价格 每个字段都改变为最小的数字,再逐一发包创建新订单 但并未起效,订单也还是正常票价, 说明决定订单总价的字段并不是price
|
||||
而是订单其他参数,目的地、票价类型、乘客类型都有可能,;而后开始对每个存在字段的数字增增改改 观察到底是哪个字段可以影响订单的生成
|
||||
|
||||

|
||||
|
||||
修改到passengerType
|
||||
字段为2响应包显示 价格不匹配 ,根据字段意思推测这里决定用户的类型身份,正常情况的1为成人,2则是其他的类型得到响应包线索后,现在我需要知道其他passenger Type
|
||||
类型对应分别是哪些用户,业务提示很明显了,成人类型为1 那么ticketPrice
|
||||
票价为100
|
||||
业务推敲一下也就是对应下列
|
||||
|
||||

|
||||
|
||||
经过测试passengerType
|
||||
字段和ticketPrice
|
||||
价格字段挂购,二者需要一起修改,单独修改为固定的价格则会响应价格不匹配, 两个字段需要一起满足才能达到对应身份的票价
|
||||
```
|
||||
ticketPrice=票价 passengerType=成人类型成人: passengerType=1 && ticketPrice=100 儿童: passengerType=2 && ticketPrice=50长者: passengerType=3 && ticketPrice=50
|
||||
```
|
||||
|
||||
那么改两个字段为其他儿童类型所对应的价格,成功以成人身份证生成低价学生票订单,并且身份证还是原本成人
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
这个时候我想再提高一下危害, 既然订单的价格是由用户类型所关联的价格决定了,我是否可以自主的再次修改增值的业务参数呢?享受到最高的优惠, 船票分为上等中等, 利用普通订单价格享受高等舱位服务,通过对比普通舱订单和头等舱位订单定位到seatId
|
||||
字段决定了舱位等级
|
||||
```
|
||||
"seatId":1 # 普通舱"seatId":0 # 头等舱
|
||||
```
|
||||
|
||||

|
||||
|
||||
在中等舱数据包中,当我把三个字段都修改好后,订单虽然可以创建成功,但是舱位的类型还是中等舱,价格反而变成了头等舱的价格, 思考一下,既然在中等舱无法直接修改成高等舱,那我生成高等舱的订单,把它的用户类型、票价、舱位3个字段为最低的层面尝试绕过
|
||||
```
|
||||
"seatId":0 // 头等舱 passengerType=2 // 儿童类型ticketPrice=50 // 儿童票价
|
||||
```
|
||||
|
||||
当这样修改后就可以成功创建高等舱位的低价订单,后端只是校验了 决定价格字段和类型字段间是否是一一对应,对当前舱位字段没有限制, 可以单独的去修改seatId
|
||||
字段控制舱位价格
|
||||
```
|
||||
"seatId":1 // 中等舱passengerType=2 // 儿童类型ticketPrice=50 // 儿童票价
|
||||
```
|
||||
|
||||

|
||||
|
||||
成功生成正常可以支付的订单
|
||||
|
||||

|
||||
|
||||

|
||||
### 0元购思路
|
||||
|
||||
同样还是这个业务站点,有的船票是存在携童免费措施的,有的没有,那么将我的身份伪造为更低的是不是就可以0元上船呢
|
||||
|
||||

|
||||
|
||||
但是这里不能直接通过上面的手法修改类型、价格, 测试发现决定是否免费的关键是身份证的处理,身份证需要是儿童的出生年月,但是添加乘客接口是身份证大多是实名认证,我不清楚验证的原理是什么,按道理前端了身份证号对应的身份证,说明是后端查询到了, 但是我在BP里面拦截这个数据包又可以修改,说明并没有走后端,那么一开始的前端验证是什么逻辑呢,有懂的师傅可以解释一下,难道身份证认证的接口放到前端查询吗,可能是调用了身份证的接口
|
||||
|
||||

|
||||
|
||||
首先添加正常的乘客信息绕过验证,找到添加的数据包 修改身份证和日期为儿童的,往大了写就可以,这一步如果身份证有婴儿身份证的话可以不用,或者自己有牛逼的sgk
|
||||
|
||||

|
||||
|
||||
那么现在已经有了儿童的身份了,但是还需要在下单的时候把身份证修改回来,不然买的票身份证不是自己的买了也没用,找到一处可以携童免费的船票,选择上面添加的携带乘客信息,选择免费的票
|
||||
|
||||

|
||||
|
||||
儿童免费票不能独立购买需要携带一名成人,正常添加一名成人乘客,然后正常下单记录接口
|
||||
|
||||

|
||||
|
||||
抓取到创建订单接口发送重发器,上方为添加的成人,下面则是免费的儿童身份儿童身份证,出生年月为自己修改的2022年身份证
|
||||
|
||||

|
||||
|
||||
朴实无华的将出生年月及其身份证号修改为自己本人的身份发包,成功创建订单
|
||||
|
||||

|
||||
|
||||
一份钱买两个成人的票 0元上船,但是无奈这个点后续虽然可以支付订单 但是会自动退票,或者会有人工客服打电话来,审核回应SRC
|
||||
排查过这个点
|
||||
|
||||

|
||||
### 输出点思考
|
||||
|
||||
生成订单后出现的订单号,查询订单的接口会回显当前订单的乘客信息三要素,经过大小号替换订单号测试,是可以越权查询到他人的订单信息要素的,但是此订单号无法遍历,在网站其他功能点都没有找到可以出现订单号的地方,评论区 投诉 都没有
|
||||
|
||||

|
||||
|
||||
虽然无法利用,但是这个接口引发了另一种思考,订单号查询正常只返回订单对应乘客信息,但是这里却返回了用户的凭证字段
|
||||
```
|
||||
"openId" : "xxxxx","unionId" : "xxxxx"
|
||||
```
|
||||
|
||||
这两个字段都是鉴权字段,有了此字段的就可以跟替换Cookie一样替换别人的身份其他人的,操作此小程序所有增删改查功能点,当前虽然开着Hae但并没有相关的规则字段正则所以匹配不到,真的是细心才能发现,如果这个订单接口可以继续利用遍历的话,再结合返回的这两个字段,整个小程序用户信息全部会被接管,所有乘客三要素包括小程序所有功能点
|
||||
|
||||

|
||||
|
||||
**总结**
|
||||
|
||||
虽然这个订单接口无法遍历继续的去利用,但却有了新的思考,不经意的响应包可能会带出其他的信息,发在攻防社区另一篇文章,
|
||||
https://forum.butian.net/share/4163
|
||||
介绍了这个情况,借鉴了L@2uR1te师傅的文章《如何寻找参数的蛛丝马迹》
|
||||
[https://mp.weixin.qq.com/s/kSxl_VM2dQbkBQEE_DQrPQ](https://mp.weixin.qq.com/s?__biz=MzkzNTUwNTg2Ng==&mid=2247483882&idx=1&sn=7bec8923088f61f371bcd425f3067956&scene=21#wechat_redirect)
|
||||
|
||||
讲的很清楚,输出的参数拿到输入点去使用会有不一样的惊喜,只要一个点可以越权查看到别人的某些东西,把他人信息的铭感的参数收集下来替换到其他输出点使用,尝试是否能看到对应的信息,鉴权字段往往不是每一个功能都固定的,它可以接收某些其他参数发送请求, 在我看到输出订单号可以返回铭感信息后,第一时间就是找其他输出其他用户信息的功能,评论区 投诉这些,和这个思路是相同的
|
||||
### 全站收货地址泄露
|
||||
|
||||
日常逛资产,挑选到功能点相对多的小程序,业务是购买商品,有很多的支付漏洞包括逻辑漏洞可以测试
|
||||
|
||||

|
||||
|
||||
测试到地址管理功能点下列是查看我自己的地址list
|
||||
出现了地址的id号 13313 13314
|
||||
不等,小程序功能点大多使用JWT
|
||||
鉴权,对JWT
|
||||
尝试了常见攻击手段均无法绕过,
|
||||
```
|
||||
/buyer/address/list/
|
||||
```
|
||||
|
||||

|
||||
|
||||
测试小程序购买商品功能 正常选择收货地址,然后正常下单记录数据包
|
||||
|
||||

|
||||
|
||||
buyer/product/retail/submitOrderPa接口记录的参数是商品的价格还有斤数,都是明文的信息 直接一手0元购测试没有效果都和后端做了校验
|
||||
|
||||

|
||||
|
||||
但是注意看这里的addrId
|
||||
不就是对应了收货地址的id
|
||||
嘛,都是可以遍历的收货id
|
||||
将它修改为其他地址的id
|
||||
那么再生成订单是不是可以成功看到别人的地址呢,修改为12000
|
||||
,然后生成订单回到小程序看订单收货地址
|
||||
|
||||

|
||||
|
||||
成功的拿到他人收货地址包括手机号
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
手机号是脱敏的手机号,提上去肯定是危害没那么大的, 不过一般都是前端脱敏的,可以强开F12看看源代码,因为在这个站测的比较久业务点也明白,利用一个查询订单号的接口就可以得到脱敏的信息,得到了别人的信息就可以利用其他的功能点扩展,这也是上文我也说的思路
|
||||
|
||||
通过这两个创建订单接口和查询订单接口拿下全站收货地址包括二要素信息
|
||||
|
||||

|
||||
|
||||

|
||||
### 简单的0元
|
||||
|
||||
经典日常补天找项目打猎(捡垃圾),公司名直接微小程序,名称对大多不会搜错(这里翻车),功能点文创商品可以购买
|
||||
|
||||

|
||||
|
||||
选择一个最贵的商品选择下单支付 停留在待支付页面打开我们的BP
|
||||
捕获后面的数据包
|
||||
|
||||

|
||||
|
||||
在支付界面打开BP
|
||||
拦截,拦截每一步请求找到决定价格的数据包
|
||||
|
||||

|
||||
|
||||
看到totalFee
|
||||
费用 直接修改totalFee
|
||||
字段总费用为10
|
||||
也就是1分钱,放掉所有包直到出现扫码二维码
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
扫码支付成功0元
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
难掩激活火速通知好基友 今晚摆两桌,这种改价格的洞被我捡到了
|
||||
|
||||

|
||||
|
||||
老实了 厂商限定了测试的域名当时没注意看,因为很多域名想着应该不会歪, 结果去资产列表CTRL+F
|
||||
完全对不上host
|
||||
,反应了前期信息收集的重要性,撤回摆两桌 只能恰两个馒头了
|
||||
|
||||

|
||||
### %模糊查询配合size 信息泄露
|
||||
|
||||
经典小程序开局注册并登录.打开BP记录所有功能点数据包
|
||||
|
||||

|
||||
|
||||
输入一个符号*模糊查询 匹配到所有公司 BURP抓到了记录铭感信息的数据包
|
||||
|
||||

|
||||
|
||||
把这个包发送到发器 数据很少 只有十几条数据
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
修改这个请求的size字段=9999 让显示的公司字节数据变多,使其显示更多的铭感信息
|
||||
|
||||

|
||||
|
||||
拿下推荐岗位功能所有公司联系人的二要素信息
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
其他功能点均存在此问题,大部分都是页面只能看到企业联系人姓名,打电话联系也是虚拟号码,但是在响应体中确会显示所有的手机号码和姓名,小程序业务也是求职里面包含大量的公司企业,通过响应包缺陷+模糊查询*+size字节+Hae神器匹配整站企业联系人二要素全部泄露,并未全部列出但目测2w+条
|
||||
|
||||
培训模块
|
||||
|
||||

|
||||
|
||||
大龄工作
|
||||
|
||||

|
||||
|
||||
社会招聘
|
||||
|
||||

|
||||
|
||||
见习岗位
|
||||
|
||||

|
||||
|
||||
..........
|
||||
### 论坛渗透
|
||||
|
||||
经授权对一个社区论坛测试,不得不说 除了SRC外 互联网站点大多比较脆弱,如果有技术并且又不老实的 犯罪成本太低了,网络安全任重而道远,基本全是简单的鉴权问题,有的是压根没鉴权,有的鉴权字段写了但是并没有生效,简单记录几个有代表性的问题
|
||||
|
||||

|
||||
#### 帖子置顶0元购
|
||||
|
||||
BURP渗透抓包工具抓取小程序的数据包 在主页点击发帖功能 ,下面有一个功能是花钱对帖子置顶
|
||||
|
||||

|
||||
|
||||
随意输入帖子的文案 然后点击发布后置顶[/api/client/topics/pay_configs] 接口显示出了对应的价格字段还有所持续的时间
|
||||
|
||||

|
||||
|
||||
正常走发布帖子的流程,记录所有接口 这个接口数据包回显了对应的价格字段 并且没有对应的sing或者加密一类的东西和后端做校验,等于是前端校验价格还有置顶的时间,然后后端就返回了生成订单,那么我们篡改价格并且拉成时间就造成了漏洞问题了 /api/client/topic_top_orders
|
||||
|
||||

|
||||
|
||||
修改对应的价格还有时间 会生成新的订单号,完全前端校验
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
发布帖子置顶付款的业务流程是这样的三个接口
|
||||
```
|
||||
/api/client/topics 帖子内容文字和标签/api/client/topic_top_orders 置顶的价格生成订单号 这里进行篡改payment/wechat/preorder/topictop/tp2025021408581339 请求后端付款
|
||||
```
|
||||
|
||||
第三步接口利用第二步生成的订单号去跟后端请求,后端反馈加密还有付款的信息,但是这里加密完全没有作用,哪怕是一个空订单后端都会返回支付参数,加密完全是摆设,订单号也没有做比对
|
||||
|
||||

|
||||
|
||||
知晓了业务流程后续就是BP抓取生成订单的数据包 api/client/topic_top_orders 进行拦截篡改操作 价格改小就可以完成0元购,点击付费 就会拦截数据包修改价格然后一直放行就行了出现付款的选择 选择二维码支付 扫描付款就行了
|
||||
|
||||

|
||||
#### 文件上传泄露阿里云sts
|
||||
|
||||
在每一个上传图片的功能点 头像 帖子 图片 上传会后端会返回阿里云的sts临时凭证 ak sk 还有存储桶的信息
|
||||
|
||||

|
||||
|
||||
有了这些信息最大是危害是利用凭证登录这个阿里云桶从而接管整个小程序里面存储的图片信息,或者是利用脚本来进行覆盖小程序内所有的图片
|
||||
```
|
||||
api/common/ali_oss/temp_sign?scenc=1
|
||||
```
|
||||
|
||||

|
||||
#### 越权让任意跑腿者主动接单
|
||||
|
||||
小程序存在跑腿赚钱功能,用可以接单的骑手号去接一个没有被接单的订单, 记录接单的请求
|
||||
|
||||

|
||||
|
||||
操作这个接口,替换订单号为任意的,跑腿者身份为别人的,可以任意指定谁去接谁的单,经过测试替换别人身份是可行的,订单号以及跑腿者的身份利用其他功能点的输出就可以得到
|
||||
```
|
||||
errand_order_no 当前订单是什么errander_id 跑腿者的身份
|
||||
```
|
||||
|
||||

|
||||
|
||||
最终也是打包报告并且辅助开发修复,美美结束
|
||||
|
||||

|
||||
### 总结
|
||||
|
||||
很喜欢师傅们口口相传的一句话,"你越安静 你听到的就越多",学习网络安全以来漏洞挖掘从0到1,从无到有,从一点也不会到勉强能测试,一直忽略直到可以时不时挖掘有效漏洞....,其中的历程磕磕绊绊但也饶有趣味,见过许多天才选手,CTF国内外各种赛事前几,大学生SRC年入几十,多场HW最佳攻击手,安全研究各种最新CVE,审计0day漏洞的.......,这些人让我望而却步但又无比渴望,心中只有一个疑问始终是他们为什么可以这么强,很想认识这样的人,很想成为这样的人,时间会诠释所有,学习任何技术知识都是孤独的,唯一慰藉的是做的是自己喜欢的事情以及许许多多志同道合的师傅在共同探讨,每当遇到问题网络上的师傅现实中的朋友都会给予指导,实战中前辈开发的工具插件,分享的安全公开笔记、漏洞挖掘思路都让我受益良多,从始至终都认为安全圈的学习氛围是非常好的,前人会把所学记录下来,后人站在前辈肩膀上又创造新的思路,天下万般绝学唯有恒心 希望我能在有限的时间内好好的提升自己,在未来为安全圈也能做出一些微不足道的贡献。
|
||||
|
||||
|
||||
|
||||
最后推荐一下内部
|
||||
小
|
||||
密圈,干货满满,物超所值,**内部圈子每增加100人,**
|
||||
|
||||
**价格将上涨20元,越早进越优惠!!!**
|
||||
|
||||

|
||||
|
Loading…
x
Reference in New Issue
Block a user