【重温基础的SQL注入】图文详细解说,java后台用mybatis框架的SQL注入漏洞和效果展示,以及预防

1.   SQL注入

1.1原因描述

【重温基础的SQL注入】图文详细解说,java后台用mybatis框架的SQL注入漏洞和效果展示,以及预防

用户名和密码的参数是直接引用,可用拼接的方式。

1.2        拼接方式

' or '1'='1  (这个可以作为参考原型,变种很多,百度都有)

【重温基础的SQL注入】图文详细解说,java后台用mybatis框架的SQL注入漏洞和效果展示,以及预防

     

主要是拼接成这样的SQL:

【重温基础的SQL注入】图文详细解说,java后台用mybatis框架的SQL注入漏洞和效果展示,以及预防

效果如此:即使没有拼接查询张三,依然能查到数据库的张三,因为 'or' 后面 1=1永恒成立。

具体操作时分号要灵活使用,

【重温基础的SQL注入】图文详细解说,java后台用mybatis框架的SQL注入漏洞和效果展示,以及预防

例如图一中,password没加分号,那么password中的 or 1=1 则不需要分号。

后台的分号结构都不是固定的,想办法拼凑,有的不加分号也可以。可进行多次尝试。

1.3        避免方法

Mybatis中,将去掉图一中的分号“ ' ”,并且把’$’ 改为 ’#’,让参数作为值插入,而不是字符串拼接。

1.4        补充

此方法还和后台有关系:

上面的页面能登录成功并且进入,因为数据库只有一条数据,如果有多条数据

后台页面如下:

【重温基础的SQL注入】图文详细解说,java后台用mybatis框架的SQL注入漏洞和效果展示,以及预防

此时如果有两条数据,就会报错。

【重温基础的SQL注入】图文详细解说,java后台用mybatis框架的SQL注入漏洞和效果展示,以及预防

当然,如果有已知的用户名,并且用户名是数据库存在并且唯一,而密码进行sql注入,就不会出现这种情况。。

或者,如果后台开发人员粗心这么写:

【重温基础的SQL注入】图文详细解说,java后台用mybatis框架的SQL注入漏洞和效果展示,以及预防

不管他数据库有几条数据,用户名和密码都可以随便写,都可以轻松绕过啦。。。

PS:  SQL注入是几年前非常流行的漏洞,现在已经非常非常少见,不排除运气好,能遇到不知名的小网站猫进去。这里仅作为安全基础知识,熟悉一下。