Lección 17 de aprendizaje avanzado sobre seguridad de red: vulnerabilidad de la lógica empresarial (pago, autenticación y recuperación de contraseña)

Directorio de artículos


1. Lagunas en el pago

1. Modificar el precio de pago

– – En el pago, la compra de bienes generalmente se divide en tres pasos: realizar el pedido, confirmar la información y pagar.
– – Entonces, ¿en qué paso se modifica específicamente este precio modificado?

  • En mi opinión puedes modificar la prueba de precio en cualquiera de estos tres pasos, si hay un mecanismo de verificación en los dos primeros pasos, entonces puedes capturar el paquete e intentar modificar el monto al pagar en el último paso. no en el último paso, si haces una buena inspección, entonces el problema existirá. Puedes probar con un número pequeño o un número negativo para modificar el valor de la cantidad.

2. Modificar el estado de pago

– – Existen interfaces que pueden modificar el estado del pedido, como la interfaz para confirmar la recepción, una vez confirmada la recepción, el estado del pedido cambiará a "Completado".

– – Ejemplo: Existe la siguiente interfaz/setorderstatus?orderid=1093&orderstatus=3, pedidostatus=1 está pendiente de pago, pedidostatus=2 se ha pagado y pedidostatus=3 se ha completado. Usando la interfaz anterior, puede cambiar directamente el estado del pedido a pagar.

3. Modificar la cantidad de compra

– – Por ejemplo: compro dos artículos con el mismo precio y la misma cantidad. Uno de ellos tiene la misma cantidad, pero la otra cantidad se cambia a un número negativo. Cuando se combina el pago, se compensarán entre sí y el el precio será 0.

4. Modificar el valor adjunto.

Cuando el precio del producto no se puede modificar, intento modificar el valor del valor del accesorio a un valor negativo para compensar el coste total.

  1. Modificar el monto del cupón
  2. Modificar cantidad de puntos
  3. Modificar importe de envío

5. Modificar la interfaz de pago

– – Por ejemplo, algunos sitios web admiten muchos tipos de pagos, como sus propias herramientas de pago y herramientas de pago de terceros, y el valor de cada interfaz de pago es diferente. Si la lógica no está diseñada correctamente, cuando selecciono aleatoriamente un clic para pagar , Capturaré el paquete y luego lo modificaré. Su interfaz de pago es una interfaz inexistente. Si no se realiza el procesamiento relacionado con la interfaz inexistente, el pago se realizará correctamente en este momento.

6. Múltiples pagos de reemplazo

– – Primero genere dos pedidos. Los productos de estos dos pedidos son diferentes y sus precios son diferentes. Si el servidor no realiza esta verificación relacionada, capturará el paquete durante el proceso de pago y modificará el valor del pedido a otro Un pedido El valor se paga al final, en este momento se pueden comprar los bienes del pedido 2 con el precio de pago del pedido 1.

7. Repetir pago

– – Por ejemplo, el pago de un pedido le devolverá dinero en efectivo o puntos. Llamar repetidamente a la interfaz de devolución de llamada de éxito del pago puede lograr múltiples reembolsos en efectivo o múltiples reembolsos de puntos.

8. Pago mínimo

– – Este problema es que si modificas el monto del pago al recargar a un número negativo o 0.01, el pago se mostrará como fallido, pero si modificas el monto a 1.00, el pago será exitoso.

– – El mínimo aquí es 1 yuan, y 1 yuan corresponde a 100 puntos. Si lo cambia a 0,01, los puntos correspondientes serán nulos, por lo que mostrará un error. Y cuando lo cambie a 1 yuan, entonces la interfaz de pago por 1 yuan es Sí, la puntuación del área posterior es la cantidad de puntos de otras cantidades, y luego, si salta al pago anterior, comprará una cantidad mucho mayor de puntos por 1 yuan, o puede ser cualquier valor en puntos.

9. El valor es el problema de pago del valor máximo.

– – Por ejemplo, si compra productos en algunos sitios web, hay dos formas de modificar el valor: la primera es modificar directamente el valor del monto del pago al valor máximo, como 999999999, o modificar el valor auxiliar, como cupones. , puntos, etc. a 999999999. Si el diseño lógico aquí es un problema, entonces el monto del pago será 0.

– – O utilice el desbordamiento de enteros para cambiar el monto de la compra a 9999999999999999999999999999999, de modo que el monto del pago pueda convertirse en 0.

10. Pago más allá de la autoridad

