[BWAPP] Registro de despacho de aduanas XSS

[BWAPP] Resumen de XSS


Las soluciones XSS-Reflected (GET y POST) son muy convencionales, los niveles bajo y medio solo filtran comillas simples, y los niveles altos usan htmlspecialchars () y htmlentities (). Resuma las diferencias entre los dos siguientes.

La diferencia entre htmlspecialchars () y htmlentities ()

  • htmlspecialchars () convierte los siguientes caracteres en entidades HTML

    &volverse&

    "volverse"

    'Sin cambios (codificado como 'OR después de que se establezca ENT_QUOTES ')

    <Se convierte&lt;

    >Se convierte&gt;

    Tipo opcional:

    ENT_COMPAT ---- De forma predeterminada, solo se codifican las comillas dobles

    ENT_QUOTES ---- codifica comillas dobles y comillas simples

    ENT_NOQUOTES ---- No codifique las comillas

  • htmlentities () convierte todos los caracteres usados ​​en entidades HTML

    Convierta todas las etiquetas y símbolos html, incluso chinos, en entidades html


1 、 XSS reflejado (JSON)

nivel bajo

Primero lanza una carga útil: <script>alert(/xss/)</script>

imagen-20210315134221575

Mira el código fuente de la página web:

imagen-20210315134255727

El punto de salida original está en el código json.

Intente cerrar y construir la carga útil:"}]}';alert(/xss/);//

Tenga en cuenta que debe comentar el código js detrás de //

imagen-20210315134443073

¡Ventana emergente exitosa!

nivel medio

imagen-20210315142058033

Parece estar codificado por materialización html, que es difícil de pasar por alto.

El alto nivel también se materializa en la codificación.


2 、 XSS reflejado (AJAX / JSON)

nivel bajo y medio

Esta página es xss_ajax_2-1.php, a través de Ajax llame a xss_ajax_2-2.php para completar la consulta

imagen-20210315160651428

ingresar:<img src=1 onerror=alert(/xss/)>

o<svg onload=alert(/xss/)>

imagen-20210315152305974

Pero <scritp>alert(/xss/)</script>no puedo usarlo

Porque de acuerdo con la especificación HTML5, innerHTMLlas scriptetiquetas en se interpretarán como texto plano y no se ejecutarán ( ver detalles ). Entonces no se puede insertar directamente<scrit></script>

nivel alto

intentar:<img src=1 onerror=alert(/xss/)>

imagen-20210315161352494

Como se muestra en la figura, se ha codificado físicamente y es difícil de pasar por alto.

Análisis de código fuente:

//xss_ajax_2-1.php
<?php
                if($_COOKIE["security_level"] == "2")
                {
    
    
?>
                    JSONResponse = JSON.parse(xmlHttp.responseText);
<?php
                }
                else
                {
    
    
?>
                    JSONResponse = eval("(" + xmlHttp.responseText + ")");
<?php
                    }
?>

A partir del código fuente anterior, el json entrante de AJAX de nivel bajo y medio se analizará con eval (), y el nivel alto se analizará con JSON.parse ().

para resumir:

La diferencia entre json.parse y eval ():

// JSON.parse()
var json = '{"name":"GDT","age":,"University":"GDUT"}';
var info = JSON.parse(json);    //解析为JSON对象

//eval()
var json = '{"name":"GDT","age":,"University":"GDUT"}';
var info = eval('(' + json + ')'); //解析为JSON对象

Ambos pueden analizar cadenas JSON en objetos

En comparación con el formato JSON.parse () estricto, eval () puede analizar cualquier cadena y eval no es seguro. Debido a que eval es más flexible, habrá problemas de seguridad potenciales.


3 、 XSS reflejado (AJAX / XML)

nivel bajo

Aún así, esta página es xss_ajax_1-1.php, salte a xss_ajax_1-2.php para analizar a través de ajax

imagen-20210315162637678

payload_1 :<a xmlns:a='http://www.w3.org/1999/xhtml'><a:body onload='alert(/xss/)'></a>

xmlns es la abreviatura de espacios de nombres XML, ejecute una alerta (/ xss /) al cargar el sitio web

payload_2:&lt;img src=0 onerror=&quot;alert(1)&quot;&gt;

imagen-20210315170344114

nivel medio

Use addedlashes () para escapar de los parámetros ', ", \

Cambiar una carga útil:&lt;img src=0 onerror=&quot;alert(1)&quot;&gt;

Tanto HTML como XML tienen algunos símbolos reservados para su uso y no pueden usarse como contenido en código XML. Por ejemplo, los símbolos <y> se utilizan al principio y al final de las etiquetas XML. Para mostrar estos caracteres especiales, es necesario utilizar entidades de caracteres. Algunos caracteres especiales o símbolos no se pueden ingresar directamente usando el teclado. Puede utilizar entidades de caracteres para mostrar estos símbolos o caracteres especiales.

En este ejemplo, la codificación de la entidad html de la carga útil omite el escape de addedlashes (), y luego la carga útil original se restaura en el xml para activar xss.

Puntos de conocimiento relacionados: el papel de la codificación de entidades html.

nivel alto

Se utiliza la codificación de entidad htmlspecialchars (), que es difícil de omitir.


4 、 XSS reflejado (botón trasero)

nivel bajo:

Haga clic en el botón para ver el código fuente de la página

imagen-20210315200856337

imagen-20210315200646417

Use eructo para capturar paquetes y vea:

imagen-20210315201100348

Se encuentra que el valor de onclick proviene del campo de referencia.

Modifique el valor del campo de referencia para:'"><img src=1 onerror=alert(/xss/)>

imagen-20210315201325803

Pon la bolsa:

imagen-20210315201350331

nivel medio

Este nivel usa addedlashes () para escapar del '", pero la carga útil anterior aún se puede usar. Siento que el escape no funciona, lo cual es un poco extraño. Oh, por cierto, la barra invertida es válida para js, pero no para html.

Pero también son posibles otros métodos, como:javascript:alert(/xss/)

imagen-20210315214234810

imagen-20210315214238065

nivel alto

Se utiliza el escape de entidad htmlspecialchars (), que es difícil de omitir.


5 、 XSS reflejado (encabezado personalizado)

Nivel bajo y medio:

Según el mensaje:

imagen-20210315220424569

Agregar encabezado bWAPP:

imagen-20210315220616781

imagen-20210315220408064

nivel alto:

Sigue siendo la codificación htmlspecialchars (), que es difícil de omitir.


6 、 XSS-Reflejado (Eval)

nivel bajo y medio

Reglas antiguas, ingrese una <script>alert(/xss/)</script>prueba primero

imagen-20210315222124445

Verifique el código fuente de la página y encuentre que el punto de salida está en la etiqueta del script:

imagen-20210315222111145

Ajuste la carga útil:

imagen-20210315221803259

imagen-20210315221744068

¡La ventana emergente tiene éxito!

Función eval: Si el parámetro es una expresión, la función eval () ejecutará la expresión. Si el parámetro es una declaración de Javascript, eval () ejecutará la declaración de Javascript. eval () es una función peligrosa. Ejecuta código con los mismos permisos que la persona que llama, así que trate de no usarlo tanto como sea posible para evitar que otras personas implanten código malicioso. Funciones similares no son fáciles de atacar.


7 、 XSS-Reflectde (HREF)

nivel bajo

Simplemente ingrese un número:

imagen-20210316102908483

Descubrí que salté a una página de votación:

imagen-20210316102935900

Analizando el código fuente de la página web, se puede ver que hay dos puntos de salida, uno en la etiqueta p y otro en herf.

imagen-20210316102846761

Intente lanzar una carga útil en:<script>alert(/xss/)</script>

imagen-20210316103445081

imagen-20210316103321234

Se encuentra que la carga útil en la etiqueta p ha sido codificada por entidad, pero el herf no ha cambiado en absoluto.

Construya una etiqueta de cierre de carga útil:></a><img src=1 onerror=alert(/xss/)>

imagen-20210316103958887

imagen-20210316103925584

¡La ventana emergente tiene éxito!

nivel medio

Pruébelo con una carga útil de bajo nivel:

imagen-20210316104621452

Se encuentra que la carga útil en href está codificada por url.

Ver código fuente:

imagen-20210316112326642

Se encuentra que tanto el nivel medio como el nivel alto están codificados en URL.


8 、 XSS-Reflected (iniciar sesión desde)

nivel bajo

Es un formulario de inicio de sesión:

imagen-20210316113902306

Intente usar una contraseña universal: (ingrese en el cuadro de nombre o contraseña que se puede usar)

' or 1=1;"<img src=1 onerror=alert(/xss/)>"

imagen-20210316113824440

Principio de implementación: haz eco de la carga útil informando un error en la base de datos, lo que activa xss

imagen-20210316133713832

Nivel medio:

addedlashes () escapes ', ", es difícil pasar por alto

nivel alto:

La función mysql_real_escape_string () escapa, lo cual es difícil de pasar por alto.

Caracteres afectados: \ x00, \ n, \ r, \, ', ", \ x1a


9 、 phpMyAdmin BBCode Tage XSS

imagen-20210316141049126

La pantalla es un BBcode XSS en phpmyadmin, que no se ha reproducido.

imagen-20210316141220456


10 、 XSS-Reflejado (PHP_SELF)

nivel bajo y medio

Simplemente reemplace uno de los dos primeros parámetros:<img src=1 onerror=alert(/xss/)>

imagen-20210316141508232

nivel alto

imagen-20210316153713574

Ha sido codificado por entidad por htmlspecialchars ().


11 、 XSS-Reflejado (Referer)

nivel bajo y medio

La información del campo de referencia se muestra en la página:

imagen-20210316154202601

Use burp para capturar paquetes, agregue el campo de referencia y el contenido es la carga útil: por <img src=1 onerror=alert(/xss/)>supuesto, también son posibles otros.

imagen-20210316154012525

nivel alto

código de entidad htmlspecialchars ().


12 、 XSS-Reflejado (usuario-Agente)

Es similar al nivel anterior, así que no lo repetiré.


13 、 Almacenado XSS (Blog)

nivel bajo y medio

Ingrese un punto de carga útil directamente para enviar:

imagen-20210316155354174

imagen-20210316155403247

Como se muestra en la imagen, la ventana se abrirá directamente. Actualice la página y vuelva a aparecer, lo que indica que el daño del tipo de almacenamiento xss es duradero.

nivel alto

codificación de entidad de función htmlspecialchars ().

Las rutinas son las mismas, muy aburridas. . . .


14 、 Almacenado XSS (Cambiar secreto)

nivel bajo

método uno:

imagen-20210316162828783

Pruebe la carga útil en el cuadro de entrada en vano

Verifique el código fuente de la página web y busque un cuadro de entrada oculto llamado inicio de sesión.

imagen-20210316161522738

Usé burp para capturar el paquete y descubrí que se enviaron tres parámetros: secreto, inicio de sesión y acción

imagen-20210316161734220

Capture el paquete y modifique el valor del parámetro de inicio de sesión para cerrar la etiqueta de entrada:

imagen-20210316162709726

imagen-20210316162348608

Método dos:

Ingrese la carga útil directamente en el cuadro de entrada:<script>alert(/xss/)</script>

imagen-20210316164635113

Descubrió que se ha insertado correctamente en la base de datos.

imagen-20210316164712251

Al iniciar sesión en la página de inyección SQL (formulario de inicio de sesión / usuario), inicie sesión como usuario bee y haga clic en enviar para activar xss

imagen-20210316165108083

nivel medio y alto

El valor del token se encuentra en la captura de paquetes:

imagen-20210316163249231

El valor del token es aleatorio y hay una verificación en el backend, que está agrietada. .

imagen-20210316163615865

Intente ingresar la carga útil en el cuadro de entrada y el resultado se codificará como entidad antes de ingresar a la base de datos.

imagen-20210316165607368

Tanto el nivel medio como el nivel alto son codificación de entidad html.

imagen-20210316191550866

Graduado. .. ..


15 、 Almacenado XSS (Cookies)

Enterrado en la manipulación de cookies

nivel bajo

Modifique el valor del parámetro de género para modificar el valor de la cookie

imagen-20210316192452836

imagen-20210316192506955

nivel medio

El valor del parámetro de género es la codificación de entidad html.

imagen-20210316192933780

nivel alto

No se pueden modificar las cookies modificando el género

imagen-20210316193202208

imagen-20210316193310596

El filtrado de la lista blanca se realiza en el backend.


16 、 XSS almacenado (usuario-agente)

nivel bajo y medio

Inserte la carga útil directamente en el campo User-Agent

imagen-20210316194419035

imagen-20210316194424457

La actualización de la página sigue apareciendo y el daño es duradero.

nivel alto

Hay códigos de entidad htmlspecialchars ().


para resumir:

Funciones clave:

php:

htmlspecialchars () codificación <>, ', "y

htmlentities () convierte todas las etiquetas y símbolos html, incluso chinos, en entidades html

addedlashes () escapa ', ", \, null

mysql_real_escape_string () escape \ x00, \ n, \ r, \, ', ", \ x1a

js:

innerHTMLLas scriptetiquetas en se interpretarán como texto sin formato y no se ejecutarán ( ver detalles ).

La diferencia entre json.parse y eval ():

En comparación con el formato JSON.parse () estricto, eval () puede analizar cualquier cadena y eval no es seguro. Debido a que eval es más flexible, habrá problemas de seguridad potenciales.

Supongo que te gusta

Origin blog.csdn.net/qq_43665434/article/details/114897844
Recomendado
Clasificación