sql注入原理详解(一) (2)

      7、打开magic_quotes_gpc来防止SQL注入Magic_quotes_gpc=off;默认是关闭的,它打开后将自动把用户提交的sql语句的查询进行转换,把'转为\',这对防止sql注入有重大作用。

因此开启:magic_quotes_gpc=on;

      8、控制错误信息

关闭错误提示信息,将错误信息写到系统日志。

   9、使用mysqli或pdo预处理。

 一句话总结,看程序员把这些改规范的规范掉了,就是见缝插针。

3.怎样sql注入?

为了更直观的让大家了解到sql注入的原理,贴上一张sql注入攻击示意图

sql注入原理详解(一)

●SQL注入威胁表现形式可以体现为以下几点:

        ●绕过认证,获得非法权限

        ●猜解后台数据库全部的信息

        ●注入可以借助数据库的存储过程进行提权等操作

●SQL注入攻击的典型手段

        ●判断应用程序是否存在注入漏洞

        ●收集信息、并判断数据库类型

        ●根据注入参数类型,重构SQL语句的原貌

        ●猜解表名、字段名

        ●获取账户信息、攻击web或为下一步攻击做准备

二、SQL注入的简单例子

1.SQL注入漏洞的几种判断方法

        ①?id=40'

        ②?id=40 and 1=1

        ③?id=40 and 1=2

        如果执行①后,页面上提示报错或者提示数据库错误的话,说明是存在注入漏洞的。

        如果执行②后,页面正常显示,而执行③后,页面报错,那么说明这个页面是存在注入漏洞的。

因为正确的链接:?id=40没有问题,如果如果执行①后,页面上提示报错或者提示数据库错误的话说明是不满足条件,说明查询的条件不满足,是有一个查询语句的,明是存在注入漏洞,如果执行②后,页面正常显示,而执行③后,页面报错,那么说明这个页面是存在注入漏洞的。

2.收集信息、判断数据库类型

        从其返回的信息中可以判断下数据库的类型,更多可能可以知道部分数据库中的字段以及其他有用信息,为下一步攻击提供铺垫。

3.根据注入参数类型,重构SQL语句的原貌

        ①ID=40 这类注入的参数是数字型,那么SQL语句的原貌大致是:Select*from 表名 where 字段=40

        ②name=电影 这类注入的参数是字符型,SQL语句原貌大致是:Select*from 表名 where 字段=‘电影’

        ③搜索时没有过滤参数的,如keyword=关键字,SQL语句原貌大致是:Select*from 表名 where 字段 like ‘%关键字%’

4.猜解表名、字段名(直接将SQL语句添加到URL后)

        ①and exists(select*from 表名)

        如果页面没有任何变化,说明附加条件成立,那么就是说明猜解的表名正确,反之,就是不存在这个表,接下来就继续猜解,知道正确

        ②and exists(select 字段 from 表名)

        方法原理同上

        ③猜解字段内容(利用以上猜解出的表名和字段名 方法较古老且麻烦)

        ●猜解字段内容的长度

        (select top 1 len(字段名)from 表名)>0 直至猜解到>n不成立的时候,得出字段的长度为:n+1。

        ●得到长度后,猜解具体的内容

        (select top 1 asc(mid(username,1,1))from 表名)>0直到>m不成立时,就可以猜解出ASCII码值了。

                                                                         当然我们猜猜表明猜字段还有其他的方法,下一遍我就用其他的方法给大家演示一下。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfwww.html