Komentorivin käyttö selaimesta shell.php:n avulla
On 5 tammikuun, 2022 by adminJoskus haluat selaimesta komentorivin käytön. Se onnistuu PHP:n avulla, jos tietoturva-asetukset sallivat sen. Toteutin tämän toiminnallisuuden shell.php:ssä (saatavilla Githubissa). Yllä olevassa kuvakaappauksessa näet, miten shell-käyttöoikeus selaimesta toimii. Skriptin avulla voit ladata, ladata, tarkastella, muokata ja poistaa tiedostoa, zipata ja purkaa hakemiston ja käydä läpi palvelimen hakemistoja hiirellä, mutta voit myös kirjoittaa mukautettuja komentoja näppäimistöllä.
Turvallisuusvaroitus ja vastuuvapauslauseke
Käynnistä tämä skripti vain omistamillasi koneilla (tai valtuutetun pentestin aikana). Varmista myös, että kone on kunnolla palomuurattu (portti 80 ei saa olla tavoitettavissa Internetistä). Älä käytä sitä haitallisiin tarkoituksiin! Lue lisää shell-skriptien väärinkäytöstä täältä.
Tunnettuja ongelmia
Jos skripti ei toimi, se voi johtua siitä, että PHP:n ”passthru”-toiminto, johon se perustuu, on poistettu käytöstä. Voit listata käytöstä poistetut PHP-toiminnot suorittamalla seuraavan PHP-koodin:
var_dump(ini_get('safe_mode'));var_dump(explode(',',ini_get('disable_functions')));var_dump(explode(',',ini_get('suhosin.executor.func.blacklist')));
Out-of-the-box Ubuntu 14.04, joka antaa tulosteen:
bool(false)Array( => pcntl_alarm => pcntl_fork => pcntl_waitpid => pcntl_wait => pcntl_wifexited => pcntl_wifstopped => pcntl_wifsignaled => pcntl_wexitstatus => pcntl_wtermsig => pcntl_wstopsig => pcntl_signal => pcntl_signal_dispatch => pcntl_get_last_error => pcntl_strerror => pcntl_sigprocmask => pcntl_sigwaitinfo => pcntl_sigtimedwait => pcntl_exec => pcntl_getpriority => pcntl_setpriority =>)Array( =>)
PHP shellin suorituskomennot
Jos skripti ei toimi passthru()
:n avulla, se kokeilee muutamia muita komentoja. Seuraavat komennot ovat samanlaisia:
-
exec()
Palauttaa komentojen viimeisen rivin tulosteen -
passthru()
Välittää komentojen tulosteen suoraan selaimelle -
system()
Välittää komentojen tulosteen suoraan selaimelle ja palauttaa viimeisen rivin -
shell_exec()
Palauttaa komentojen tulosteen -
popen()
Avaa luku- tai kirjoitusputken komennon prosessiin -
proc_open()
Samanlainen kuin popen(), mutta suurempi kontrolliaste -
pcntl_exec()
Suorittaa ohjelman
Palvelimen karkaisu open_basedirillä
Jos ylläoleva skripti tuntuu pelottavalta, niin haluat ehkä estää sen suorittamisen palvelimellasi. Voit tehdä tämän ottamalla käyttöön vikasietotilan (deprecated), käyttämällä ”disable_functions” php.ini-muuttujaa ja/tai Suhosinin funktioiden suorittamisen mustaa listaa.
Löysin hyvin kirjoitetun postauksen PHP-asennuksen suojaamisesta, tutustu siihen! Suoritettavien funktioiden rajoittamisen lisäksi he suosittelevat myös ”open_basedir” php.ini config-muuttujaa. Se rajoittaa PHP:n käyttämät tiedostot määritettyyn hakemistopuuhun. Mielestäni tämä on tehokas työkalu.
Voi myös olla hyvä idea suojata ”/tmp”-hakemisto ”nodev”-, ”nosuid”- ja ”noexec”-lippulauseilla, kuten tässä on kuvattu.
Ei löydy Suhosinia?
Huomaa, että ”php5-suhosin”-pakettia (PHP:n tietoturvalaajennusta) ei enää asenneta eikä ole saatavissa Debian-pohjaisissa järjestelmissä. Osa tietoturvaparannuksista on sisällytetty uusimpiin PHP-versioihin (5.4 ja 5.5). Jos haluat asentaa Suhosinin (Githubista) Ubuntu 14.04:ään (PHP 5.5.9), voit seurata tätä ohjetta.
Lue lisää Suhosinin poistamiseen liittyvästä kiistasta LWN.netistä.
Oikeuksien erottelu
Jos järjestelmässä on useita käyttäjiä, ”oikeuksien erottelu” on MUST. Tämä tarkoittaa PHP-koodin ajamista käyttäjäkontekstissa (esim. käyttäjänä ”maurits”) eikä käyttäjänä ”www-data”. Olen löytänyt loistavan artikkelin, jossa selitetään, miten tämä voidaan toteuttaa. Helpoin ratkaisu on suorittaa:
sudo apt-get install libapache2-mpm-itk
Ja sitten lisätä ”AssignUserID”-direktiivi jokaiseen ”VirtualHost”-asetukseen. Huomaa, että tämä ei ehkä ole turvallisin ratkaisu, mutta se toimii hyvin ja on helppo asentaa.
Johtopäätös
Sinun tulisi aina päivittää ja paikata PHP:n uusimpaan versioon tunnettujen tietoturva-aukkojen hyväksikäytön estämiseksi. Työkalut kuten ”disable_functions”, ”open_basedir”, Suhosin ja tiedostojärjestelmän liput vähentävät hyökkäyspintaa ja estävät tuntemattomien tietoturva-aukkojen hyödyntämisen. Niiden avulla voit luoda monikerroksisen tietoturvastrategian. Älä myöskään unohda etuoikeuksien erottelua.
Vastaa