33.9 C
Colombia
lunes, julio 7, 2025

seguridad: cambie la contraseña del usuario proporcionando una nueva contraseña como hash en un script


Las respuestas anteriores no pudieron ayudarme cuando olvidé mi contraseña, así que escribí un script que reemplaza la contraseña de una cuenta (olvidada) con la contraseña (conocida) de otra cuenta. El guión se reescribe ShadowHashData en el archivo plist de la cuenta.

Tenga en cuenta que necesitará tener SIP deshabilitado para que el guión funcione. De lo contrario no tendrás acceso a las listas de cuentas. Para verificar si SIP está deshabilitado, ejecute este comando:

csrutil standing

devuelve:

System Integrity Safety standing: disabled.

Para deshabilitar y habilitar SIP, consulte Este artículo en Apple..

Aquí está el script de Python 3, probado en macOS 11.5 Huge Sur (también disponible aquí: https://gist.github.com/mahenzon/70d52a41a880afe19dda2b81828f01c8):

"""
Examined on macOS 11.5 Huge Sur
SIP disabled
admin@MBP-Suren ~ % csrutil standing
System Integrity Safety standing: disabled.
run:
sudo python3 /Customers/admin/Paperwork/replace-shadow-hash.py /var/db/dslocal/nodes/Default/customers/admin.plist /var/db/dslocal/nodes/Default/customers/suren.plist
The place 'admin' is consumer with recognized password and 'suren' is goal consumer. After working this script 'suren' consumer's password will probably be changed with 'admin' consumer's password.
"""

import plistlib
import sys

field_name = "ShadowHashData"


def load_plist(file_path):
    with open(file_path, 'rb') as fp:
        return plistlib.load(fp)


def save_plist(file_path, information):
    with open(file_path, 'wb') as fp:
        plistlib.dump(information, fp)


def important(source_plist_path, target_plist_path):
    # Load the supply plist to get the worth of field_name
    source_plist = load_plist(source_plist_path)
    field_value = source_plist.get(field_name)

    if field_value is None:
        print(f"Discipline {field_name!r} not discovered within the supply plist.")
        return

    # Load the goal plist to exchange the worth of field_name
    target_plist = load_plist(target_plist_path)
    target_plist[field_name] = field_value

    # Save the modified goal plist
    save_plist(target_plist_path, target_plist)
    print(f"Changed {field_name!r} worth in goal plist with: {field_value}")


if __name__ == "__main__":
    if len(sys.argv) != 3:
        print("Utilization: sudo python3 /path/to/replace-shadow-hash.py /var/db/dslocal/nodes/Default/customers/admin.plist /var/db/dslocal/nodes/Default/customers/suren.plist")
        sys.exit(1)

    source_plist_path = sys.argv[1]
    target_plist_path = sys.argv[2]
    important(source_plist_path, target_plist_path)

Para utilizar el guión:

  1. Guárdelo en una ubicación de su elección con el siguiente nombre: replace-shadow-hash.py.

  2. Ejecútelo de la siguiente manera:

    sudo python3 path/to/replace-shadow-hash.py /var/db/dslocal/nodes/Default/customers/<supply consumer title>.plist /var/db/dslocal/nodes/Default/customers/<goal consumer title>.plist
    

    dónde <supply consumer title> es el nombre de usuario de la cuenta con un contraseña conocida y <goal consumer title> es el nombre de usuario de la cuenta cuya contraseña olvidó.

    Para conocer el nombre de usuario de una cuenta, simplemente abra /Customers y busque un nombre related al nombre de la cuenta. Por ejemplo, si el nombre de su cuenta es John Appleseedel nombre de usuario probablemente será johnappleseed.

Después de ejecutar este script, la contraseña de la cuenta identificada por <goal consumer title> ser reemplazado con la contraseña de <supply consumer title>.

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Latest Articles