十八.WEB 漏洞-堆叠及 WAF 绕过注入
2022年 04月 22 日

BIGFISH

堆叠注入(多语句)

  • 前言
    • Stacked injections(堆叠注入)从名词的含义就可以看到应该是一堆 sql 语句(多条)一起执行。而在真实
      的运用中也是这样的, 我们知道在 mysql 中, 主要是命令行中, 每一条语句结尾加; 表示语句结束。
      这样我们就想到了是不是可以多句一起使用。这个叫做 stacked injection。
  • 原理
    • 在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。
      • 例如以下这个例子。用户输入:1; DELETE FROM products服务器端生成的sql语句为: Select * from products where productid=1;DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。
  • 局限性
    • 堆叠注入的局限性在于并不是每一个环境下都可以执行,可能受到API或者数据库引擎不支持的限制,当然了权限不足也可以解释为什么攻击者无法修改数据或者调用一些程序。
    • 此图是从原文中截取过来的,因为我个人的测试环境是php+mysql,是可以执行的,此处对于mysql/php存在质疑。但个人估计原文作者可能与我的版本的不同的原因。虽然我们前面提到了堆叠查询可以执行任意的sql语句,但是这种注入方式并不是十分的完美的。在我们的web系统中,因为代码通常只返回一个查询结果,因此,堆叠注入第二个语句产生错误或者结果只能被忽略,我们在前端界面是无法看到返回结果的。因此,在读取数据时,我们建议使用union(联合)注入。同时在使用堆叠注入之前,我们也是需要知道一些数据库相关信息的,例如表名,列名等信息。
  • 各个数据库实例介绍(详见点击这里跳转


    • Mysql


      • (1)新建一表
        • select * from users where id=1;create table test like users;
      • 2)删除上面新建的test表
        • select * from users where id=1;drop table test;
      • 3)查询数据
        • select * from users where id=1;select 1,2,3;
      • (4)加载文件



        • select * from users where id=1;select load_file('c:/tmpupbbn.php');

      • (5)添加数据



        • select * from users where id=1;insert into users(id,username,password) values ('100','new','new');

    • Sql server

    • Oracle

    • Postgresql

image-20210820123442525

WAF前言

  • 在实际的渗透测试过程中,经常会碰到网站存在WAF的情况。网站存在WAF,意味着我们不能使用安全工具对网站进行测试,因为一旦触碰了WAF的规则,轻则丢弃报文,重则拉黑IP。所以,我们需要手动进行WAF的绕过,而绕过WAF前肯定需要对WAF的工作原理有一定的理解。

关于WAF介绍

  • 介绍
    • Web应用防护系统(Web Application Firewall, 简称:WAF)代表了一类新兴的信息安全技术,用以解决诸如防火墙一类传统设备束手无策的Web应用安全问题。

      首先,WAF分为非嵌入型WAF和嵌入型WAF,非嵌入型WAF指的是硬件型WAF、云WAF、软件型WAF之类的;而嵌入型WAF指的是网站内置的WAF。非嵌入型WAF对Web流量的解析完全是靠自身的,而嵌入型WAF拿到的Web数据是已经被解析加工好的。所以非嵌入型的受攻击机面还涉及到其他层面,而嵌入型WAF从Web容器模块型WAF、代码层WAF往下走,其对抗畸形报文、扫操作绕过的能力越来越强。当然,在部署维护成本方面,也是越高的。

  • 探测waf工具
    • 现在网站为了加强自身安全,通常都会安装各类防火墙。这些防火墙往往会拦截各种扫描 请求,使得测试人员无法正确判断网站相关信息。Kali Linux 提供了一款网站防火墙探测工具 Wafw00f。它可以通过发送正常和带恶意代码的 HTTP 请求,以探测网站是否存在防火墙,并识别防火墙的类型。



      • 使用方法及参数见文章:
  • 常见waf
  • 判断是否具有waf防护
    • 发送正常的 HTTP 请求,然后分析响应,这可以识别出很多 WAF。
    • 如果不成功,它会发送一些(可能是恶意的)HTTP 请求,使用简单的逻辑推断是哪一 个 WAF。
    • 如果这也不成功,它会分析之前返回的响应,使用其它简单的算法猜测是否有某个 WAF 或者安全解决方案响应了我们的攻击

WAF绕过

[blockquote2 name='WAF绕过-应用层']

