SQL注入漏洞(SQL injection)
是Web层面最高危的漏洞之一。
在2005年前后,SQL漏洞随处可见,用户在搜索时,输入一个单引号就可以检测出这种漏洞。
2008年-2010年期间,SQL注入漏洞连续3年在OWASP年度十大漏洞排行中排名第一。
SQL注入形成的原因就是:用户输入的数据被SQL解释器执行。
在一个表单中:
账号: 密码:
输入用户名“ `or 1=1-- ” ,密码随意,也可不填,点击登入,发现可以正常登入,这是为什么呢?
select count(*) from admin where username='admin' and password='password'
在数据库中,存在admin用户,并且密码为password,所以此时返回结果为“1”。显然,1大于0,所以通过验证,用户可以成功登陆。
select count(*) from admin where username='' or 1=1--' and password=''
终于找到问题的根源了,SQL语句的本义是:
username=‘账户’ and password=‘密码’
而现在变为:
username=‘账户’ or 1=1--’ and password=‘’
此时的password被注释!,而username=‘账户’ or 1=1 这句话永远为真,最终执行相对于:
select count(*)from admin //查询admin表所有数据条数
很显然,条数大于1,验证通过,这就是一次简单的SQL注入,虽然简单,但是危害很大。可以对专门的靶场进行试验。
利用以下语句可以直接把admin表直接删除,危害极大,请勿随意对网站进行测试,仅供学习交流
`or 1=1; drop table admin --
PS1:在SQL注入前,要判断该数据库类型。
仅供学习交流,谨记国家网络安全法。