写在前面
1.InnoDb引擎
从MySQL5.5.8开始,InnoDB成为其默认的存储引擎。而在MYSQL5.6以上的版本中,mysql数据库中的inndb增加了innodb_index_stats和innodb_table_stats两张表,这两张表中都存储了数据库和其数据表的信息,但是不会存储列名。其利用方式是:mysql.innodb_index_stats和mysql.innodb_table_stats。
2.sys数据库
在5.7以上的MYSQL中,新增了sys数据库,该库的基础数据是来自information_schema和performance_chema,因其本身是无法存储数据的,所以可以通过其中的schema_auto_increment_columns来获取表名。其用法是:sys.schema_auto_increment_columns
sys.schema_auto_increment_columns的相关描述如下:
开始了解这个视图前,希望您先回想过去当您在利用Mysql设计数据库时,是否会给每个表添加一个自增的id(或其他名字)字段呢?如果会,那小星发现了一个注入mysql后在默认情况下可以替代information_schema库的方法了。
schema_auto_increment_columns:该视图的作用简单总结为用于对表自增的ID进行监控。
无列名注入
1. 首先,如下图所示进行正常查询。
(1)当我们select 1,2,3的时候,此时页面就如一个虚拟的表格,列名为1,2,3。
(2)我们查询列名为1,2,3的数据。
(3)第一行是我们所查询到的1,2,3后面所紧接的表中数据。
2. select `2` from (select 1,2,3 union select * from user)a
将select 1,2,3的结果拼接到select * from user 的结果后提取第二列信息。select 1,2,3需要根据表的字段而定,也就是说当您进行查询时,语句的字段数必须保持和指定表中的字段数相同,不能增加或减少,否则将会出现报错告示。
语句的最后一个字母是别名,如图所示,您就可以查询到第二列的数据。在虚拟表中,列名均是1,2,3,所以我们在查询语句中不能直接使用 2,而是要使用 `2`, 只有通过此方式才能够获取到列名。
3. 在某些情况下,程序有可能会过滤反引号,使语句不能正常执行。但是,我们能通过别名以替代反引号。
as 取别名示例:
将select 1,2,3 union select * from user中要查询的一列,取其别名为b,类似与变量传参。
select (b) from (select 1,2,3 as b union select * from users)l
4. 通过group_concat将拼接字符串一同输出。
select group_concat(b) from (select 1,2,3 as b union select * from users)l
5. 以此作为在无传统列名情况下完成注入脱数据的标志。
6. 了解星云博创
星云博创科技有限公司(简称“星云博创”)成立于2016年,是国内新兴的网络安全产品、可信安全管理平台、专业安全服务与解决方案的综合提供商。星云博创设北京为北方总部,广州为南方总部,并于成都、合肥、南昌、贵州、武汉、太原、哈尔滨等多个城市设立分支机构。同时,星云博创为不断完善客户服务体系和应急响应体系,在全国10余个省、市、自治区、直辖市建立三级服务支持中心,7×24小时接受客户需求,及时提供标准一致的安全服务。
作为一家以技术先导的企业,星云博创始终坚持在网络安全、数据安全、态势感知、等级保护、合规性安全管理等领域进行技术创新,利用安全分析、大数据分析、人工智能等技术,对网络空间安全要素、安全风险进行深度挖掘与关联分析,构建了多层次的纵深防御体系,持续推出态势感知平台、静态脱敏系统、终端安全监测系统等一系列优秀的安全产品和行业解决方案,广泛应用于政府、运营商、医疗、教育、电力、能源等多个领域,让风险无所遁形。
星云博创已获得ISO9001、ISO27001、 ISO20000管理体系认证,CMMI5软件成熟度认证,信息系统安全集成服务、信息安全风险评估服务、软件安全开发服务资质的CCRC二级认证,及安全运维服务资质、应急处理服务资质的CCRC三级认证。此外,星云博创还是国家信息安全漏洞库(CNNVD)技术支撑单位、海南省网络安全应急技术支撑单位、广州市应急联动机构支撑单位。