本文最后更新于:2021年1月8日 晚上
SQL注入
1、MySQL入门
information_schema库
信息数据库。保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。
schemata表
提供了当前MySQL实例中所有数据库的信息。show databases的结果就是取之此表。
select * from information_schema.schemata;
tables表
提供了关于数据库中的表的信息包括视图。
select * from information_schema.tables where table_schema='table_name';
columns表:
提供了表中的列信息。详细描述了某张表的所有列的信息。
select * from information_schema.columns where table_schema='table_name';
mysql库
MySQL核心数据库,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。
performance_schema库
内存数据库,数据放在内存中直接操作的数据库。主要用于提高应用读写性能。
sys库
基于IP或用户查询资源使用情况。以及表的访问信息等。
SQl注入原理
SQL注入是发生于应用程序与数据库层的安全漏洞。如用户输入的数据被构造成恶意的SQL代码,Web应用又未对动态构造的SQL语句使用的参数进行审查,则会引发SQL注入。
GET型SQL注入漏洞
GET方法提交的内容会显示在网页URL上,通过对URL连接进行构造,获得超出权限信息的内容。
测试字段数量及回显的字段位置,替换选项,获取“使用的数据库用户”、“使用的数据库名称”、“当前数据库版本”、“当前使用的数据库表”
'union select 1,user(),table_name,database(),version(),6,7 from information_schema.tables where table_schema=database(); --+
POST型SQL注入漏洞
注入信息存储于HTTP实体内容而不是URL,通过改造实体内容,达到实际执行的SQL语句获取更多信息的目的。
5种不同的注入类型
Boolean-based blind SQL injection(布尔型注入)
?id=1 and substring(version(),1,1)=5
如果服务端MySQL版本是5.X,那返回的内容就和正常请求一样。
UNION query SQL injection(可联合查询注入)
?id=1 union all select schema_name from information_schema.schemata
最快捷的方法,通过union查询获取所有想要的数据,前提是返回中会携带SQL执行后查询到的内容,利用难度较大
Time-based blind SQL injection(基于时间延迟注入)
select * from user where id='4' and sleep(3);
通过判断请求的响应时间,判断SQL是否成功执行,常用于页面无回显的场景
Error-based SQL injection(报错型注入)
如果后端能返回SQL报错信息,则考虑使用报错型注入,如利用group by的duplicate entry错误。
Stacked querier SQL injection(可多语句查询注入)
?id=1;update t set name ='a' where id =1
能执行多条查询语句,非常危险,意味着可直接更新数据库。
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!