#应用层

大小写/关键字替换
id=1 UnIoNSeLeCT 1,user()
Hex() bin() 等价于 ascii()
Sleep() 等价于 benchmark()
Mid()substring() 等价于 substr()
@@user 等价于 User()
@@Version 等价于 version()

各种编码
大小写,URL,hex,%0A 等

注释使用
// -- --+ # + :%00 /!**/等

再次循环
union==uunionnion

等价替换
user()=@@user() and=& or=| ascii=hex 等

参数污染
?id=1&id=2&id=3

编码解码及加密解密
s->%73->%25%37%33
hex,unlcode,base64 等

更改请求提交方式
GET POST COOKIE 等
POST->multipart/form-data

中间件 HPP 参数污染(详解见下)

[/blockquote2]

[blockquote2 name='WAF绕过-数据库特性']

#数据库特性

1、Mysql 技巧
(1)mysql 注释符有三种:#、、-- ... (注意--后面有一个空格)
(2)空格符:[0x09,0x0a-0x0d,0x20,0xa0]
(3)特殊符号:%a 换行符
可结合注释符使用%23%0a,%2d%2d%0a。
(4)内联注释:
1,user() //数字范围 1000-50540
(5)mysql 黑魔法
select{x username}from {x11 test.admin};

2、SQL Server 技巧
(1)用来注释掉注射后查询的其余部分:

(2)空白字符:[0x00,0x09,0x0a-0x0d,0x20]

4.配合 FUZZ
select * from admin where id=1【位置一】union【位置二】select【位置三】1,2,db_name()【位置四】from【位置五】admin

[/blockquote2]

[blockquote2 name='WAF绕过-逻辑层']

#逻辑层

1、逻辑问题
(1)云 waf 防护,一般我们会尝试通过查找站点的真实 IP,从而绕过 CDN 防护。
(2)当提交GET、POST同时请求时,进入POST逻辑,而忽略了GET请求的有害参数输入,可尝试Bypass。
(3)HTTP 和 HTTPS 同时开放服务,没有做 HTTP 到 HTTPS 的强制跳转,导致 HTTPS 有 WAF 防护,HTTP没有防护,直接访问 HTTP 站点绕过防护。
(4)特殊符号%00,部分 waf 遇到%00 截断,只能获取到前面的参数,无法获取到后面的有害参数输 入 , 从 而 导 致 Bypass 。 比 如 : id=1%00and 1=2 union select 1,2,column_name from information_schema.columns

2、性能问题
猜想1:在设计 WAF 系统时,考虑自身性能问题,当数据量达到一定层级,不检测这部分数据。只要不断的填充数据,当数据达到一定数目之后,恶意代码就不会被检测了。

猜想2:不少 WAF是C语言写的,而C语言自身没有缓冲区保护机制,因此如果 WAF 在处理测试向量时超出了其缓冲区长度就会引发 bug,从而实现绕过。

例子1:
?id=1 and (select 1)=(Select

0xA*1000)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),8,9

PS:0xA*1000 指 0xA 后面”A"重复 1000 次,一般来说对应用软件构成缓冲区溢出都需要较大的测试长度,这里 1000 只做参考也许在有些情况下可能不需要这么长也能溢出。

例子2:
?a0=0&a1=1&.....&a100=100&id=1 union select 1,schema_name,3 from INFORMATION_SCHEMA.schemata
备注:获取请求参数,只获取前 100 个参数,第 101 个参数并没有获取到,导致SQL注入绕过。

3、白名单

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

方式二:静态资源
特定的静态资源后缀请求,常见的静态文件(.js .jpg .swf .css 等等),类似白名单机制,waf 为了检测效率,不去检测这样一些静态文件名后缀的请求。
http://10.9.9.201/sql.php?id=1
http://10.9.9.201/sql.php/1.js?id=1
备注:Aspx/php 只识别到前面的.aspx/.php 后面基本不识别

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

https://10.9.9.201/sql.php/admin?id=1
https://10.9.9.201/sql.php?a=/manage/&b=../etc/passwd
https://10.9.9.201/../../../manage/../sql.asp?id=2
waf通过/manage/进行比较,只要在uri中存在/manage/就作为白名单不进行检测,这样我们可以通过/sql.php?a=/manage/&b=../etc/passwd绕过防御规则

