← Volver al listado de tecnologías

Natas Nivel 6 - Inclusión de Código Fuente

Por: SiempreListo
overthewirenatasphpsource-codenivel-6

Natas Nivel 6 - Inclusión de Código Fuente

Objetivo

Un formulario pide un “secret”. Hay un enlace a “View sourcecode”.

Teoría: Exposición de Código Fuente

El Problema

Normalmente, PHP se ejecuta en el servidor y el usuario solo ve el HTML resultante. Pero si el desarrollador expone el código fuente, revela la lógica interna.

Qué Buscar en Código PHP

Análisis del Código

Al hacer click en “View sourcecode”, vemos algo como:

<?php
include "includes/secret.inc";

if(array_key_exists("submit", $_POST)) {
    if($secret == $_POST['secret']) {
        print "Access granted. Password is...";
    } else {
        print "Wrong secret";
    }
}
?>

Observaciones

  1. Incluye un archivo: includes/secret.inc
  2. Compara $secret con lo que envías
  3. La variable $secret viene del archivo incluido

Solución

Paso 1: Acceder al archivo incluido

Navega a:

http://natas6.natas.labs.overthewire.org/includes/secret.inc

Paso 2: Obtener el secret

El archivo .inc contiene:

<?php
$secret = "VALOR_SECRETO";
?>

Paso 3: Enviar el formulario

Ingresa el valor del secret en el formulario y obtén la contraseña.

Por Qué Funciona

ProblemaDescripción
Código fuente expuestoLink directo al código
Archivo .inc accesibleSin protección de acceso
Secret hardcodeadoContraseña en código

Extensiones de Archivo

ExtensiónComportamiento típico
.phpEjecutado, no visible
.inc¡Puede ser visible!
.phpsMuestra código fuente
.bakBackup, visible
.oldVersión anterior, visible

Proteger archivos .inc

# .htaccess
<Files ~ "\.inc$">
    Order allow,deny
    Deny from all
</Files>

O mejor: ponerlos fuera del webroot.

Conceptos Aprendidos

ConceptoDescripción
Source code disclosureExposición de código
PHP includesArchivos incluidos
File extension handlingManejo de extensiones

Siguiente Nivel