注入点的判断
判断一个连接是否存在注入漏洞,能够经过对其传入的参数(但不单单只限于参数,还有cookie注入,HTTP头注入等) 进行构造,而后对服务器返回的内容进行判断来查看是否存在注入点。php
注入点的种类
1.按注入点参数的类型分类
(1)数字型注入sql
例如id=1这种类型,向数据库传入的是数字,参数不须要被引号括起来。数据库
(2)字符型注入服务器
例如name=admin这种类型,像数据库传入的是字符串,参数须要被引号括起来。cookie
2.按照数据请求方式来分类
(1)GET注入工具
HTTP请求方式为get,注入点通常在get传入的参数部分,例如?id=1,id即是一个注入点。post
(2)POST注入测试
HTTP请求方式为post,注入点通常为提交的HTML表单, 即post传入的数据内容。编码
(3)HTTP头注入spa
HTTP的请求头存在注入点,例如XFF头,cookie,Host这些都是常见的注入点。
3.按照语句的执行效果来分类
(1)报错注入
页面会返回错误信息,或者将语句的查询结果直接返回到页面(这是最多见的一种注入,通常手注就可搞定)
(2)基于布尔的盲注
盲注的意思就是你没法直接经过页面的返回内容来获取信息,页面只会返回真假,你须要对一个个字符进行测试,相对于报错注入,盲注的工做量比较庞大,通常写脚本或者用工具跑。
(3)基于时间的盲注
页面没法直接返回真假,须要构造条件语句查看时间延迟的语句是否成功执行(观察页面的返回时间的长短)来进行判断。
(4)联合查询注入
经过union来将多条语句的结果组合到一个结果中
(5)宽字节注入
宽字节注入是由编码不统一引发的,通常是在PHP+MySQL中出现
(6)堆查询注入
堆叠查询能够构造执行多条语句
(7)二次注入
将攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所致使的注入。
注入类型的判断
(1)数字型注入
判断步骤
1.首先在参数后加个单引号,URL:www.3333.com/text.php?id=1’ 对应的sql:select * from table where id=3’ 这时sql语句出错,程序没法正常从数据库中查询出数据,就会抛出异常;
2.在参数后加 and 1=1 www.33333.com/text.php?id=1 and 1=1 对应的sql:select * from table where id=3’ and 1=1 该语句先后都为真,语句执行正常,与原始页面无任何差别;
3.在参数后加 and 1=2 www.33333.com/text.php?id=1 and 1=2 对应的sql:select * from table where id=3’ and 1=2 该语句为假,因此没法返回结果,返回异常。
通常知足以上三点就能够认定该注入点的类型为数字型注入。
(2)字符型注入
判断步骤
1.加单引号:select * from table where name=’admin’’ 因为加单引号后变成三个单引号,则没法执行,程序会报错;
2.加 and 1=1 此时sql 语句为:select * from table where name=’admin’ and 1=1’ ,也没法进行注入,还须要经过注释符号将其绕过;(MySQL经常使用的注释符号有# -- (后面还有个空格) /* */)
构造语句为:select * from table where name =’admin’ and 1=1#’ 可成功执行返回结果正确;
3.加and 1=2 此时sql语句为:select * from table where name=’admin’ and 1=2 –’则会报错。
若是知足以上三点的话,基本能够认定为字符型注入。