sql注入
威胁简介
SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。
攻击思路
偿试所有可以输入的地方,偿试注入攻击。 根据返回的报错结果,判断后台服务的类型及数据库的类型。 确认后台服务及数据库类型后,改进攻击方案,进行有针对性的攻击。
攻击示例
要进入一个系统,当然最离不开的就是登录界面,所以我们就来看看如何免密码登录系统。
登录界面要求两个输入项:用户名、密码。
我们可以这样实现免账号登录:用户名输入“’ or 1=1 --”, 密码输入随意字符。
那么现在来分析一下,为什么可以免账号登录。
后台验证一般是类似的SQL:
String sql = “select * from tuser where user_name=’ “+user_name+” ’ and user_pass=’ “+user_pass+” '”;
拼上我们输入的参数后,语句变成了:
select * from tuser where user_name=’ ’ or 1=1 --‘and user_pass=’’
后面的"–‘and user_pass=’’" 相当于是注释代码,不生效。实际执行的SQL为:
select * from tuser where user_name=’ ’ or 1=1
这样一定要查出用户数据,很可能后面的逻辑处理就当作用户登录成功处理了,然后实现了免密码登录。
如果希望进一步加强危害,可以实现任意语句执行,例如:用户名传入“’; drop table tuser; --”; 实际执行的SQL变成了:
select * from tuser where user_name=’’ ; drop table tuser; --’ and password=’’
这样你的表就没了~
应对方案
推荐方案
采用 占位符 方式进行SQL传参,禁止将入参直接拼接到SQL中 。