Estoy evaluando la seguridad de un portal web para un cliente y encontré una vulnerabilidad.

Este es el código PHP:

echo(file_get_contents("template/data/" $_GET['id']));

Pude leer con éxito ../../../index.php, config.php, etc.

Pero solo quiero poder demostrar que este error es más crítico que leer configuraciones. Leí el usuario / pase de MySQL, pero no puedo conectarme a él ya que solo está escuchando en localhost. Todos los demás códigos que leí no condujeron a nada. Básicamente, todo lo que obtuve fue solo un código fuente que no era un secreto.

No puedo hacer cosas de filtro php porque tiene "template / data /" al comienzo de la cadena.

¿Qué más se puede hacer con este código vulnerable? ¿Algunas ideas?

0
GMX Rider 13 ene. 2018 a las 23:07

3 respuestas

La mejor respuesta

La vulnerabilidad es lo que es. No puedes hacerlo más peligroso solo porque quieras. Pero te da mucha información, como ya descubriste.

Además, puede ser muy peligroso en el entorno adecuado. Cada error SSRF en el portal debería darle un control total sobre la base de datos; y esos errores con frecuencia se consideran de bajo impacto / baja prioridad por sí mismos.

También puede ser interesante verificar qué otras aplicaciones se ejecutan en el mismo servidor. ¿Un foro de vBulletin? Puede filtrar COOKIE_SALT y firmar cualquier dato malicioso que desee con él; sus datos se pasarán a unserialize. ¿Un blog de wordpress? Muchos complementos almacenan secretos como constantes de PHP, y una vez que conoce esos secretos, puede hacerse cargo del servidor.

El mensaje más importante que debe transmitir a su cliente es que incluso si este error solo filtra información ahora, puede volverse mucho más peligroso en el futuro. Incluso si solo instala el software convencional.

1
jh1711 13 ene. 2018 a las 20:56

No puedo hacer cosas de filtro php porque tiene "template / data /" al comienzo de la cadena.

Puede validar la identificación. Esto siempre debe hacerse con los valores pasados por POST y GET:

$template_id = $_GET['id'];
if (strlen($template_id) < 1 || $template_id[0] === '.')
{
    echo 'Invalid template ID';
    die;
]
echo(file_get_contents("template/data/$template_id"));
1
Dave S 13 ene. 2018 a las 20:23

Si puede leer las configuraciones para obtener un nombre de usuario y contraseña válidos, diría que sus dos vulnerabilidades principales en ese momento son la reutilización de contraseñas (por ejemplo, vea si hay otros lugares para iniciar sesión y usar la misma contraseña, lo que podría dar más acceso) o Ingeniería social. Podrías usar el acceso al sistema de archivos para "probar" a alguien que eres administrador o algo y tratar de obtener más acceso de esa manera.

Puede que al principio no parezca una gran vulnerabilidad, pero el acceso a información oculta es un gran agujero en la armadura.

0
jhilgeman 13 ene. 2018 a las 20:27