Depuración front-end en pruebas de penetración (Parte 1)

1. Prefacio

La depuración de front-end es una parte importante de las pruebas de seguridad. Puede ayudarnos a dominar los principios operativos de las páginas web, incluida la lógica de los scripts js, los métodos de cifrado y descifrado, los parámetros de solicitud de red, etc. Con esta información, podemos descubrir con mayor precisión las vulnerabilidades de los sitios web y desarrollar estrategias de ataque efectivas. Por seguridad, el conocimiento front-end no solo puede mejorar la eficiencia de las pruebas, sino también ampliar las ideas de prueba.

El siguiente caso es un problema que encontré al probar un sistema de administración de backend: originalmente, la interfaz y los campos se descubrieron a través de js en la página de inicio de sesión, pero cuando se realizó la solicitud, se descubrió que no era una vulnerabilidad no autorizada, sino la Los campos solo tenían nuevas contraseñas y nombres de usuario, entonces existe una alta probabilidad de que haya una laguna en esto.

2. Texto

Esta es una prueba de autorización y el cliente debe proporcionar una cuenta y una contraseña. Cambiar la contraseña en segundo plano:

ef52f1bb0586a7ce3f4a649adc0af83e.png

1. Análisis de JavaScript

Cuando ingresé la contraseña correcta, volvió a desaparecer, lo que indica que hubo una verificación. Ya sea verificación de back-end o verificación de front-end. A partir del contenido js antes de iniciar sesión, se puede adivinar aproximadamente que esta es la verificación de front-end.

Utilicé burp para capturar el paquete y descubrí que no se aprobó ninguna solicitud:

5f562b66beb86b0cbc15f5525b13cbf4.png

Explique la alta probabilidad de verificación front-end (puede que no se detecte, pero la probabilidad es muy pequeña) El siguiente paso es analizar los js front-end. Aquí analizo principalmente la lógica de juicio del mensaje "Inconsistente con la contraseña inicial" en el cuadro de texto:

Hay dos métodos principales para mi análisis aquí:

①Oyente de eventos:

Utilice el detector de eventos para encontrar el evento js correspondiente, ver el js en la dirección de avance y seguir la función correspondiente para realizar una auditoría de código capa por capa:

fe5ce4ae786ea93a1dbd3f2324c0521d.png

d3fc54e52b524bd1b0ac0aa1588c0e7f.png

Pero mirando hacia adelante, descubrimos que se llamó a través de múltiples capas. Y todos los códigos están muy comprimidos y ofuscados.

En este momento también puedes encontrarlo a través de otros botones, existe una alta probabilidad de que el js que maneja la lógica esté todo junto. Por supuesto que es posible.

Busque el botón de enviar.

62737b8e2feb45519e47c1a9d16679cb.png

Al hacer clic se producirá un error. Consulte la lógica de este envío:

d5f6727664e914e39ddbea56b840d858.png

Busque enviar y verifique el código js de llamada:

fc0ba4f09a1d950a3faeab0fb6ea4eb0.png

Desafortunadamente, sigue siendo este js confuso el que resulta incomprensible. No puedo ingresar a la función incluso si mantengo presionado Ctrl, no sé por qué.

② Busque directamente las palabras clave correspondientes y navegue en js

Este método debería ser el más utilizado por todos. Busque directamente palabras clave, como cifrado y descifrado, y busque directamente cifrado, que generalmente es eficaz.

Por ejemplo, aquí puede buscar directamente el mensaje de error: inconsistente con la contraseña inicial:

ede6c6c7db26f93f0b862578ff268e5f.png

cd65c19f5b48538392860259c791cf62.png

Cada vez que lo busco, siempre es 0. En este momento, debe considerar si es posible guardarlo en CSS o usar codificación urlencode o Unicode.

(PD: dado que no hay ninguna solicitud para el backend, no haremos suposiciones sobre la respuesta del backend. De lo contrario, si no se puede encontrar la cadena normal en el front-end, es posible que el backend la devuelva).

Primero convierta estos caracteres a codificación Unicode para verlos. Al realizar consultas como caracteres, se recomienda no consultar todos los caracteres, porque a veces puede separar las cadenas correspondientes o unirlas. Utilice varias palabras clave que se puedan buscar directamente, como aquellas que no son fáciles de repetir. Por ejemplo, aquí "consistente".

2eb6b2508a2950e9e742cebd9ded7faa.png

Para la búsqueda, puede utilizar las páginas js y html de burp y luego usar la propia búsqueda de burp, lo que puede ser más conveniente. Así es como uso este método para consultar:

¡Por suerte lo encontré!

function At(n, o) {
            1 & n && (t.TgZ(0, "mat-hint"),
            t._uU(1, "\u4e0e\u521d\u59cb\u5bc6\u7801\u4e0d\u4e00\u81f4"),
            t.qZA())
        }
        function bt(n, o) {
            1 & n && (t.TgZ(0, "mat-hint"),
            t._uU(1, "\u4e0e\u8bbe\u7f6e\u7684\u5bc6\u7801\u4e0d\u4e00\u81f4"),
            t.qZA())
        }

