SQL avkortningssårbarhet eksisterer vanligvis i MySQL -databaser. Denne sårbarheten ble først beskrevet i CVE-2008-4106, som var relatert til WordPress CMS.
Hvordan SQL -avkortningsangrep fungerer
Dette angrepet fungerer på grunn av avkortning av brukerinngang i databaser ved bruk av "valg" og "innsetting" -funksjoner.
Anta at en utvikler oppretter “brukere” -tabellen via følgende spørsmål:
Lag tabellbrukere (Bruke dette skjemaet, hvis utvikleren oppretter en admin -konto med følgende:
user_name = 'admin'Det er klart at disse legitimasjonene ikke er offentlige. Det er bare en administratorkonto i databasen, og hvis en angriper prøver å registrere en annen konto hos 'admin' brukernavn, vil angriperen mislykkes på grunn av redundansskontrollene til databasen. Angriperen kan fremdeles omgå den redundanssjekken for å legge til en annen administratorkonto ved å utnytte SQL avkortningssårbarheten. Anta at angriperen registrerer en annen konto med følgende innspill:
User_name = 'adminxxxxxxxxxxxxxxxxxrandom'Databasen vil ta 'brukernavn' (26 tegn) og sjekke om dette allerede eksisterer. Deretter vil brukernavninngangen bli avkortet, og 'admin' ('admin' med plass) vil bli lagt inn i databasen, noe som resulterer i to dupliserte administratorbrukere.
Angriperen kan da opprette en 'admin' bruker med sitt eget passord. Nå har databasen to admin 'User_Name' oppføringer, men med forskjellige passord. Angriperen kan logge inn med de nyopprettede legitimasjonene for å få et administratorpanel fordi både User_Names “Admin” og “Admin” er like for databasenivået. Nå vil vi se på et praktisk angrep.
Prøveangrep
I dette eksemplet vil vi ta et scenario fra nettstedet Overhewire.org. OverThewire -samfunnet gir Wargame CTF -er som vi kan øve på sikkerhetskonseptene våre. Scenariet med SQL-avkortning skjer i Natas spillnivå 26-> 27. Vi får tilgang til nivået ved å bruke følgende:
URL: http: // natas27.Natas.laboratorier.Overwire.orgDette nivået er tilgjengelig på: https: // Overhewire.org/wargames/natas/natas27.html. Du vil bli vist en påloggingsside som er sårbar for et SQL -avkortningsangrep.
Når du inspiserer kildekoden, vil du se at lengden på brukernavnet er 64, som vist nedenfor.
En bruker som heter 'Natas28' eksisterer allerede. Målet vårt er å opprette en annen bruker som heter 'Natas28' ved hjelp av SQL_TRUCATION Attack. Så vi vil legge inn NATAS28, etterfulgt av 57 mellomrom og et tilfeldig alfabet (i vårt tilfelle, a), brukernavn og ethvert passord. Brevet 'A' er ikke synlig på skjermbildet på grunn av brukernavnet på 65 tegn. Etter opprettelsen av brukerkontoen, vil du kunne se 'en.'
Hvis databasen inneholder SQL_TRUCASION -sårbarhet, bør databasen nå ha to 'Natas28' brukernavn. Ett brukernavn vil inneholde passordet vårt. La oss prøve å legge inn legitimasjon på påloggingssiden.
Nå er vi logget inn som 'Natas28' bruker.
Skadebegrensning
For å dempe dette angrepet, må vi vurdere flere faktorer.
La oss for eksempel se etter den strenge modusen ved hjelp av følgende spørsmål:
mysql> velg @@ sql_modeVi oppretter en database og tabellen 'brukere.'
MySQL> Opprett databasetestDeretter oppretter vi en administratorbruker med legitimasjon ved hjelp av Sett inn spørringen.
mysql> sett inn i brukerverdier ('admin', 'passord1');Vi kan se "brukere" tabellinformasjon ved å bruke alternativet "Select * fra brukere".
Brukerens lengde er 10 tegn. Nå vil vi prøve SQL -avkortningsangrepet.
Når vi prøver å legge inn følgende:
Brukernavn = 'adminxxxxxa'Vi vil få en feil, noe som betyr at streng modus er helt effektiv.
mysql> sett inn i brukere verdier ('admin a', 'pass2')Uten streng modus aktivert, vil databasen sende ut advarsler, men vil fremdeles sette inn dataene i tabellen.
Konklusjon
Angripere kan få tilgang til høye privilegier-kontoer hvis SQL_TRUNCTION-sårbarheten eksisterer i søknaden din. Angriperen kan enkelt få informasjon om et brukernavn og databaselengden ved hjelp av de kritiske feltene, og deretter lage samme brukernavn, etterfulgt av mellomrom og tilfeldig alfabet etter minimumslengde, noe. Denne sårbarheten er kritisk, men den kan unngås hvis du tar noen sikkerhetsforholdsregler, for eksempel å aktivere streng modus for brukerinnganger og gjøre det sensitive feltet til den primære nøkkelen i databasen.