• 1
  • 2
2008-06-13, 12:25
  #1
Medlem
nip3os avatar
Jag kan grunderna vad gäller SQL injections, och förstår logiken och varför en sida är sårbar etc. Har dock inte lyckats komma underfund med hur man tar sig förbi enkla skydd mot just SQl injections. Låt oss säga att man kör Replace(indata,"'","''") innan allt sätts in i SQL-queryn (' ersätts med ''). Tror detta är samma sak som Magic Quotes i php, men kan inte php särskilt bra så är inte säker.
mySql stödjer ju visserligen även att man skriver '\ istället för '', problemet är att \' blir \'' om sidan är skyddad på detta sätt, vilket gör det oanvändbart...

Har läst en mängd olika sidor som påstår att detta skydd knappast ens är värt namnet, dock ingen som visar hur man tar sig förbi det. Några förslag?
Citera
2008-06-13, 12:31
  #2
Medlem
Skriv din dödskod hexadecimalt?
Citera
2008-06-13, 13:10
  #3
Medlem
Lånar lite:

Går det att köra nått liknande som SELECT 1 INTO OUTFILE sen hexkod för path
Citera
2008-06-13, 13:51
  #4
Medlem
nip3os avatar
Citat:
Ursprungligen postat av Jockos
Skriv din dödskod hexadecimalt?
Mjah, det borde väl funka. Enda haken är att om man skickar HEXKOD som indata till ett script som ska ta emot en stäng, får man:
SELECT * FROM tabell WHERE någonting='HEXKOD'
HEXKOD tolkas då som en sträng och den kommer leta efter poster där nånting="HEXKOD" istället för att leta efter poster där nånting=hexkodens värde.

Skickar jag 0x41726e65 (hexkod för Arne) letar datasbasen upp posten som heter 0x41726e65 och inte posten som heter Arne.
Citera
2008-06-13, 14:00
  #5
Medlem
xobs avatar
använda concat och char:

Kod:
CONCAT(CHAR(97),CHAR(100),CHAR(109),CHAR(105),CHAR(110)) == admin

eller som någon ovanför nämnde:

Kod:
unhex(hex(str))
Citera
2008-06-13, 14:40
  #6
Medlem
Zellboms avatar
Citat:
Ursprungligen postat av nip3o
Mjah, det borde väl funka. Enda haken är att om man skickar HEXKOD som indata till ett script som ska ta emot en stäng, får man:
SELECT * FROM tabell WHERE någonting='HEXKOD'
HEXKOD tolkas då som en sträng och den kommer leta efter poster där nånting="HEXKOD" istället för att leta efter poster där nånting=hexkodens värde.

Skickar jag 0x41726e65 (hexkod för Arne) letar datasbasen upp posten som heter 0x41726e65 och inte posten som heter Arne.

unhex()
Citera
2008-06-13, 14:56
  #7
Medlem
nip3os avatar
Hm, lyckas fortfarande inte.

Kod:
SELECT * FROM tabell WHERE Test=CONCAT(CHAR(97),CHAR(100),CHAR(109),CHAR(105),CHAR(110))
Kod:
SELECT * FROM tabell WHERE Test=unhex(0x61646d696e)

Ovanstående fungerar jättebra, de hämtar ut posten admin.

De två nedan vill däremot inte funka...
Kod:
SELECT * FROM tabell WHERE Test='CONCAT(CHAR(97),CHAR(100),CHAR(109),CHAR(105),CHAR(110))'
Kod:
SELECT * FROM tabell WHERE Test='unhex(0x61646d696e)'

Vad gör jag för fel?
Citera
2008-06-13, 15:33
  #8
Medlem
Ja vad tror du själv? Den tolkar allt inom ' ' som en sträng, alltså söker den efter text som innehåller 'unhex(0x61646d696e)'. Den kör alltså inte unhex-funktionen på värdet 0x61646d696e, vilket är vad du är ute efter.
Citera
2008-06-13, 15:46
  #9
Medlem
nip3os avatar
Citat:
Ursprungligen postat av Träskmonster
Ja vad tror du själv? Den tolkar allt inom ' ' som en sträng, alltså söker den efter text som innehåller 'unhex(0x61646d696e)'. Den kör alltså inte unhex-funktionen på värdet 0x61646d696e, vilket är vad du är ute efter.
Precis. Det var det jag skrev i inlägg #4. Frågan är bara hur man tar sig förbi det?
Citera
2008-06-13, 16:00
  #10
Medlem
besure2wipes avatar
Det går inte. Pröva ladda filer med load_file istället och kom vidare med det eller ge upp.
Citera
2008-06-13, 16:52
  #11
Medlem
Zellboms avatar
Citat:
Ursprungligen postat av nip3o
Precis. Det var det jag skrev i inlägg #4. Frågan är bara hur man tar sig förbi det?

Går inte :/
Citera
2008-06-13, 17:07
  #12
Tekniker
bengs avatar
Det är det väl klart det går.

Din replace(indata,"'","''") går att enkelt ta sig förbi med att injecta \' .. då queryn blir att se ut som indata = '\'' vad du vill#'

Även mysql_real_escape_string() och PHP's magic quotes går att ta sig förbi vid vissa omständigheter. Mer om detta på t.ex http://cognifty.com/index.php/blog.e..._comeback.html
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in