Puedes ver que js está muy confundido.

Es difícil auditar. Aquí solo necesitamos verificar quién llamó a esta función y encontrar la lógica en línea.

Hay varias formas de encontrarlo. Aquí tomo prestada la respuesta de New Bing:

Hola, soy Bing.

Según los resultados de mi búsqueda, hay varias formas de lograr esta funcionalidad en Chrome. Te presentaré algunos de estos métodos:

1. Utilice la función de búsqueda de Chrome Developer Tools¹. Puede presionar `ctrl + shift + F` (Windows) o `cmd + optn + F` (macOS) para abrir una ventana de búsqueda en todos los scripts. Luego puede marcar la casilla de verificación "Expresiones regulares" y buscar el nombre de la función y cómo está definida. Por ejemplo, si desea encontrar una función llamada `foo`, puede buscar `foo\s*=\s*function` (lo que significa que hay cualquier cantidad de espacios entre `foo = function`) o `function\s * foo\s*\(` (que significa `función foo (` con cualquier número de espacios entre ellas). Los resultados de la búsqueda mostrarán el script y la ubicación donde está definida la función, y puedes hacer clic en ellos para saltar a la línea correspondiente. de código.

2. Utilice la función de pila de llamadas de las herramientas para desarrolladores de Chrome. Si desea saber desde dónde se llama una función, puede agregar un punto de interrupción dentro del cuerpo de la función y ejecutar el código. Cuando la ejecución del código alcanza el punto de interrupción, las herramientas del desarrollador se detendrán y mostrarán la pila de llamadas actual. Puede ver el orden y la posición en la que se llaman las funciones, así como los parámetros y variables locales de cada función en el panel de la pila de llamadas.

3. Utilice código JavaScript para obtener la persona que llama a la función³. Si desea saber desde dónde se llamó una función en su código, puede usar la propiedad arguments.callee.caller para acceder a la persona que llama de la función actual. Esta propiedad devuelve un objeto de función y puede usar su propiedad `name` para obtener el nombre de la función, o su método `toString()` para obtener el código fuente de la función. Si la función actual se llama desde el ámbito global, entonces esta propiedad devolverá "nulo", puede usar un juicio condicional para manejar esta situación.

Adopté el segundo punto aquí y puedes ver las llamadas a la pila aquí.

996b1f8dc6dadab5d6f2c544dcaaf6c4.png

Encontré con éxito el punto de juicio de contraseña:

24a602bb32366f5645c133057256158a.png

A continuación, puedes cambiar lo que quieras cambiar.

2. Modificación y depuración local de JavaScript

Después de encontrar la función correspondiente, el siguiente paso es modificar el contenido en js. Si desea modificar js y depurarlo en el front-end, debe agregar una carpeta en el reemplazo y luego guardarla en la interfaz de edición de js. Si el guardado se realiza correctamente, aparecerá un pequeño punto violeta:

7e24b2e9c6c158768a9ccfa6add61f86.png

f54b957c5d97887d96d750bc88cbe430.png

Agregue un console.log en js para probar y depurar. Después de activar esta función, imprime correctamente:

acdc0afdcf62fe7183fd66d9f63b2c82.png

Si desea omitirlo a través del front-end más adelante, también puede depurar el botón de enviar.

3. Finalizando

Algunas personas pueden decir, ¿por qué pasar por tantos problemas? Este artículo solo explica algunas ideas de depuración y no tiene nada que ver con esta vulnerabilidad, solo se utiliza como explicación de un caso. No soy una persona de front-end, principalmente comparto y uso. Yo mismo aprendí muchos aspectos del conocimiento solo después de haber estado expuesto a ellos. Quizás para algunos grandes, estos sean muy básicos, así que no los critiques. Cava un hoyo por ti mismo. Si la respuesta a este artículo es buena, compartiré contigo cómo depurar y probar algunos sitios web que encuentran cifrado y descifrado de front-end js.

Convocatoria de manuscritos originales

Estamos solicitando artículos técnicos originales. Las presentaciones son bienvenidas.

Correo electrónico de envío: [email protected]

Tipo de artículo: tecnología hacker y geek, puntos críticos de seguridad de la información, investigación y análisis de seguridad, etc. relacionados con la seguridad

Después de la revisión y publicación, puede recibir regalías que oscilan entre 200 y 800 yuanes.

Para obtener más detalles, haga clic aquí para verlo.

1184c3cf3cb254287f2a4d678427d3cf.gif

Un gran carnaval al inicio de clases, haz clic en "Leer el texto original"

Supongo que te gusta

Origin blog.csdn.net/qq_38154820/article/details/133191537
Recomendado
Clasificación