在我们拿到一个sql注入的题目之后,在确定了注入点之后,接下来要做的事情就是进行基础注入判断。
在开始前,我们需要理解一个SQL注入中最常用的词汇 —— 构造闭合 。 对于SQL处理语句后台的写法:
SELECT username,password FROM users WHERE id = ?
这里的问号可以有多种的闭合方式, $id, '$id', "$id", ($id)。
我们要做的就是构造闭合,比如注入点是id='$id',这样的话我们如何构造闭合呢,可以传入$id=1',这样的话语句就变成了id=$'1'',这样的话我们就完成了对前半个单引号的闭合构造,但是多出来的原本那一半单引号怎么办呢?我们可以考虑用注释符号使其无效化,即传入$id=1'--+。
下面就来罗列一下常见的注入判断方法以及注入点类型:
通过是否报错来判断
比如我们用1'来试探一个注入点,会有以下几种情况:
"1'":"" 中为可以包含 ' ,而 1' 是一个合法的字符串,在查询时会先被强制类型转换为数字,不会报错
1':单引号未闭合,会报错
'1'':第三个单引号未闭合,会报错
通过报错信息来判断
(图片来自Hello-CTF)