Adatbázisvédelem (2) - cikk, 7. oldal

Bizonyos esetekben az SCP injektálás még olyan paraméterben is lehetséges, amelyet az apache modul mod_rewrite módszereivel konvertálnak a szkript GET paraméteréhez.

Például /news/127.html típusú szkriptek alakítjuk /news/news.php?id=127 következő szabály: RewriteRule ^ / news / \ html $ "/news/news.php?id=$1" (*)..

Ez lehetővé teszi a rosszindulatú paraméterek átadását a szkripthez. Például: /news/128-1.html

röviden a védelemről.

A fentiek ellenére elegendő néhány egyszerű szabályt követni.

1) az egész és a frakcionális értékekhez, mielőtt felhasználná őket a lekérdezésben, elegendő az értéket a kívánt típushoz hozni.

Ehelyett teszt nyomkövető rendszert helyezhet el az SQL injektáláshoz.

írja a naplóba a kísérletet

2) az olyan sztringparaméterekhez, amelyek nem használódnak hasonló módon, regexp stb.

3) azokon a sorokon, amelyeket a belső, belsőleg használandó, regexp és így tovább kell használni, akkor szükség esetén meg kell jeleníteni az adott operátorokban használt speciális karaktereket. Ellenkező esetben dokumentálhatja ezeket a szimbólumokat.

Ez a dokumentum nem terjed ki az alap SQL-szintaxisra vagy SQL-befecskendezésre. Feltételezzük, hogy az olvasó már jól ismerte a témát. Ez a dokumentum olyan speciális technikákra fog összpontosítani, amelyek a Microsoft SQL Server használatával a webes alkalmazások támadásaiban használhatók. Ezek a technikák bemutatják, hogyan használhatják a támadók SQL injekciókat a tartalom törléséhez az adatbázisból, elkerülve a tűzfalat, és áthaladva a belső hálózaton. Ez a dokumentum arra szolgál, hogy az információbiztonsági szakemberek számára az SQL injekciók potenciálisan veszélyes hatásait jelenítse meg a szervezetben.

A webes alkalmazások biztonságosabbá válnak, mivel a támadások bejelentéseinek száma, például az SQL injektálás, növekszik. Nagy és összetett alkalmazások esetén azonban az egyik felügyelet a teljes rendszer veszélyeztetése lehet. Számos webes alkalmazás fejlesztő és rendszergazda hamis biztonságérzetet élvezhet, mivel tárolt eljárásokat használnak vagy elrejtik a böngészőablakba visszatért hibaüzeneteket. Ez okot ad arra, hogy a sérülékenységet nem lehet használni.

Bár a dokumentumban a Microsoft SQL Serverről beszélünk, ez nem jelenti azt, hogy ez a termék kevésbé biztonságos, mint más platformok, például az Oracle vagy az IBM DB2. Az SQL injektálás nem specifikus biztonsági rés A Microsoft SQL Server általában egy adatbázis-probléma. A Microsoft SQL Server legnagyobb problémája a rugalmasság. Ez a rugalmasság új lehetőségeket nyit meg az SQL Injection osztály támadásaira. A dokumentum célja annak bemutatása, hogy amikor egy rendszergazda vagy fejlesztõ tetszõleges SQL lekérdezést tesz lehetõvé, a megtámadott rendszer nyitva van a teljes rögzítéshez. Ez nem jelenti azt, hogy a Microsoft SQL Server termék általánosságban sérülékeny.

SQL injekciós detektálás

Amikor SQL alkalmazásokat próbál használni az alkalmazásokban, akkor a támadónak szüksége van egy módszerre annak meghatározásához, hogy tetszőleges SQL lekérdezést ténylegesen beillesztett-e. Szükség van egy módszerre az eredmények megszerzéséhez. Ehhez két beépített SQL szerver funkció használható. OPENROWSET és OPENDATASOURCE funkciók egy távoli adatforrás megnyitásához. Ezeket a funkciókat az OLEDB szolgáltatóon keresztül megnyithatja. Az OPENROWSET függvény minden példában használható, de az OPENDATASOURCE funkció ugyanazokkal az eredményekkel használható.

Ez a kifejezés az 1. táblázat összes sorát visszaadja a távoli adatforrásból:

'válassza ki * a table1'-ből)

lehetőségek:
(1) Szolgáltató neve OLEDB
(2) Csatlakozási karakterlánc (lehet az OLEDB vagy az ODBC által előírt formátum)
(3) Az SQL kifejezés

'válassza ki * a táblából')

'válassza ki * a táblából')

Az SQL injektálás során a támadó meghatározhatja, hogy az SQL lekérdezés végrehajtásra került-e. Ha az SQL lekérdezés sikeres, a megtámadott kiszolgáló megpróbálja létrehozni a kimenő kapcsolatot a támadó számítógépével a megadott porthoz. Ezt a kimenő SQL kapcsolatot a legtöbb esetben nem blokkolja a tűzfal, mivel a 80-as portot használják.

Ez a technika lehetővé teszi a támadó számára, hogy megtudja-e, hogy az SQL lekérdezés végrehajtásra került-e még akkor is, ha a hibaüzenetek és lekérdezések eredményei nem jelennek meg a böngészőablakban.

Az SQL injektálás eredményei

A szükséges adatokat leggyakrabban a OPENROWSET és OPENDATASOURCE funkciók használják. Felhasználhatók arra is, hogy adatokat helyezzenek el egy távoli SQL szerverre. A OPENROWSET funkció nemcsak a SELECT lekérdezés végrehajtására használható, hanem az INSERT és a DELETE külső adatforrásokban való végrehajtására is. A távoli forrásból származó adatfeldolgozás nem általános, és csak akkor működik, ha az OLEDB szolgáltató támogatja ezt a funkciót. Az SQLOLEDB szolgáltatónak ilyen funkciói vannak.

Az alábbiakban bemutatjuk, hogyan adhatunk adatokat külső adatforráshoz:

'válassza ki * a table1'-ből)

válassza ki a * táblázatot2

Ebben a példában a helyi SQL-kiszolgáló 2. táblázatának összes sorát hozzáadjuk a távoli kiszolgáló tábla1 táblájához. A lekérdezés sikeres végrehajtásához szükséges, hogy mindkét asztalnak hasonló szerkezete legyen.

Amint azt az előző bekezdésben megtudtuk, a távoli adatforrások átirányíthatók bármely támadó választott kiszolgálójára.

A támadó módosíthatja a fenti lekérdezést egy távoli adatforráshoz való csatlakozáshoz, például a támadó gépén futó Microsoft SQL Server másolatához.

'válassza ki * a table1'

válassza ki a * táblázatot2

Az adatok sikeres beillesztéséhez a támadónak ugyanolyan oszlopokkal és adattípusokkal kell létrehoznia egy táblát1, mint a 2. táblázatban. Ez az információ ugyanazt a trükköt használhatja a rendszer táblázatokhoz. Ez azért fog működni, mert a rendszertáblák szerkezete előre ismert. A támadónak olyan táblák létrehozásával kell elindulnia, amelyek azonosak a rendszertáblák sysdatabases, sysobjects és sys columns rendszerével. Ezután a szükséges információk kivonásához a következő SQL lekérdezéseket kell végrehajtani:

'select * from _sysdatabases')

válassza a * master.dbo.sysdatabases parancsot

'válassza ki * a _sysobjects'-ból)

Kapcsolódó cikkek