Nueva pregunta XCTF-PHP2 (NO.GFSJ0234)
Encienda la máquina de destino e inicie el entorno virtual.
Copia la URL y ábrela con Firefox
Se muestra "¿Puedes iniciar sesión en este sitio web?", y no hay respuesta al hacer clic en cualquier área. En este momento, presione "F12" para abrir el código fuente de la página web y verlo.
También puede ingresar en la consola de línea de comando “curl -i 网址”
para ver los resultados devueltos.
Firefox revisó el código fuente y no encontró nada. Mirando hacia atrás en el mensaje de pregunta, podemos adivinar que se trata de contenido php. Puede usar Yujian para escanear el fondo y ver index.php
el archivo.
Así que verifiqué de acuerdo con la URL del resultado del escaneo y el resultado solo mostró el contenido anterior.
En este momento, pensé que el archivo phps es en realidad el archivo de código fuente de php. En circunstancias normales, se utiliza para mostrar directamente el contenido del código php a los usuarios (visitantes) en un navegador web. Debido a que los usuarios no pueden ver el contenido de los archivos php directamente a través de un navegador web, deben usar archivos phps en su lugar. Ver en Firefox y consola de línea de comando:
El código principal es el siguiente:
<?php
if("admin"===$_GET[id]) {
echo("<p>not allowed!</p>");
exit();
}
$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "admin")
{
echo "<p>Access granted!</p>";
echo "<p>Key: xxxxxxx </p>";
}
?>
Interpretación del código:
el valor de la identificación entrante es igual “$_GET[id] = urldecode($_GET[id])”
al valor que todavía es "admin" después del procesamiento de la función. Esta función es una función de decodificación de URL, es decir, el valor de la URL que debe ingresarse con un valor de identificación de "admin" está cifrado en hexadecimal. Utilice la URL para agregarlo en línea. Descifrar conversiones de sitios web
Agregue el resultado de la conversión "?=%61%64%6d%69%6e" directamente después de la URL, pero aún no se puede obtener la marca.
Es posible que "%" también necesite codificación URL. Aquí, "%61%64%6d%69%6e" se codifica y se convierte nuevamente para obtener "%2561%2564%256d%2569%256e". Después de la transmisión, el se obtiene la bandera
Aviso:
Se encontró en el código que existe if("admin"===$_GET[id])
y if("admin"==$_GET[id])
está relacionado con la sintaxis PHP, es decir “==”
, “==”
el operador solo compara valores, independientemente del tipo de datos de la variable, y pueden ocurrir algunos resultados de comparación que no estén en línea con las expectativas; y el El operador “===”
es el operador de congruencia en PHP y se utiliza para comparar si dos valores de variables y tipos de datos son iguales.
Referencia:
XCTF Mundo de Ataque y Defensa PHP2
CTF_EXP02: XCTF PHP2