Vinnaren i pepparkakshustävlingen!
2011-05-19, 17:49
  #1
Medlem
Håller själv på med webbutveckling men kan inte så mycket om just säkerhet varav jag nu håller på att försöka bli mer insatt i området.

Så just när det kommer till SQL injection så förstår jag inte riktigt hur det fungerar och skulle uppskatta hjälp över hur dem fungerar. Kan hänga med till en visst mått men vissa saker känner man inte igen.

Som exempel kan ni förklara huvudsyftet med följande injections?:

Förstår att man bryter efter id=-8863' men varför just ett minus tecken framför "8863" och vad innebär alla + tecken samt varför väljer man select på siffror?
Kod:
.php?id=-8863'+union+select+1,2,3,4,5,6,7,8,9,10,11,12--+ 

Denna skulle jag uppskatta vad mer icke nybörjande saker innebär som "%28table_name%29", förstår ungefär vad den gör men alla %-tecken och varför just 28, 29?:
Kod:
.php?NR=-648%20union%20select%201,2,group_concat%28table_name%29,4,5,6,7,8,9,10,11,12,13,14,  15,16,17,18,19,20,%2021,22,23,24,25%20from%20information_schema.tables%20where%20table_schema=databa  se%28%29-- 
Citera
2011-05-19, 19:32
  #2
Medlem
ant's avatar
Man använder minus för att då hämtas ingen data ur databasen då ID:t -8863 inte existerar och detta hjälper en att se data som man vill åt. Plustecken används istället för mellanslag ifall sidan inte accepterar mellanslag i GET-requesten.

28 och 29 är hex för ( och ), procenttecknet är där eftersom det är URL encodat.
%28table_name%29 är alltså (table_name).
Citera
2011-05-19, 19:55
  #3
Medlem
Citat:
Ursprungligen postat av ant'
Man använder minus för att då hämtas ingen data ur databasen då ID:t -8863 inte existerar och detta hjälper en att se data som man vill åt. Plustecken används istället för mellanslag ifall sidan inte accepterar mellanslag i GET-requesten.

28 och 29 är hex för ( och ), procenttecknet är där eftersom det är URL encodat.
%28table_name%29 är alltså (table_name).

Tack för ditt svar, men sista frågan är angående siffrorna. Vad är dem till och vad spelar den för roll? Man ser ibland vissa som har längre kombinationer medans andra har mindre, förmodar att det kan vara en radie av ID för varje rad?

Kod:
+union+select+1,2,3,4,5,6,7,8,9,10,11,12--+ 
Citera
2011-05-19, 20:23
  #4
Medlem
boppaloozs avatar
Citat:
Ursprungligen postat av jahmannow
Tack för ditt svar, men sista frågan är angående siffrorna. Vad är dem till och vad spelar den för roll? Man ser ibland vissa som har längre kombinationer medans andra har mindre, förmodar att det kan vara en radie av ID för varje rad?

Kod:
+union+select+1,2,3,4,5,6,7,8,9,10,11,12--+ 
Jag tror inte att du behöver fundera så hemskt mycket på det, koden verkar vara utryckt ur sitt sammanhang, och SQL-koden kan eventuellt vara anpassad för att attackera en speciell hemsida.

Hela syftet med SQL injection är att man kan få med egen sql-kod som körs på servern genom att stoppa in den i ett fält som programmeraren tänkt att lägga in i sin databas utan att först ha kontrollerat att det inte finns något felaktigt i indatat.

Det är lättast att förklara med ett exempel:

Tänk om man t.ex har ett inmatningsfält på sidan där det är tänkt att användaren ska ange sitt namn,
det hamnar så småningom i variabeln $namn i serverprogrammet. Om man inte tänker sig för så blir kanske SQL-koden för att lägga in namnet i tabellen anv_tabell i kolumnen anvnamn

insert into anv_tabell (anv_namn) values ('$namn')

Om användaren skrivit in Kalle så blir det

insert into anv_tabell (anv_namn) values ('Kalle')

Om nu en illasinnad person matar in strängen

');select * from anv_tabell;delete from anv_namn --

Så blir resultatet att när SQL-queryn körs så körs effektivt tre SQL-kommandon:

insert into anv_tabell (anv_namn) values('');
select * from anv_tabell;
delete from anv_namn --')

Om vi analyserar detta så blir resultatet att först lägger vi in ett tomt namn i tabellen, sen visar vi alla namn som är inlagda, och sist tar vi bort allting ur tabellen eftersom det inte finns något where-villkor efter delete... . Den avslutande fnutten och parentesen som skulle lett till ett syntaxfel har vi trollat bort med kommentarstecknet "--". Det är ju inte så bra, alla användare har försvunnit, dessutom har vi snott en lista på alla användare som registrerat sig... Man kan spåna vidare här och fiska fram kontonummer, lösenord, epostadresser och så vidare.

Det här var bara ett exempel av många på SQL injection. Som synes kan det orsaka ganska stor skada, men det kräver också att den elake programmeraren har en del kunskap om hur SQL-koden verkligen ser ut på serversidan. Men han kan ju testa sig fram, han har ofta hela natten på sig.

För att avvärja en sån här attack kan man t.ex kontrollera att $namn bara innehåller bokstäver innan man kör sin sql-kod.
Citera
2011-05-19, 21:09
  #5
Medlem
Citat:
Ursprungligen postat av boppalooz
...

1+

Tack för att du tog dig tid att klargöra det hela. Escapar alltid datan för mina egna hemsidor och skräddarsyr alltid valideringen. Som exempel över det förväntande variabel formatet (int eller var), strukturen på värdet (begränsa tecken baserat på det som förväntas eg bara bokstäver eller siffror, min/max längd ) sen så klart så stänger jag av felmeddelanden osv.

Baserat på mina säkerhetsåtgärder, finns det något annat sätt att komma förbi det som jag har totalt missat att kontrollerat via injection eller är det för krävande arbete?
__________________
Senast redigerad av jahmannow 2011-05-19 kl. 21:12.
Citera
2011-05-20, 03:46
  #6
Medlem
qrizzes avatar
Tråd -> databaser

//mod
Citera
2011-05-20, 21:55
  #7
Medlem
+union+select+1,2,3,4,5,6,7,8,9,10,11,12--

Siffror för att det är enkelt. Union kombinerar två select sattser som du kanske redan vet.
Båda sattserna måste innehålla lika många kolumner, annars får du ett felmeddelande.

Så länge du kör mysql_real_escape_string(); så är du skyddat mot SQLi.
Citera
2011-06-05, 16:07
  #8
Medlem
tmxsevens avatar
Har en fråga..

Jag behöver hjälp med att förstå MS Access SQLi..Har surfat runt och försökt förså hur man dumpar data från en sida som använder just MS Access databas..Har dock bara lyckats fått fram server namn, version och databas namnen på servern..Har inte fått fram tabeller eller kolumner. Hur gör jag?

Här visas hur man gör men det funkade inte när jag försökte:

http://lab.mediaservice.net/notes_more.php?id=MSSQL


Förstod inte riktigt vad '$' och 'U' innebär...eller 'V' ...samt '$XX$'

Tacksam för svar,

//tmxseven
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback