iptables provoca un bucle infinito de solicitud GET

0

Estoy tratando de redirigir el tráfico HTTP de 80 a 8080 para que Burp Suite lo use.

Usando iptables, mi comando fue:

iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to 127.0.0.1:8080

Al hacerlo, el tráfico se redirigió al puerto 8080 y se mostró en Burp. Sin embargo, la solicitud GET sigue cargándose y si desactivo la intercepción, las solicitudes inundarán el historial de Burp hasta que esté lleno.

He realizado un vaciado completo y reinicio de iptables sin ningún efecto.

EDITAR: después de investigar más, sospecho que la misma solicitud sigue volviendo a Burp Suite después del reenvío. Esto puede ser un problema con Burp en su lugar. ¿Ayuda?

MÁS INFORMACIÓN: Estoy haciendo esto en una máquina virtual ubuntu 13 y probando esto con el navegador de un emulador de Android (que se ejecuta en la VM) sin proxy.

bunbun
fuente
¿Tu VM está actuando como un hombre en el medio o estás navegando desde dentro de la misma VM?
etherfish
navegando desde dentro de la propia VM
bunbun
Ahora veo lo que intentas hacer. Vea la respuesta que proporcioné a continuación.
etherfish

Respuestas:

1

Corrígeme si me equivoco, pero Burp Suite es un proxy, por lo que para cada conexión habrá otra conexión de vuelta. Su primera conexión se redirige correctamente a Burp y, luego, las propias conexiones salientes de Burp también se redirigen. Es posible que pueda excluir Burp modificando su regla de iptables de la siguiente manera:

   iptables -t nat -A OUTPUT -p tcp --dport 80 ! --uid-owner <UID OF BURP PROCESS> -j DNAT --to 127.0.0.1:8080

Por supuesto, sería importante que ejecutes Burp como un usuario diferente a tu navegador. ¿Podría darle una mejor respuesta si tuviera más detalles o un escenario de ejemplo que describa lo que está tratando de lograr?

Buena suerte.

EDITAR: el comando correcto que funcionó fue

iptables -t nat -A OUTPUT -p tcp --dport 80 -m owner ! --uid-owner 0 -j DNAT --to 127.0.0.1:8080

después de ejecutar Burp Suite como root.

Etherfish
fuente
¿Qué quieres decir con correr como otro usuario? suena como una buena forma de sortear el problema
bunbun
Dame un poco para comprobar algunas cosas? Estoy comprobando cómo se instalan / ejecutan Burp Suite y el emulador de Android. Si está iniciando Burp Suite desde una ventana de terminal, entonces, como un truco rápido, intente ejecutarlo como root y use 0 como argumento para --uid-owner. No se olvide de iptables -t nat -F OUTPUT para eliminar la regla anterior antes de agregar la corregida.
etherfish
Dios mío, esto realmente funcionó! te señala gracias!
bunbun
Estoy feliz de ayudar Por cierto, ¿sabías que puedes ejecutar compilaciones x86 de Android dentro de vmware? Eso facilitaría este tipo de cosas porque vmware usa dispositivos de red virtuales que están expuestos a iptables. (vmnet0, vmnet9, etc.) Android en x86 / vmware no es perfecto, pero es mucho más rápido que los emuladores ARM. Buena suerte.
etherfish
buen punto, lo intentaré la próxima vez
bunbun
0

Mi solución fue simplemente indicar el origen de la solicitud HTTP y limitar todo el enrutamiento a aquellos desde esa dirección IP.

sudo iptables -t nat -A OUTPUT -p tcp -s 127.0.0.1 --dport 80 -j DNAT --to 127.0.0.1:8080

después de que la solicitud pase por eructo, no se enrutará nuevamente.

Sin embargo, esto solo funciona para los navegadores (estoy usando Firefox).

Cuando probé esto con el emulador de Android y cambié la regla de iptable a diferentes fuentes como 10.0.2.1 (dirección de puerta de enlace del emulador), 10.0.2.2, 10.0.2.15, las solicitudes no se enrutan.

bunbun
fuente
Eso fue inteligente! Estaba a punto de señalar que el emulador de Android en sí tiene una disposición para forzar todo el tráfico de dispositivos emulados a través de un proxy. Consulte developer.android.com/tools/help/emulator.html busque la opción -http-proxy.
etherfish
Lo siento, cuando leí "Mi solución" supuse que lo habías solucionado. Sugeriría eliminar las reglas de iptables e intentar configurar el emulador para forzar el uso del proxy.
etherfish
hola si gracias! Ya intenté usar un proxy en el emulador y funciona al 100%. pero quiero evitar configurar cualquier cosa en el emulador. Tener todo hecho por la computadora host hace que sea más elegante, ¿no te parece?
bunbun
Bueno, siempre puede usar la variable de entorno http_proxy, porque parece que su solución de iptables se está volviendo más complicada y frágil rápidamente. Si revisa mi comentario a continuación, si ejecuta Burp Suite como root u otro usuario, puede eximirlo de las reglas de iptables. Desafortunadamente, las direcciones 10.0.xx son ficticias y están traducidas dentro del emulador de Android. Nunca llegan a nada con lo que iptables pueda trabajar.
etherfish