Ratproxy em portas não padrão ( 80 ou 443 )
Autor: CleBeer's Pub | Publicado: 2010-05-06T06:31:00-07:00

Em alguns testes de segurança e auditoria em serviços Web precisamos utilizar ferramentas que nos auxiliam a realizar este processo, existem diversas ferramentas para isso, dentre elas estão o w3af, parosProxy, burpsuite, webscarab e o ratproxy. O ratproxy* trabalha como um proxy entre o browser do usuário (geralmente quem faz a auditoria) e o site/programa a ser auditado porem em algumas auditorias pode-se encontrar sites/programas que não rodam nas portas web padrão que são as portas 80 e 443, nesse caso ao tentar auditar um serviço que não roda nessas portas o ratproxy exibe a seguinte mensagem:

"[!] WARNING: Access to this port denied."

Segundo o desenvolvedor do projeto essa é uma feature implementada por questões de segurança, para evitar que o ratproxy seja utilizado como um portscan ou que sejam enviados pacotes para serviços não-HTTP porém essa implementação acaba nos limitando em determinadas auditorias onde precisamos testar um serviço web rodando em uma porta não padrão e para contornar esse problema eu criei um patch que adiciona a opção "-N" ao ratproxy que quando utilizada nos permite auditar sistemas web que não rodem nas portas padrão.
Basta aplicar o patch a seguir ou se preferir pode baixar o ratproxy com o patch já aplicado clicando aqui 

------
# Created by Cl3BeeR 
# Thu May 06 2010
--- ratproxy.c 2009-03-31 07:32:10.000000000 -0300
+++ ratproxy.c 2010-05-06 09:59:06.167625043 -0300
@@ -77,6 +77,7 @@
&nbsp;_u8* trace_dir;     /* Trace directory &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/
&nbsp;_u32 proxy_port = 8080;    /* Upstream proxy port &nbsp; &nbsp; &nbsp; &nbsp;*/
&nbsp;_u8 &nbsp;use_len;     /* Use length, not cksum &nbsp; &nbsp; &nbsp;*/
+_u8* non_http;     /* Accept requests for non-HTTP ports &nbsp; &nbsp; &nbsp;*/

&nbsp;static FILE* outfile;    /* Output file descriptor &nbsp; &nbsp; */

@@ -105,6 +106,7 @@
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; " &nbsp; -m &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;- log all active content referenced across domains\n"
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; " &nbsp; -X &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;- disruptively validate XSRF, XSS protections\n"
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; " &nbsp; -C &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;- try to auto-correct persistent side effects of -X\n"
+ &nbsp; &nbsp; &nbsp; &nbsp;" &nbsp; -N &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;- Accept requests to non-HTTP ports \n"
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; " &nbsp; -k &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;- flag HTTP requests as bad (for HTTPS-only applications)\n"
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; " &nbsp; -a &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;- indiscriminately report all visited URLs\n\n"

@@ -1660,9 +1662,9 @@

&nbsp;&nbsp; signal(SIGPIPE, SIG_IGN);
&nbsp;&nbsp;-1726,6 +1728,10 @@
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; all_xss = 1;
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; break;

+ &nbsp; &nbsp; &nbsp;case 'N':
+ non_http = 1;
+ break;
+
&nbsp;&nbsp; &nbsp; &nbsp; case 'g':
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; get_xsrf = 1;
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; break;
--- http.c 2009-05-13 16:41:01.000000000 -0300
+++ http.c 2010-05-04 10:45:45.366625269 -0300
@@ -53,6 +53,7 @@
&nbsp;extern _u8* use_proxy;  /* Runtime setting exports from ratproxy. */
&nbsp;extern _u32 proxy_port;
&nbsp;extern _u8 &nbsp;use_len;
+extern _u8* non_http;

&nbsp;static _u8 srv_buf[MAXLINE], /* libc IO buffers */
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cli_buf[MAXLINE];
@@ -496,7 +497,7 @@
&nbsp;&nbsp; &nbsp; if (!ret-&gt;port || ret-&gt;port &gt; 65535)
&nbsp;&nbsp; &nbsp; &nbsp; http_error(client,"Illegal port specification",1);

- &nbsp; &nbsp;if (ret-&gt;port &lt; 1024 &amp;&amp; ret-&gt;port != 80 &amp;&amp; ret-&gt;port != 443)
+ &nbsp; if (!non_http &amp;&amp; (ret-&gt;port &lt; 1024 &amp;&amp; ret-&gt;port != 80 &amp;&amp; ret-&gt;port != 443))
&nbsp;&nbsp; &nbsp; &nbsp; http_error(client,"Access to this port denied",1);

&nbsp;&nbsp; &nbsp; *x = 0;
--- config.h 2009-05-13 16:40:38.000000000 -0300
+++ config.h 2010-05-06 10:00:03.570624548 -0300
@@ -26,7 +26,7 @@

&nbsp;#include "types.h"

-#define VERSION  "1.58-beta"
+#define VERSION  "1.58-beta-CleBe3R-Non-http-Patch"

&nbsp;/* Maximum request / response header line length (HTTP traffic
&nbsp;&nbsp; &nbsp;that exceeds this limit will be rejected). */

------

* http://code.google.com/p/ratproxy/

g0 h4ck
By CleBeer