方式四:爬虫白名单
部分waf有提供爬虫表名单的功能,识别爬虫的技术一般有两种:
1、根据UserAgent 2、通过行为判断
UserAgent可以很容易欺骗,我们可以伪装成爬虫尝试爬过
User Agent Switch(Firefox附加组件)
https://addons.mozilla.org/en-US/firefox/addon/user-agent-switcher/

[/blockquote2]

HTTP参数污染详解

  • 介绍
    • HPP是HTTP Parameter Pollution的缩写,意为HTTP参数污染。

    • 通过HPP接管账户,当网站开发者不熟悉Web服务器对于多参数时如何选择,将给攻击者可乘之机。HPP能针对客户端和服务端进行攻击。

  • 原理
    • 浏览器在跟服务器进行交互的过程中,浏览器往往会在GET/POST请求里面带上参数,这些参数会以 名称-值 对的形势出现,通常在一个请求中,同样名称的参数只会出现一次。但是在HTTP协议中是允许同样名称的参数出现多次的。比如下面这个链接:百度一下,你就知道 ,针对同样名称的参数出现多次的情况,不同的服务器的处理方式会不一样。有的服务器是取第一个参数,也就是name=aa。有的服务器是取第二个参数,也就是name=bb。有的服务器两个参数都取,也就是name=aa,bb 。这种特性在绕过一些服务器端的逻辑判断时,非常有用。

    • HPP漏洞,与Web服务器环境、服务端使用的脚本有关。如下是不同Web服务器对于出现多个参数时的选择:



    • HPP参数污染还可以用于绕过某些防火墙对于 SQL注入的检测,例如当Web服务器对多参数都同时选择时,我们可以用以下这种方式绕过某些防火墙:



      • http://www.baidu.com/index.asp?page=select 1,2,3 from table where id=1

      • http://www.baidu.com/index.asp?page=select 1&page=2,3 from table where id=1

    • HTTP参数污染是指当同一参数出现多次,不同的中间件会解析为不同的结果



      • 以参数color=red&color=blue为例

案例演示

Sqlilabs-Less38-堆叠注入

  • 参数及注入类型
    • 字符型参数,get注入方式
  • 源代码
    • $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
  • 操作步骤
    • 注入语句:?id=1';insert into users(id,username,password) values ('38','less38','hello') --+

WAF 部署-安全狗,宝塔等 waf 搭建部署

安全狗:?safedogfwq_Windows_Help.pdf

宝塔:宝塔Linux/Windows面板一键安装部署网站图文教程_黎想的博客-CSDN博客_宝塔面板一键部署

简要讲解安全狗,宝塔等防护 waf 策略规

安全狗(以sqli-labs/Less-2为例子)

  • 在安全狗开启的情况下,我们对其进行注入,发现被拦截
  • 在这里,我们尝试改变提交方式。尝试用Post方法进行,发现没被拦截,但网页显示不正常,我们可以知道网站不允许进行post方式传值
  • 我们对源代码进行修改,将提交数据方式改为request方式,让它也能够通过post接受数据,发现能够可以正常注入
  • 这种情况说明提交方式绕过WAF,前提是网站支持各种方式的接受(如request),我们利用post和get都可以提交,get有防护但是post没有防护的话,我们可以转化提交方式进行注入操作
  • 接着进行注入操作,发现当我们查询数据库名的时候,又被拦截了,说明安全狗拦截不仅是一方面而已
  • image-20210827104712068
  • 通过查询安全狗的防护措施,我们可以发现有对应的规则进行防护
  • image-20210827105134481
  • 这时候我们发现即使更改提交方式还是被拦截,接下来我们就要对数据进行处理,对数据进行变异操作后再进行注入,我们尝试使用特殊符号(其中之一)对数据进行处理
  • 绕过的关键点:绕过匹配规则,同时不干扰语句的正常执行
  • 我们将database()改成database(),你会发现我们绕过了,成功获取到数据库名
  • 我们对源代码再进行修改,将提交数据方式改回get方式,需要注意到的是安全狗中get方式拦截规则更多,用相同的语句进行注入,被拦截了(查询拦截规则+自己验证知道,union select联合查询这个点触发规则被拦截了)
  • 暂无注入语句

 

简要演示安全狗 bypass sqlinject 防护规则

实测简易 CMS 头部注入漏洞 Bypass 原理分析

