DVWA-SQL注入(附带脚本)
本人小白,这是学习的时候的一些笔记,如果哪里做的不好希望大家不吝赐教。
1、SQL注入产生原因:由于程序员过滤不严谨,导致用户可以输入SQL命令注入到数据库后台进行执行
2、危害:获得数据库中的信息
3、DVWA-LOW
(1)查看源代码:
可以看到并没有对用户输入的参数做任何的过滤,而是直接带入了查询.
(2)判断是字符型注入还是数字型
1、字符型
1、就是跟我们上边的哪个一样,用户输入的字符用引号或双引号括起来
2、字符型测试代码:1’ 、1’ and 1=1 1’and 1=2,不同情况也会有不同的测试代码,如果有单引号,那就是字符型了
3、我们通过通过源码可以得知我们的这个是字符型,我们输入的参数,在数据库会被执行成user_id=’1’
如果我们在1后边加一个’,就会变成user_id=’1’’
这样的查询语句是不合法的,所以就会报错。一旦报错,通过,’and 1=1 ‘and 1=2返回页面的不同来进一步确定漏洞的存在。
2、数字型
我们输入的参数没有通过引号或者单引号包括,所以可以直接进行语句的测试。and 1=1 and 1=2
数字型在后台的查询语句大致是:select admin from user where id = 1
(3)字段长度测试
测试语句:1' order by n# 其中的n就是要测试长度,返回的最后一个正确页面就是他的字段长度
函数解析:ordey by n :对序列进行排序,如果不存在n个序列则会报错
(4)联合查询爆表名
1、Payload:
1’union select 1,(select group_concat(table_name)from information_schema.tables where
table_schema=database())#
2、函数解析
union:将select的两个或多个值合并
group_concat:将返回的多个字符串连接成一个字符串
information_schema.tables:这是数据库中的一个表,其中存储着此数据库中的所有表
database():指的是当前使用的数据库
(5)、爆字段
1、查询语句
1'union select 1,(select group_concat(column_name)from information_schema.columns where table_schema = database() and table_name = 'users')#
2、参数解析
1、Column_name:字段名
2、information_schema.columns:这个表存放着所有的字段
(6)、爆字段值
union select user,password from users#
其中的密码是经过MD5加密的,直接在网上找一个MD5解密破解登陆即可
(7)、漏洞修复
1、限制用户的输入长度
2、过滤SQL语句、函数、单引号、斜杠…………
4、Medium
(1)代码审计
使用了mysql_real_escape_string对ID值进行过滤
此函数对输入的SQL语句进行转义,受转义的字符:单引号、双引号、\n、\r
但是他并没有用引号将ID值引起来,所以可以直接在它后边添加SQL语句。
又发现它是使用POST方式来提交,所以在URL中是不能看到也不能输入SQL语句的,要用到Burpsuite来进行一个拦截添加SQL语句。
(2)注入
和low基本一样,在爆表名的时候记得把database()转换成十六进制即可
5、High
(1)代码审计
使用了limit函数来对id的返回的值的条数进行限制,限制为1。
2、绕过方法:由于limit是在后边,所以我们可以使用注释符”#”来将其注释掉
(2)注入
跟Low一样
6、脚本
由于本人编程水平还有待提高,暂时只能写出这样的脚本,以后会更的。