SQL注入的原理:当Web应用向后台数据库传递SQL语句进行数据库操作时,如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。
本质:把用户输入的数据当作是代码的一部分执行
两个关键点(SQL注入必须满足的两个条件,所有的漏洞都是有条件的):
(1)用户能够控制输入的内容
(2)数据库能够执行用户输入的内容
SQL的危害:盗取网站的敏感信息,绕过网站后台认证
万能密码: ' or 1=1# ' or '1'='1'#
后台登录语句:SELECT * FROM 表 WHERE username = ’$user' and password = '$pass'
SELECT * FROM 表 WHERE username = '' or 1=1#' and password = '$pass'
其中,#表示的是注释;在MySQL中%23,--空格,--+,-- qwer也都表示注释
因此,上方的语句就等价于SELECT * FROM 表 WHERE username = '' or 1=1
'' or 1=1
两个单引号之间为空,因此username为空这个条件不存在,所有为假;1=1为真;真或假的结果为真,因此这条语句为真,就可以成功登录,绕过了后台网站的认证。
什么是注入?
SQL注入,就是通过把SQL命令插入到WEB表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,从而进一步得到相应的数据信息。
注入的分类
(1)按照注入点类型分类:数字型(整形)注入、字符型(字符串)注入、搜索型注入(搜索时没有过滤搜索参数,一般在url中包含keyword=关键字)
(2)按照注入方法分类:布尔盲注、时间盲注、报错注入、联合查询注入、堆注入
注入的流程
(1)寻找注入点:和数据库有交互的地方
(2)判读闭合方式(数字型还是字符型)
闭合的作用
手工提交闭合符号,结束前一段查询语句,不需要的语句可以使用注释符注释掉