SQL注入原理

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注入前,要判断该数据库类型。

仅供学习交流,谨记国家网络安全法。

你可能感兴趣的:(SQL注入原理)