La explotación de una vulnerabilidad sin acceso al código fuente requiere más trabajo, algo de creatividad e intuición y quizás un poco de buena suerte. Pero es absolutamente posible. Esto es cierto para la mayoría de los ataques en general, y para la inyección de objetos PHP en particular.
La idea de que estás seguro siempre y cuando nadie tenga en sus manos el código fuente no solo es errónea, sino peligrosa. En su lugar, diseñe sus programas para que sean seguros incluso si el código fuente se hiciera público.
Para comprender cómo esta vulnerabilidad en particular puede ser explotada sin el conocimiento del código fuente, le recomiendo que eche un vistazo a estas ejemplos de OWASP :
- En el primer ejemplo, una variable GET que contiene una ruta de archivo pasa a través de
unserialize
, lo que crea una vulnerabilidad de recorrido de ruta. Cada vez que un atacante competente ve un camino, intentará atravesar el camino para ver qué sucede. Ver el código fuente lo haría más fácil, pero no es estrictamente necesario.
- En el segundo ejemplo, los datos de
unserialize
se pasan a eval
, lo que hace posible la inyección de código. Las pruebas para insertar el código PHP en lugares aleatorios son prácticamente un procedimiento estándar de prueba de lápiz de caja negra. Claro, sería más fácil si pudieras simplemente grep para evaluar, pero eso no significa que esta pequeña joya no se descubra.
- El tercer ejemplo es una vulnerabilidad de SQLi creada por el método
__tostring
que está siendo controlada por el atacante. Este sería difícil de encontrar sin leer el código fuente. Pero las cadenas de PHP serializadas son fáciles de detectar, y un atacante hurgará y verá qué sucede. ¿Realmente quieres apostar a que nadie conseguirá oro solo por pura suerte?