31. mai 2008

SQL injection

Dette er et humoristisk blogginnlegg, men jeg må nesten driste meg til å påpeke at denne er morsom for alle som ikke har litt nerdete humor!

Teori: Du har kanskje hørt om hacking med SQL-injection. Det går ut på at en i tekstfelter på websider ikke skriver for eksempel navnet sitt, men heller skriver inn SQL-kode. Målet er å få gjort ugagn, ødelegge informasjon i den underliggende databasen, logge seg inn på et passordbeskyttet nettsted uten å vite passordet, få ut sensitiv informasjon og så videre.

Nyhet: Politiet i USA har nå visstnok startet med noe som for dem er praktisk: De bruker laserscanning av bilskilt for å matche opp mot en database. Når biler kjører forbi, matches bilskiltene lynraskt opp mot en database. Slik kan de finne ut om det er en stjålet bil, uregistrering e.l. [1]

Humoristisk innslag i denne sammenheng:

Bildet er hentet fra http://www.areino.com/hackeando/

Hint til hvor humoren ligger: Se nøye på bildet av Minien, og få med deg detaljene og les om nødvendig teorien over på nytt...

Utdypende forklaring: Oppgis på forespørsel, for eksempel blant kommentarene.

[1]: http://www.schneier.com/essay-057.html

3 kommentarer:

  1. Ha, ha! Jeg forstår humoren, men jeg skjønner ikke poenget, fordi det er for lenge siden jeg drev med sql-kode. Kanskje or 1=1 osv får systemet hos purken til å gå inn i en evig loop? - Kult..

    SvarSlett
  2. Her følger en "kort" forklaring:

    Ofte gjøres passordsjekk ved å spørre en database om brukernavn og passord fins, og det gjøres slik:

    SELECT *
    FROM brukertabell
    WHERE brukernavn = [felt 1 fra web]
    AND passord = [felt 2 fra web]


    Spørringen over gir et resultat. Dette må evalueres med kode for å finne ut om brukernavn og passord skrevet inn på websiden, er korrekt. Dette gjøres konseptuelt sett slik i de aller fleste passordbaserte webløsninger:

    if (antall rader i resultatsettet == 1)
    gratulerer, du har logget inn
    else
    du har ikke logget inn


    Som man nå skjønner, vil en injisering av SQL-kode i felt 1 som klarer å nøytralisere AND... biten i ledd 2 av spørringen som kjøres, medføre at spørringen blir TRUE og dermed vil if-testen også bli TRUE. Med dette klarer en hacker å logge seg inn i slike løsninger uten å kjenne brukernavn og passord!!! En måte å gjøre dette på er å prøve å lage siste bit av SQL-spørringen om til en kommentar, slik at den i sum ser slik ut:

    SELECT *
    FROM brukertabell
    WHERE brukernavn = 'ola' --
    AND passord = [felt 2 fra web]


    Det som her skjer, er at brukernavnet "ola" fins i databasen, mens siste del med passordsjekken er kommentert ut, fordi -- er en kommentar i SQL-språket. Dette oppnådde "hackeren" ved å skrive inn ola' -- i stedet for bare ola i feltet for brukernavn. Dette er et ofte brukt eksempel på SQL-injection, og det fungerer på mange nettsteder.

    Det er dette kjente hacker-trikset som bilskilt-humoren spiller på. 'OR 1=1;-- er en annen måte å kommentere ut passordbiten på.

    Siden bilskiltene scannes i USA, så tenker altså den kreative Mini-eieren at her kan han lage sitt eget bilskilt som har SQL-kode, og dermed kanskje oppnå SQL-injection i stedet for å la politiet finne ut at bilen for eksempel er stjålet eller ikke registrert!

    En må selvsagt vite nøyaktig databasestruktur for å klare å formulere et bilskilt med SQL-kode som vil lure scannere til å ikke tro at bilen mangler for eksempel årsavgift, men det er prinsippet som er humoristisk her. Meget bra humor etter min mening!

    Det må også nevnes at det faktisk til en viss grad er lov å lage egne bilskilt i USA. I Norge får vi skilt uten medbestemmelsesrett, men i USA kan de bestemme noen av tegn selv. Tror nok likevel at bildet er manipulert i Photoshop.

    SvarSlett
  3. Artig! Som einar forstår jeg humoren, men har faktisk ikke hørt om teorien bak, så bra med en forklaring.

    I samme gate finner vi jo denne xkcd-stripa: http://xkcd.com/327/
    Den er jo en smule mer forståelig tror jeg

    SvarSlett