– – Es posible que este tipo de problema rara vez exista ahora. La identificación del usuario actual aparecerá durante el pago, como por ejemplo: nombre de usuario = XXXXX. Si no se verifica, el pago es un pago único sin contraseña u otro mecanismo, por lo que se puede modificar. Esta identificación de usuario es la identificación de otro usuario, por lo que puede usar las cuentas de otros usuarios para pagar sus productos.

11. Prueba ilimitada

– – Algunos productos en algunos sitios web, como los productos de la serie en la nube, admiten la prueba. El período de prueba es generalmente de 7 días o 30 días. Una cuenta solo se puede probar una vez y no se puede volver a intentar durante el período de prueba. Pero si la interfaz de prueba será asignado, será fácil causar problemas.

– – Por ejemplo: al pagar, la interfaz de pago detrás de la URL es 3 y la interfaz de prueba es 4, entonces ya la ha usado. Copie la URL al confirmar la prueba y modifique la interfaz de pago posterior a 3, luego esto Se llamará a la interfaz de pago de compra, pero como su producto es de prueba y su valor correspondiente está vinculado al producto de prueba, el monto debe ser 0. Luego haga clic en Pagar finalmente y podrá ver que el pago se realizó correctamente y la prueba se realizó correctamente. ., lo intenté nuevamente y luego su tiempo de prueba se acumulará, lo que resulta en la compra ilimitada de cualquier producto.

12. Simultaneidad de subprocesos múltiples

  • Simule un escenario:
    retire efectivo del sitio web

    • Solicitud normal: el usuario A retira dinero en un sitio web y envía una solicitud de retiro. Una solicitud de retiro se muestra en segundo plano, se revisa y se menciona correctamente.
    • Solicitudes simultáneas: el usuario A realizó un retiro en un sitio web y envió múltiples solicitudes de retiro simultáneamente. Varias solicitudes de retiro se mostraron en segundo plano. Después de la revisión, la recompensa se mencionó con éxito varias veces.
  • En términos generales, se envían varias solicitudes de retiro a la vez, lo que permite que el fondo las procese al mismo tiempo, lo que logra el propósito de retirar dinero varias veces.

Insertar descripción de la imagen aquí

  • Otra forma de pensar es cancelar el retiro cuando normalmente retira dinero del saldo, de modo que el dinero se devuelva al saldo. Cuando intentamos interceptar el paquete de solicitud en la operación de retiro y luego usamos el módulo de reproducción para reenviar múltiples solicitudes de cancelación de retiro a la vez, el servidor procesará estas solicitudes al mismo tiempo y usará este método para aumentar el saldo del cuenta.

Insertar descripción de la imagen aquí


2. Verificar la seguridad

1. Tipos de códigos de verificación comunes:

Insertar descripción de la imagen aquí

2. Omisión del código de verificación gráfica

1) El código de verificación gráfico no se actualiza o no es válido

– – Después de un intento de inicio de sesión manual, no importa cuántos intentos fallidos de inicio de sesión se realicen dentro de un cierto período de tiempo, siempre que la sesión no caduque sin actualizar la página, el mismo código de verificación se puede usar ilimitadamente para adivinar uno violentamente. o más cuentas de usuario.

2) El valor del código de verificación gráfico se puede obtener directamente.

– – El código de verificación suele estar oculto en el código fuente del sitio web o en la cookie de la solicitud, o se devuelve en el paquete de respuesta.
Insertar descripción de la imagen aquí

3) Omisión del parámetro del código de verificación gráfica

Datos del paquete de solicitud de inicio de sesión: user=admin&pass=1234&vcode=brlnPuede
probar los dos métodos de omisión siguientes:

  1. Omita el valor nulo del código de verificación, cámbielo a usuario=admin&pass=1234&vcode=
  2. Elimine directamente el parámetro del código de verificación y cámbielo a usuario=admin&pass=1234

Datos del paquete de solicitud de inicio de sesión: usuario=admin&pass=1234&needcode=1&vcode=brlnPuede
intentar cambiar el valor del parámetro needcode a 0

4) Hay una página sin código de verificación.

– – Después de la prueba, si encontramos que el código de verificación del sitio web en sí no es defectuoso, entonces podemos intentar encontrar otras páginas de inicio de sesión o interfaces para intentar descifrar por fuerza bruta. Como páginas ocultas, páginas de prueba, páginas de versiones antiguas, etc.

5) Código de verificación universal

– – Durante el proceso de prueba de penetración, a veces ocurre esta situación: hay un código de verificación universal en el sistema, como 0000 o 9999. Siempre que ingrese el código de verificación universal, puede ignorar el código de verificación y realizar un descifrado por fuerza bruta. . Los desarrolladores suelen dejar este tipo de código de verificación universal que se olvidan de eliminarlo durante las pruebas.