十八.WEB 漏洞-堆叠及 WAF 绕过注入

堆叠注入(多语句)

  • 前言
    • Stacked injections(堆叠注入)从名词的含义就可以看到应该是一堆 sql 语句(多条)一起执行。而在真实
      的运用中也是这样的, 我们知道在 mysql 中, 主要是命令行中, 每一条语句结尾加; 表示语句结束。
      这样我们就想到了是不是可以多句一起使用。这个叫做 stacked injection。
  • 原理
    • 在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。
      • 例如以下这个例子。用户输入:1; DELETE FROM products服务器端生成的sql语句为: Select * from products where productid=1;DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。
  • 局限性
    • 堆叠注入的局限性在于并不是每一个环境下都可以执行,可能受到API或者数据库引擎不支持的限制,当然了权限不足也可以解释为什么攻击者无法修改数据或者调用一些程序。
    • 此图是从原文中截取过来的,因为我个人的测试环境是php+mysql,是可以执行的,此处对于mysql/php存在质疑。但个人估计原文作者可能与我的版本的不同的原因。虽然我们前面提到了堆叠查询可以执行任意的sql语句,但是这种注入方式并不是十分的完美的。在我们的web系统中,因为代码通常只返回一个查询结果,因此,堆叠注入第二个语句产生错误或者结果只能被忽略,我们在前端界面是无法看到返回结果的。因此,在读取数据时,我们建议使用union(联合)注入。同时在使用堆叠注入之前,我们也是需要知道一些数据库相关信息的,例如表名,列名等信息。
  • 各个数据库实例介绍(详见点击这里跳转


    • Mysql


      • (1)新建一表
        • select * from users where id=1;create table test like users;
      • 2)删除上面新建的test表
        • select * from users where id=1;drop table test;
      • 3)查询数据
        • select * from users where id=1;select 1,2,3;
      • (4)加载文件



        • select * from users where id=1;select load_file('c:/tmpupbbn.php');

      • (5)添加数据



        • select * from users where id=1;insert into users(id,username,password) values ('100','new','new');

    • Sql server

    • Oracle

    • Postgresql

image-20210820123442525

WAF前言

  • 在实际的渗透测试过程中,经常会碰到网站存在WAF的情况。网站存在WAF,意味着我们不能使用安全工具对网站进行测试,因为一旦触碰了WAF的规则,轻则丢弃报文,重则拉黑IP。所以,我们需要手动进行WAF的绕过,而绕过WAF前肯定需要对WAF的工作原理有一定的理解。

关于WAF介绍

  • 介绍
    • Web应用防护系统(Web Application Firewall, 简称:WAF)代表了一类新兴的信息安全技术,用以解决诸如防火墙一类传统设备束手无策的Web应用安全问题。

      首先,WAF分为非嵌入型WAF和嵌入型WAF,非嵌入型WAF指的是硬件型WAF、云WAF、软件型WAF之类的;而嵌入型WAF指的是网站内置的WAF。非嵌入型WAF对Web流量的解析完全是靠自身的,而嵌入型WAF拿到的Web数据是已经被解析加工好的。所以非嵌入型的受攻击机面还涉及到其他层面,而嵌入型WAF从Web容器模块型WAF、代码层WAF往下走,其对抗畸形报文、扫操作绕过的能力越来越强。当然,在部署维护成本方面,也是越高的。

  • 探测waf工具
    • 现在网站为了加强自身安全,通常都会安装各类防火墙。这些防火墙往往会拦截各种扫描 请求,使得测试人员无法正确判断网站相关信息。Kali Linux 提供了一款网站防火墙探测工具 Wafw00f。它可以通过发送正常和带恶意代码的 HTTP 请求,以探测网站是否存在防火墙,并识别防火墙的类型。



      • 使用方法及参数见文章:
  • 常见waf
  • 判断是否具有waf防护
    • 发送正常的 HTTP 请求,然后分析响应,这可以识别出很多 WAF。
    • 如果不成功,它会发送一些(可能是恶意的)HTTP 请求,使用简单的逻辑推断是哪一 个 WAF。
    • 如果这也不成功,它会分析之前返回的响应,使用其它简单的算法猜测是否有某个 WAF 或者安全解决方案响应了我们的攻击

WAF绕过

[blockquote2 name='WAF绕过-应用层']

#应用层

