Directorio de artículos
Descripción del Título
El tema proviene de BUUCTF, enlace: haz clic en mí para ver
Solución inesperada de la metafísica
El nombre del título es admin, debería ser para iniciar sesión con admin
Esto también se confirma en el código fuente.
Traté de ingresar la contraseña al azar en la página de inicio de sesión, y cuando ingresé 123, ¡estaba conectado! ! !
En este caso, el craqueo por fuerza bruta también puede obtener la bandera, pero considerando la dificultad de la pregunta buuctf web, no puede ser tan simple, así que busqué en el wp, combiné con el wp de otras personas y aprendí mucho, regístrelo aquí.
Falsificación de sesión de matraces (también solución inesperada)
La sesión en frasco se almacena en la cookie del cliente, es decir, se almacena localmente. Podemos modificar la sesión para lograr el efecto de falsificar al usuario administrador.
Hay un script correspondiente en github: haz clic en mí para ver
Pero la sesión está encriptada, necesitamos conocer la clave secreta para modificar la sesión
Encuentra la clave secreta
Después de registrar una cuenta e iniciar sesión, hay un código fuente de git en la página de modificación de contraseña
Descárgalo y encuentra la clave secreta en config.py
Sesión falsa
Entonces podemos falsificar la sesión con el script.
Primero, descifra la sesión original
python3 flask_session_cookie_manager3.
py decode -s "ckj123" -c ".eJw9kMGKwjAQhl9lmbOHbZuT4EFIt2whEwpTy-Qirq0mqXGhKtqI775VFk8D__fzDTN3WO-G7mRhfh4u3QzWroX5HT5-YA7YVAk2amRCz7FPlVQCCyU4_QrGo9XSOKS9UN5YDqseJaco-9uUZVqWjklFDtOMedQyv2qqMlPkV-ON51BHLMrA0QZTrJx6OqkNnNbTzjxTTTX1sMenI1YjFsbqphaKeNQNZ-hLr2krmFpn5HIBjxlsT8Nuff7tu-P7BE15ogu0iozTzXdkvxSY5qMie-C4F0aW1pBKkaqIobpxPHi8Ll46Fzb77m2qDytU_-S4CROABGZwOXXD62eQfMLjD-mobCE.Xq5sUg.8y1k1rWI_KY5cx0H4qGeLmOYtLw"
Luego modifique el nombre a admin
python3 flask_session_cookie_manager3.
py encode -s "ckj123" -t "{'_fresh': True, 'name': 'admin', 'image': b'RUM3', 'user_id': '10', '_id': b'5d55c2a3cc960384c8caff3a86b58826abed46649158782ba33bbbc13810947da0f6cbe34bfc8fdeb3afe7fce55a71d0f3d533c424fa9e81629f762c978a7bd0', 'csrf_token': b'9158ca16b9b3b087a218ec88d2ae365436d1c9c7'}"
La sesión original se ve así
Modificamos la sesión de la izquierda a la sesión de arriba
Forjó con éxito al usuario administrador para obtener la bandera
engaño unicode (solución esperada)
De hecho, esta solución es la solución esperada por el autor original, pero el código escrito por el autor en ese momento no era riguroso, lo que dio lugar a muchas soluciones inesperadas.
Al leer el código fuente, podemos encontrar que strlower se usa para cambiar la contraseña de registro, inicio de sesión y modificación a minúsculas. Y esta función es personalizada
def strlower(username):
username = nodeprep.prepare(username)
return username
Hay una laguna en la función nodeprep.prepare
Para el carácter ᴬ, llamar a la función una vez se convertirá en A, y llamar a la función de nuevo se convertirá en un
Así que registramos un usuario llamado ᴬdmin e iniciamos sesión normalmente. La página de inicio mostrará que nuestro nombre de usuario es Admin
Si usamos Admin para cambiar la contraseña, primero llama a la función strlower para convertir Admin en admin, por lo que realmente cambiamos la contraseña de admin.
Luego podemos iniciar sesión con el usuario administrador y la contraseña que acabamos de modificar.
Escribir al final
Aunque el autor de la pregunta fue negligente, hemos aprendido muchas posturas para nosotros, ¡así que continuemos!