判断注入类型
判断注入类型
区分是字符型注入还是数字型注入
数字型注入:
- 假设后台语句构造为select * from table where id=$id
- 传入5’ –+
- select * from table where id=5’ –+ 未产生单引号闭合,所以报错
字符型注入:
- 假设后台语句构造为select * from table where id=$’id’
- 传入5’ –+
- select * from table where id=’5’ –+ ‘
- 最后的一个单引号被注释掉,单引号可以闭合,此时查询正确
所以加单引号去判断是数字型注入还是字符型注入
实例:
?id=5 and 1=1 如果返回页面与原页面一致(回显正确) 则为数值型注入
原因:
1. 猜测为数值型,后台语句为select * from table where id=5 and 1=1;where语句判断条件为真并且id参数值为5,正常执行
2. 猜测为字符型,后台语句为select * from table where id='5 and 1=1';where 语句将找不到id为'5 and 1=1' 的参数,语句执行失败
如果是字符型:
传入 5' and 1=1 --+
字符型后台语句为:
select * from table where id='5' and 1=1 --+ ';后面的单引号被注释,不需要担心单引号闭合问题,id='5'才是真正的id查询语句,id参数的值应该是一个值,而不是带上and 1=1,因为数据库中没有带着and 1=1的名
判断页面是否有布尔类型的状态
- 判断数据类型是字符型还是数值型(这个地方的数据类型和注入类型不是一个概念,数据类型是只有字符型和数值型,而注入类型是指字符型,数值型,布尔盲注,时间盲注等类型)
- 假设?id=5 and 1=1;返回页面与源页面一致,通过该参数我们可以确定该注入的数据类型为数字注入
- 当参数为?id=5 and 1=2由于and 1=2 为假,也就是查询条件where id=5 and 1=2恒假,这样的sql语句在数据库中执行后,没有返回结果,也就是说能正常回显内容与语句的真假性有关(是否出现回显内容与语句的真假性有关,而不是回显内容与语句的真假性有关,语句的真假性若和会先内容有关而不是是否出现回显和语句的真假性有关的话,则不为盲注)
判断参数是否存在延迟注入
- 按f12打开调试面板,修改参数为?id=5 and sleep(5),并刷新,如果sleep语句对网页的响应起到作用,就意味着存在延迟注入的可能
结论
(1)因为id参数是用户可控的,会随请求带入到数据库中执行并回显相应内容,可能是一个注入点。
(2)第一步当id变化时,页面回显响应变化,首先考虑联合注入
(3)第二步,加单引号或双引号,当有报错时,可考虑报错注入;
(4)当第二步没变化,进行第三步,当页面有布尔类型的状态,可考虑布尔盲注;
(5)若都不行,进行第四步,考虑延时注入。
(6)从联合注入到盲注以及延迟注入,其时间人力成本逐步增大,尽可能选择低成本方式进行注入。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 h3110w0r1d's Blog!