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:
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:
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:
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.
Al hacer clic se producirá un error. Consulte la lógica de este envío:
Busque enviar y verifique el código js de llamada:
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:
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".
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í.
Encontré con éxito el punto de juicio de contraseña:
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:
Agregue un console.log en js para probar y depurar. Después de activar esta función, imprime correctamente:
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.
Un gran carnaval al inicio de clases, haz clic en "Leer el texto original"