2.8 注入点的位置及发现
前面我们介绍了多种注入方式及利用方式,下面继续介绍注入点的位置及注入点的发现方法。
1.常见的注入点位置
在CTF中,我们遇到的不一定是注入点是表单中username字段的情况,有时候注入点会隐藏在不同的地方,下面我们就来介绍几个常见的注入点的位置。
(1)GET参数中的注入
GET中的注入点一般最容易发现,因为我们可以在地址栏获得URL和参数等,可以用Sqlmap或者手工验证是否存在注入。
(2)POST中的注入
POST中的注入点一般需要我们通过抓包操作来发现,如使用Burp或者浏览器插件Hackbar来发送POST包。同样,也可以使用Sqlmap或者手工验证。
(3)User-Agent中的注入
在希望发现User-Agent中的注入时,笔者在这里推荐大家使用Burp的Repeater模块,或者Sqlmap。将Sqlmap的参数设置为level=3,这样Sqlmap会自动检测User-Agent中是否存在注入。
(4)Cookies中的注入
想要发现Cookies中的注入,笔者同样推荐大家使用Burp的Repeater模块。当然,在Sqlmap中,我们也可以设置参数为level=2,这样Sqlmap就会自动检测Cookies中是否存在注入了。
2.判断注入点是否存在
接下来就要确定注入点的位置。在判断输入点是否存在注入时,可以先假设原程序执行的SQL语句,如:
SELECT UserName FROM User WHERE id = '$id'; // 参数为字符串
或
SELECT UserName FROM User WHERE id = $id; // 参数为数字
然后通过以下几种方法进行判断:
(1)插入单引号
插入单引号是我们最常使用的检测方法,原理在于未闭合的单引号会引起SQL语句单引号未闭合的错误。
(2)数字型判断
通过and 1=1(数字型)和闭合单引号测试语句'and'1'='1(字符串型)进行判断,这里采用Payload'1'='1的目的是为了闭合原语句后方的单引号。
(3)通过数字的加减进行判断
比如,我们在遇到的题目中抓到了链接http://example.com/?id=2,就可以进行如下的尝试http://example.com/?id=3-1,如果结果与http://example.com/?id=2相同,则证明id这个输入点可能存在SQL注入漏洞。