Inyección de comando de SO remoto - pruebas

3

El escáner ZAP encontró una inyección de comando de SO remoto.

¿Hay alguna manera infalible de verificar si esto funciona y no es un falso positivo?

Intenté hacer que durmiera 50 segundos, pero no es algo que pueda ver visualmente, además, parece que la página no tarda más en cargarse.

Esta es la URL que el escáner encontró vulnerable:

http://*SECRET*/*SECRET*?from&to

Este es el exploit:

Attack: ACG"&sleep 5s&"

Supongo que debo escribir la URL como esta para explotarla:

http://*SECRET*/*SECRET*?from=ACG&sleep 5s&to=AMR

Lo anterior no parece hacer que la página tarde más en cargarse. O hice un error tipográfico, o tal vez no es vulnerable ya que la URL se desinfecta para:

ACG&sleep%205s&to=AMR
    
pregunta k1308517 30.03.2016 - 11:57
fuente

2 respuestas

5

Los escáneres de vulnerabilidad automáticos a menudo producen falsos positivos con cargas útiles basadas en el tiempo.

Esto se debe a que el escáner solo comprueba si la solicitud lleva más tiempo que la pausa inyectada. Si hay mucho tráfico en la red, posiblemente debido a que su escáner produce muchas solicitudes, esto puede suceder aunque no se haya ejecutado la carga útil.

Esto significa que siempre debe confirmar manualmente las cargas útiles basadas en el tiempo (como debe confirmar cualquier otro hallazgo).

No tengo muy claro cuál es la carga útil real aquí. Realmente hay dos posibilidades:

  • & está destinado a estar codificado, por lo que la cadena de consulta sería: ?from=ACG%22%26sleep%205s%26%22&to=AMR . Este es el caso probable. El parámetro vulnerable sería from , y la carga útil sería ACG%22%26sleep%205s%26%22 . Saldría del contexto de la cadena actual a través de " , luego agregaría un comando adicional a través de & (que se puede usar para agregar comandos adicionales en windows y linux), y finalmente deshacerse del " final agregando otro comando a través de & .
  • & no está destinado a estar codificado, por lo que agregaría un parámetro adicional llamado sleep%005s sin valor (menos probable, pero aún posible).

Debería probar ambas variantes, primero con un comando que produce un resultado visible, como id , ls , dir , etc., y luego con un comando de tiempo como sleep .

    
respondido por el tim 30.03.2016 - 12:46
fuente
1

sleep solo pone el hilo en reposo, en todo caso. Intenta algo como

curl your.server.tld/whatever

y vea si la solicitud llega a través de los registros de su servidor.

Sin embargo, esto podría no ser concluyente si la solicitud no llega.

El tráfico externo podría estar bloqueado o la curvatura no instalada o cualquier otra cosa podría salir mal.

    
respondido por el Tobi Nary 30.03.2016 - 12:14
fuente