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.
Hvorfor Må Webapplikasjoner Utføre Systemkommandoer?
Webapplikasjoner må noen Ganger utføre operativsystemkommandoer (os-kommandoer) for å kommunisere med det underliggende vertsoperativsystemet og filsystemet. Dette kan gjøres for å kjøre systemkommandoer, starte programmer skrevet i et annet programmeringsspråk, eller kjøre shell, python, perl eller PHP-skript. For alle operativsystemer, Inkludert Windows, Unix og Linux, er funksjoner tilgjengelige som kan utføre en kommando som sendes til de andre skriptene som en shell-kommando. Selv om det er ekstremt nyttig, kan denne funksjonaliteten være farlig når den brukes feil, og kan føre til sikkerhetsproblemer for webprogrammer, som forklart i denne artikkelen.
Hvorfor du Bør Være Forsiktig Når Du Bruker Systemkommandoer i Webapplikasjoner
ved å utnytte en kommandoinjeksjonssårbarhet i et sårbart program, kan angripere legge til flere kommandoer eller injisere sine egne operativsystemkommandoer. Dette betyr at under et kommandoinjeksjonsangrep kan en angriper enkelt ta full kontroll over vertsoperativsystemet til webserveren. Derfor bør utviklere være svært forsiktig med hvordan du sender brukerinngang til en av disse funksjonene når du utvikler webapplikasjoner.
Eksempel På En Kommandoinjeksjonssårbarhet
i dette eksemplet på kommandoinjeksjonssårbarheten bruker vi ping-funksjonaliteten, som er notorisk usikker på mange rutere. Tenk deg et sårbart program som har en felles funksjon som sender EN IP-adresse fra en brukerinngang til systemets ping-kommando. Derfor, hvis brukerinngangen er 127.0.0.1, utføres følgende kommando på vertsoperativsystemet:
ping -c 5 127.0.0.1
siden vi har å gjøre med en sårbar webapplikasjon, er det mulig å bryte ut av ping-kommandoen eller provosere en feil som returnerer nyttig informasjon til angriperen. Angriperen kan da bruke denne funksjonaliteten til å utføre sine egne vilkårlige kommandoer. Et eksempel på å legge til flere systemkommandoer kan se slik ut:
ping -c 5 127.0.0.1; id
i eksemplet ovenfor blir først ping-kommandoen utført og umiddelbart etter at id-kommandoen utføres. Derfor vil kommandoutgangen på siden se slik ut:
under ET OS-kommandoinjeksjonsangrep kan angriperen også sette opp et feilbasert angrep. For eksempel vil en kodeinjeksjon i dette tilfellet typisk se ut som nedenfor:
ping -c 5 "$(id)"
kodeinjeksjonen ovenfor returnerer et svar som dette:
ping: unknown host uid=0(root) gid=0(root) groups=0(root)
Slik Forhindrer Du Sårbarheter I Systemkommandoinjeksjon
for å forhindre at en angriper utnytter et sårbart webprogram og setter inn spesialtegn i operativsystemkommandoen, bør du prøve Å generelt unngå systemanrop der det er mulig. I alle tilfeller, unngå brukerinngang av noe slag med mindre det er absolutt nødvendig. Og hvis det er nødvendig, må du sørge for at det er riktig inndatavalidering på plass – inndatavalidering er alltid et must for å sikre at webapplikasjonskoden din ikke er sårbar for andre sårbarheter med stor innvirkning, inkludert XSS og SQL-Injeksjon.deaktiver også denne funksjonaliteten i språkets konfigurasjonsfil hvis du ikke trenger det, slik at angriperne aldri klarer å få tilgang til systemskallet på vertsoperativsystemet gjennom sårbare webapplikasjoner. På enkelte språk kan du skille utførelsen av prosessen fra inngangsparametrene. Du kan også bygge en hvit liste over mulige innganger og sjekke formatene, for eksempel godta bare heltall for en numerisk id.