大小写/关键字替换
id=1 UnIoNSeLeCT 1,user()
Hex() bin() 等价于 ascii()
Sleep() 等价于 benchmark()
Mid()substring() 等价于 substr()
@@user 等价于 User()
@@Version 等价于 version()

各种编码
大小写,URL,hex,%0A 等

注释使用
// -- --+ # + :%00 /!**/等

再次循环
union==uunionnion

等价替换
user()=@@user() and=& or=| ascii=hex 等

参数污染
?id=1&id=2&id=3

编码解码及加密解密
s->%73->%25%37%33
hex,unlcode,base64 等

更改请求提交方式
GET POST COOKIE 等
POST->multipart/form-data

中间件 HPP 参数污染(详解见下)

[/blockquote2]

[blockquote2 name='WAF绕过-数据库特性']

#数据库特性

1、Mysql 技巧
(1)mysql 注释符有三种:#、、-- ... (注意--后面有一个空格)
(2)空格符:[0x09,0x0a-0x0d,0x20,0xa0]
(3)特殊符号:%a 换行符
可结合注释符使用%23%0a,%2d%2d%0a。
(4)内联注释:
1,user() //数字范围 1000-50540
(5)mysql 黑魔法
select{x username}from {x11 test.admin};

2、SQL Server 技巧
(1)用来注释掉注射后查询的其余部分:

(2)空白字符:[0x00,0x09,0x0a-0x0d,0x20]

4.配合 FUZZ
select * from admin where id=1【位置一】union【位置二】select【位置三】1,2,db_name()【位置四】from【位置五】admin

[/blockquote2]

[blockquote2 name='WAF绕过-逻辑层']

#逻辑层

1、逻辑问题
(1)云 waf 防护,一般我们会尝试通过查找站点的真实 IP,从而绕过 CDN 防护。
(2)当提交GET、POST同时请求时,进入POST逻辑,而忽略了GET请求的有害参数输入,可尝试Bypass。
(3)HTTP 和 HTTPS 同时开放服务,没有做 HTTP 到 HTTPS 的强制跳转,导致 HTTPS 有 WAF 防护,HTTP没有防护,直接访问 HTTP 站点绕过防护。
(4)特殊符号%00,部分 waf 遇到%00 截断,只能获取到前面的参数,无法获取到后面的有害参数输 入 , 从 而 导 致 Bypass 。 比 如 : id=1%00and 1=2 union select 1,2,column_name from information_schema.columns

2、性能问题
猜想1:在设计 WAF 系统时,考虑自身性能问题,当数据量达到一定层级,不检测这部分数据。只要不断的填充数据,当数据达到一定数目之后,恶意代码就不会被检测了。

猜想2:不少 WAF是C语言写的,而C语言自身没有缓冲区保护机制,因此如果 WAF 在处理测试向量时超出了其缓冲区长度就会引发 bug,从而实现绕过。

例子1:
?id=1 and (select 1)=(Select

0xA*1000)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),8,9

PS:0xA*1000 指 0xA 后面”A"重复 1000 次,一般来说对应用软件构成缓冲区溢出都需要较大的测试长度,这里 1000 只做参考也许在有些情况下可能不需要这么长也能溢出。

例子2:
?a0=0&a1=1&.....&a100=100&id=1 union select 1,schema_name,3 from INFORMATION_SCHEMA.schemata
备注:获取请求参数,只获取前 100 个参数,第 101 个参数并没有获取到,导致SQL注入绕过。

3、白名单

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

方式二:静态资源
特定的静态资源后缀请求,常见的静态文件(.js .jpg .swf .css 等等),类似白名单机制,waf 为了检测效率,不去检测这样一些静态文件名后缀的请求。
http://10.9.9.201/sql.php?id=1
http://10.9.9.201/sql.php/1.js?id=1
备注:Aspx/php 只识别到前面的.aspx/.php 后面基本不识别

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

https://10.9.9.201/sql.php/admin?id=1
https://10.9.9.201/sql.php?a=/manage/&b=../etc/passwd
https://10.9.9.201/../../../manage/../sql.asp?id=2
waf通过/manage/进行比较,只要在uri中存在/manage/就作为白名单不进行检测,这样我们可以通过/sql.php?a=/manage/&b=../etc/passwd绕过防御规则

方式四:爬虫白名单
部分waf有提供爬虫表名单的功能,识别爬虫的技术一般有两种:
1、根据UserAgent 2、通过行为判断
UserAgent可以很容易欺骗,我们可以伪装成爬虫尝试爬过
User Agent Switch(Firefox附加组件)
https://addons.mozilla.org/en-US/firefox/addon/user-agent-switcher/

[/blockquote2]

HTTP参数污染详解

  • 介绍
    • HPP是HTTP Parameter Pollution的缩写,意为HTTP参数污染。

    • 通过HPP接管账户,当网站开发者不熟悉Web服务器对于多参数时如何选择,将给攻击者可乘之机。HPP能针对客户端和服务端进行攻击。

  • 原理
    • 浏览器在跟服务器进行交互的过程中,浏览器往往会在GET/POST请求里面带上参数,这些参数会以 名称-值 对的形势出现,通常在一个请求中,同样名称的参数只会出现一次。但是在HTTP协议中是允许同样名称的参数出现多次的。比如下面这个链接:百度一下,你就知道 ,针对同样名称的参数出现多次的情况,不同的服务器的处理方式会不一样。有的服务器是取第一个参数,也就是name=aa。有的服务器是取第二个参数,也就是name=bb。有的服务器两个参数都取,也就是name=aa,bb 。这种特性在绕过一些服务器端的逻辑判断时,非常有用。

    • HPP漏洞,与Web服务器环境、服务端使用的脚本有关。如下是不同Web服务器对于出现多个参数时的选择:



    • HPP参数污染还可以用于绕过某些防火墙对于 SQL注入的检测,例如当Web服务器对多参数都同时选择时,我们可以用以下这种方式绕过某些防火墙:



      • http://www.baidu.com/index.asp?page=select 1,2,3 from table where id=1

      • http://www.baidu.com/index.asp?page=select 1&page=2,3 from table where id=1

    • HTTP参数污染是指当同一参数出现多次,不同的中间件会解析为不同的结果



      • 以参数color=red&color=blue为例

案例演示

Sqlilabs-Less38-堆叠注入

  • 参数及注入类型
    • 字符型参数,get注入方式
  • 源代码
    • $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
  • 操作步骤
    • 注入语句:?id=1';insert into users(id,username,password) values ('38','less38','hello') --+

WAF 部署-安全狗,宝塔等 waf 搭建部署

安全狗:?safedogfwq_Windows_Help.pdf

宝塔:宝塔Linux/Windows面板一键安装部署网站图文教程_黎想的博客-CSDN博客_宝塔面板一键部署

简要讲解安全狗,宝塔等防护 waf 策略规

安全狗(以sqli-labs/Less-2为例子)

  • 在安全狗开启的情况下,我们对其进行注入,发现被拦截
  • 在这里,我们尝试改变提交方式。尝试用Post方法进行,发现没被拦截,但网页显示不正常,我们可以知道网站不允许进行post方式传值
  • 我们对源代码进行修改,将提交数据方式改为request方式,让它也能够通过post接受数据,发现能够可以正常注入
  • 这种情况说明提交方式绕过WAF,前提是网站支持各种方式的接受(如request),我们利用post和get都可以提交,get有防护但是post没有防护的话,我们可以转化提交方式进行注入操作
  • 接着进行注入操作,发现当我们查询数据库名的时候,又被拦截了,说明安全狗拦截不仅是一方面而已
  • image-20210827104712068
  • 通过查询安全狗的防护措施,我们可以发现有对应的规则进行防护
  • image-20210827105134481
  • 这时候我们发现即使更改提交方式还是被拦截,接下来我们就要对数据进行处理,对数据进行变异操作后再进行注入,我们尝试使用特殊符号(其中之一)对数据进行处理
  • 绕过的关键点:绕过匹配规则,同时不干扰语句的正常执行
  • 我们将database()改成database(),你会发现我们绕过了,成功获取到数据库名
  • 我们对源代码再进行修改,将提交数据方式改回get方式,需要注意到的是安全狗中get方式拦截规则更多,用相同的语句进行注入,被拦截了(查询拦截规则+自己验证知道,union select联合查询这个点触发规则被拦截了)
  • 暂无注入语句

 

简要演示安全狗 bypass sqlinject 防护规则

实测简易 CMS 头部注入漏洞 Bypass 原理分析

赞 (0)

猜您想看

评论区(暂无评论)

这里空空如也,快来评论吧~

我要评论