说明
注入漏洞作为登顶过web十大漏洞多次的漏洞,危害性不言而喻,其中sql注入就是注入漏洞常用的手段。其形成的原因是由于web在接收传参数据时,对数据的过滤不够严格,将其带入到数据库查询中,导致用户可以通过传参一些sql语句来对数据库进行查询,修改等操作。传参的sql语句通过拼接后执行。
这边看了一个博客,结合他的办法实际验证一下拼接的方式,我们用sqli---labs来实验,先修改一下第一关的源码,显示出执行的sql语句

我们输入id=1看看执行的sql语句是什么

可以看到一个sql语句被执行了,尝试一下id=2

可以看到爆出来了一个账号密码,可以继续去尝试id=3、4、5....会发现由不同的账号密码,现在我们尝试单引号闭合

可以看到报错了,去看sql语句可以看到1后面有一个单引号落空了,在sql语句中单双引号都是要成对出现的,所以这边报错了,验证一下我们传参id=1''
没有报错,为了方便理解我们再加上一组对比,传参id

那么现在可以清楚的知道了他的拼接情况。
最后是注释和恒真假效果

?id=1' and 1=1--+
1=1恒真也可以写成2=2或a=a等类似格式,其作用是确保注入后的 SQL 语句逻辑成立,从而验证注入点或绕过某些防护规则,可测试注入是否成功(若页面正常显示,则存在注入漏洞)。也有1=2恒假条件,可以通过这个判断是否有注入漏洞,但不能直接获取数据,需要加上其他的回显手段来获取数据。
--+这是一种闭合手段,也有其他的闭合手段例如#等等可以用于其他的注入情境,这边就不多说了,--+中--是注释符号,+在url是空格的编码被编译成空格,确保注释符号生效。添加注释符号的目的是将后面自带的语句注释掉,确保我们传参的语句语法格式正确。
整个sql语句SELECT * FROM users WHERE id='2' -- ' LIMIT 0,1如果没有加注释的话是从users
表中选取id
为2
的记录,不过只返回符合条件的第一条记录,所以我们加上注释符可以显示users表中所有id为2的记录,limit 0,1的作用是从行号0开始往下面搜索,只返还一条id=2的数据。
总之sql注入的目的是为了获取一些数据或者修改数据库的一些数据等等,是针对数据库的一种攻击手段,我们通过传参sql语句确保它绕过验证,执行成功。