Slik fungerer SQL Injection -angrepet

Innholdsfortegnelse

Hvis vi lister opp sårbarhetene i webapplikasjoner som har hatt størst innvirkning på grunn av alvorlighetsgraden de kan forårsake, vil vi uten tvil finne SQL -injeksjon. Dette sårbarhet det kan til og med tillate angriperen å gå fra å liste innholdet i databasen til å få full tilgang til serverenLa oss se hva det består av.

Begrepet injeksjon, refererer til å injisere eller legge til SQL -setninger i en forespørsel som programmet utfører til databasen, dette utføres med fordeler av datainndata som programmet ber om direkte eller indirekte fra brukeren, vi refererer direkte til felt, for eksempel skjemaer der brukeren legger inn visse data, kan de indirekte være parametere som sendes via URL (GET). Målet med å injisere SQL -setninger i spørringen er å endre logikken i spørringen eller resultatet som vil bli returnert av databasen.

Dette er et typisk skjema der et brukernavn og passord blir bedt om å få tilgang til et privat område. Koden på serversiden som danner spørringen vil være omtrent som følgende:

 $ brukernavn = $ _POST ['brukernavn']; $ passord = $ _POST ['passord']; $ sql = "SELECT * FRA brukere WHERE brukernavn = '$ brukernavn' OG passord = '$ passord'"; 
Som vi kan se, lagres først brukernavnet og passordet som er angitt i brukernavn- og passordvariablene, og deretter er disse verdiene inkludert i spørringen som vil bli sendt til databasen for å kontrollere om brukeren eksisterer. Anta at brukeren i vårt eksempel angir som brukernavn og passord pass123, når skjemaet sendes, vil spørringen som dannes være følgende:
 VELG * FRA brukere HVOR brukernavn = 'admin' OG passord = 'pass123'
Som vi kan se, når inndataene plasseres, er disse mellom de enkelte anførselstegnene for å representere at det er en tekststreng. Denne spørringen vil bli sendt til databasen og vil returnere et resultat med dataene til brukeren, hvis den eksisterer, og tilgang til det private området vil bli tillatt, ellers vil det returnere et tomt resultat og tilgang vil bli nektet.

Som vi nevnte tidligere, SQL -injeksjon Den består av å legge til SQL -kode til en spørring, og dette skjemaet lar den gå gjennom inndatafeltene, slik at vi har et program som er sårbart for SQL -injeksjon.

Å utnytte sårbarheten
Målet med å utnytte dette sikkerhetsproblemet er å få tilgang til det private området uten å vite riktig brukernavn eller passord, og å utnytte sårbarheten. Så det vi må oppnå er å injisere SQL -kode for å danne en spørring som returnerer et gyldig resultat.

La oss se hvordan spørringen dannes hvis vi injiserer følgende SQL -kode i passordfeltet:

Når spørringen dannes, vil den være som følger:

 VELG * FRA brukere HVOR brukernavn = 'hacker' OG passord = '' eller 1 = 1 # '
Det må tas hensyn til det faktum at den innsatte koden er mellom de enkelte anførselstegnene som omgir passordet, det eneste anførselstegnet i begynnelsen av den innsatte koden er ansvarlig for å fullføre det åpne anførselstegnet i passordet = 'del av på denne måten får vi midlertidig følgende forespørsel:
 VELG * FRA brukere HVOR brukernavn = 'hacker' OG passord = ''
Denne spørringen vil for øyeblikket ikke gi resultater siden det ikke er noen slik bruker med disse legitimasjonene, men la oss analysere resten av den innsatte koden:
 eller 1 = 1 #
Setning eller 1 = 1 endrer radikalt logikk i spørringen, siden som vi vet i en spørring dannet av betinget ELLER Det vil gå tilbake når minst ett av de to uttrykkene er oppfylt, i vårt tilfelle er det første uttrykket brukernavn = 'hacker' OG passord = '' , og den andre eller 1 = 1 , sistnevnte er alltid sant, det vil si at 1 alltid er lik 1, fordi spørringen vil returnere et gyldig resultat.

Til slutt må vi kvitte oss med anførselstegnet som lukker setningen, for dette kan vi bruke kommentarene som brukes i SQL: #, - (dobbel strek), Vel /* */ . dermed er den komplette spørringen:

 VELG * FRA brukere HVOR brukernavn = 'hacker' OG passord = '' eller 1 = 1 # '
Alt etter # vil bli tatt i betraktning som en kommentar og vil ikke være en del av spørringen.

For å få et gyldig resultat er det mange andre variasjoner i koden som vi kan sette inn, for eksempel:

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave