CTF特训营:技术详解、解题方法与竞赛技巧
上QQ阅读APP看书,第一时间看更新

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注入漏洞。