6) La cantidad de códigos de verificación es limitada.

– – Comúnmente visto en códigos de verificación de tipo de cálculo, como 1+2=? , este tipo de código de verificación no se puede llamar código de verificación en sentido estricto. Si actualizamos el código de verificación unas cuantas veces más, es posible que encontremos que solo hay unas pocas preguntas aritméticas en el sistema. En este caso, solo necesitamos descargue todos los códigos de verificación y genere una biblioteca md5, y luego compare el código de verificación generado por la interfaz con el archivo local.

7) Identificación del código de verificación simple

– – En el proceso normal de extracción de vulnerabilidades, si encontramos que el código de verificación de inicio de sesión es muy simple y fácil de identificar, entonces podemos intentar usar herramientas automatizadas para descifrar el inicio de sesión, como HTTP Fuzzer de PKAV, complemento bp, etc. .

8) Reutilización del código de verificación

– – Cuando abre algunos sistemas comunes que requieren inicio de sesión, generalmente el sistema solicitará automáticamente un código de verificación, capturará el paquete, lo tomará y mantendrá la sesión sin cambios.

3. Omitir el código de verificación por SMS

1) El código de verificación por SMS se puede enumerar violentamente durante su vida útil.

– – No hay mucho que decir, solo use el código de verificación para forzar la contraseña de la cuenta antes de que caduque.

2) El código de verificación por SMS se devuelve en el paquete de datos.

Insertar descripción de la imagen aquí

3) Modificar los parámetros del paquete de solicitud o los valores de las cookies para omitir

– – Por ejemplo, hay un paquete de publicación: mobile=18888888888&userid=00001 y la cookie contiene: codetype=1

– – En un paso específico, modifique el móvil = su propio número de teléfono móvil y podrá recibir los códigos de verificación de otras personas en su teléfono móvil y luego utilizar los números de teléfono móvil de otras personas y los códigos de verificación recibidos para iniciar sesión más tarde;

– – Modifique los parámetros y valores sospechosos en Cookie para omitirlos, por ejemplo, modifique el tipo de código = 0 arriba

4) Modificar el paquete de devolución para omitir

– – Tomemos un ejemplo simple: envíe un código de verificación por SMS incorrecto y el paquete devuelto contiene: estado = falso. Utilice la función "Interceptar" de Burpsuite para interceptar el paquete de respuesta y modifique el estado del paquete de respuesta = verdadero para omitir el frente. -finalizar juicio. , ingresó exitosamente al sistema. Los detalles deben combinarse con escenarios reales y operarse de manera flexible.

5) Romper la interfaz del código de verificación por SMS

– – Es equivalente a cuando probé Ping An Insurance y descubrí que la interfaz del código de verificación fue proporcionada por la compañía de telefonía móvil. Llamé a la compañía de telefonía móvil para obtener el código de verificación.

6) Código de verificación universal predeterminado

– – He encontrado una vulnerabilidad antes: puedes iniciar sesión en cualquier cuenta de usuario ingresando 9999 como código de verificación por SMS.
Para facilitar las pruebas y el mantenimiento, algunos sistemas dejarán un código de verificación universal, que se conservará después de conectarse. Puede estar arreglado en el archivo de configuración, archivo js o código, o puede cambiar con el tiempo.

4. Seguridad de autenticación de identidad

1) craqueo por fuerza bruta

– – Cuando no haya restricciones de código de verificación o un código de verificación se pueda usar varias veces, use usuarios conocidos para forzar contraseñas de fuerza bruta o use una contraseña común para forzar a usuarios de fuerza bruta.
Explosión de captcha simple.

2) sesión y clase de cookies

– – Ataque de fijación de sesión: utilice el mecanismo de inmutabilidad de sesión del servidor para obtener autenticación y autorización de otros, y hacerse pasar por otros.

– – Falsificación de cookies: modificar un parámetro en la cookie puede iniciar sesión en otros usuarios (complemento de Chrome: EditThisCookie).

3) Cifrado débil

– – Cifrado de front-end, rompible o sin cifrado.


3. Vulnerabilidad de recuperación de contraseña

1. Proceso general de prueba lógica de recuperación de contraseña

  1. Primero intente el proceso normal de recuperación de contraseña, elija diferentes métodos de recuperación y registre todos los paquetes de datos.
  2. Analizar paquetes de datos para encontrar partes sensibles
  3. Analizar los métodos de verificación utilizados por el mecanismo de recuperación de antecedentes.
  4. Modificar la especulación de verificación de paquetes

