web基础漏洞-sql注入

1、介绍

sql注入,是前端输入,参数未经过严格检查,拼接到sql语句中,交给sql应用执行。

2、场景

2.1 sql语句分类

sql注入,可以按照sql语句进行划分类型,主要为增删改查。广义上来说,各个参数都有可能作为sql注入的点,通过构造payload,使得超出预期的sql语句结构。

2.2 查询赋值

insert或update语句,将查询到的内容赋值给字段,然后攻击者可以正常查询获取信息。

2.3 超范围执行

针对update、delete和select语句的where条件部分,使其超出原本的执行范围,甚至全表执行。

2.4 盲注

针对update、delete和select语句的where条件部分,进行布尔盲注或时间盲注,获取信息

2.5 联合查询

针对select语句,基于union语法查询信息

2.6 报错注入

主要基于updatexml或exeact函数,进行查询信息

2.7 堆栈注入

四种基本sql语句类型,都可能实现

2.8 条件验证

典型的是登录验证

2.9 读写文件

2.10 系统命令执行

3、防护

预编译

4、发现测试

4.1 单双引号

添加单双引号,查看是否直接报sql异常。如果报异常则说明存在sql注入

4.2 数值测试

以?id=5为例,测试id=6-1和id=5-0的响应字符长度是否一致。如果一致则说明存在sql注入

4.3 逻辑测试

and 0和and 1的响应体部字符长度不同,and 1和and 2的响应体部字符长度相同,则说明存在sql注入。

  • 无引号、单引号或双引号
  • 无括号,一组括号,多组括号
  • 函数的必要参数个数与类型
  • 无注释,有注释,以及多种注释
  • 需要注意url编码
and 0
and 1
and 2

4.4 sleep测试

  • and sleep(),注意sleep返回false
  • 根据是否大幅度延迟判断是否存在sql注入
  • 注意,如果本身网络波动大,卡顿长,不适合sleep测试。
  • sleep可能造成服务端资源消耗大,或者说等待时间长。所以,一般sleep测试时会添加limit或者and now()<'',限制延迟时间

4.5 其它测试

  • 如果是测试环境,可以直接超范围执行。
  • insert或update语句,可以设置查询版本作为值
  • order by是否有效或报错
posted @ 2023-07-06 23:27  挖洞404  阅读(30)  评论(0编辑  收藏  举报