2. Clasificación de vulnerabilidad de recuperación de contraseñas

1) Código de verificación descifrado por fuerza bruta

  • Generalmente, la contraseña del teléfono móvil es un número puro de 6 dígitos y, si sobrevive más de diez minutos, puedes intentar forzarla.

2) El código de verificación se devuelve directamente.

  • El servidor devuelve directamente el código de verificación, como un paquete de recuperación de contraseña devuelto por una aplicación.

Insertar descripción de la imagen aquí

3) Salta el paso de verificación

  • Después de ingresar a la cuenta de restablecimiento, omita el paso de verificación y acceda directamente a la página de restablecimiento de contraseña. No es necesario ingresar el código de verificación en este momento, simplemente cambie el paso 2 en el enlace al paso 3, como se muestra a continuación:

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

4) Vincular mediante correo electrónico y número de teléfono móvil

  • Al vincular el buzón de un usuario, puede vincular los buzones de otros usuarios al suyo modificando el uid, restableciendo así la contraseña del usuario a voluntad. Es equivalente a usar el paso de recarga de contraseña para cambiar el teléfono móvil vinculado de la víctima al mío, luego puedo usar mi propio teléfono móvil para iniciar sesión en las cuentas de otras personas.

5) El inicio de sesión de terceros vincula a otros usuarios

  • Por ejemplo: al vincular una cuenta de Weibo, primero inicie sesión en Weibo y obtenga el código, y luego la solicitud para vincular el código y el UID es la siguiente:
    • ThirdPartyType=1&uid=60570181&state=test&code=fb3a6454736e15534486c5a214067943
  • Al modificar el uid, puede vincular su Weibo a otras cuentas de usuario y luego iniciar sesión en cualquier cuenta de usuario iniciando sesión a través de Weibo.

6) No se verifica si el número de teléfono móvil aceptado por el código de verificación es consistente con el nombre de usuario o la sesión.

  • Por ejemplo, la solicitud para enviar un código de verificación es la siguiente:
    username=***&mobilePhone=***&randcodeAjax=6119
  • No hay verificación de que el nombre de usuario sea consistente con mobilePhone. Puede aceptar el código de verificación modificando mobilePhone por su propio número de teléfono móvil.

7) Omisión de verificación local

  • El cliente juzga localmente si el código de verificación es correcto y el resultado del juicio también se puede modificar localmente, lo que en última instancia lleva a engañar al cliente haciéndole creer que hemos ingresado el código de verificación correcto.
  • Por ejemplo, cambiar el 0 en el paquete devuelto a 1 puede omitir la verificación.

8) El último paso para restablecer la contraseña se puede controlar mediante uid o nombre de usuario.

  • El último paso para restablecer la contraseña es restablecer la cuenta a través del uid o nombre de usuario pasado por el usuario, de modo que cambiar el UID pueda restablecer las contraseñas de otros usuarios.

Insertar descripción de la imagen aquí

9) Error lógico en modificación de contraseña en Centro Personal

  • La suma de verificación de la contraseña actual y la nueva contraseña son dos paquetes separados. Por lo que se puede entender que la contraseña actual no está verificada.
  • La solicitud para cambiar la contraseña es la siguiente:
    ssouid=***&passwd=***
  • Simplemente modifique el ssouid.

10) Utilice la sesión para volver a vincular al usuario.

  • El último paso para restablecer la contraseña es obtener el nombre de usuario a través de la sesión y luego restablecerlo.
  • El nombre de usuario está vinculado a la sesión en el primer paso para restablecer la contraseña;
    luego, si el último paso para restablecer la contraseña no verifica si el usuario ha completado el proceso de verificación, entonces puede volver a vincular la sesión a otra cuenta. lograr cualquier propósito de restablecimiento de contraseña.

11) Eliminar los parámetros de verificación para evitar la verificación

  • La función de recuperación de contraseña del sistema de correo electrónico tiene un error de lógica de diseño y una vulnerabilidad de omisión de autenticación;
  • Al capturar el paquete de datos, puede modificar el mensaje, eliminar los parámetros para recuperar la respuesta a la pregunta y luego cambiar la contraseña directamente. Es decir, capture el paquete, elimine los campos de verificación, como el código de verificación, en el paquete y luego vuelva a insertar el paquete.

Supongo que te gusta

Origin blog.csdn.net/p36273/article/details/132899703
Recomendado
Clasificación