Aki találkozott már kellően rosszul kialakított, MSSQL-t és/vagy ASP-t használó alkalmazással, az biztosan szívesen emlékszik vissza rá, hogy milyen egyszerű is lehet az SQL injection, ha az ember egy alkalmazásrétegbeli paranccsal egyszerre több műveletet is végrehajthat az adatbázisszerveren.
A történet ugyebár arról szól, hogy a lekérdezés-sztringünkbe (legtöbbször) pontosvesszők használatával több utasítást is belefogalmazhatunk, melyeket a kiszolgáló szépen egymás után végre is fog hajtani. Ez amellett, hogy kényelmi szolgáltatás a támadó számára, lehetővé teszi, hogy pl. egy gondatlanul összeállított SELECT lekérdezéshez INSERT vagy UPDATE utasításokat, esetleg rendszerparancsokat (SHUTDOWN) fűzzünk.
MySQL backend esetén azonban kevésbé rózsás a helyzet, de ahogy ebből a wisec.it-n megjelent cikkből kiderül, a query-halmozás MySQL-ben sem lehetetlen, bár nem is kifejezetten egyszerű:
Mindenek előtt FILE jogosultságokra van szükségünk, amivel tudjuk írni a MySQL adat könyvtárát - ez a feltétel legtöbbször nem jelent problémát (sajnos). Ebben a könyvtárban tárolja az adatbáziskezelő a trigger eljárásait (is), az okososak pedig innentől kezdve sejthetik, hogy mire megy ki a játék. Ha egy tesztkörnyezetben létrehozunk egy triggert, láthatjuk, hogy két új fájl jön létre a vonatkozó adatbázis konyvtárában .TRG és .TRN kiterjesztéssel. Ezek egyszerű szöveges fájlok, amelyeket az INTO OUTFILE klóz segítségével létrehozhatunk. Innentől kezdve pedig a beállított triggerfeltételek teljesülése esetén lefutnak az általunk definiált utasítások. Ez utóbbi lépés azonban sokszor határt fog szabni a módszer bevethetőségének, az INTO OUTFILE ugyanis alapértelmezetten tiltott az újabb MySQL verziókban (a triggerek viszont csak ezekben léteznek).
EQ · http://rycon.hu 2010.04.22. 10:35:18
_2501 2010.04.22. 13:04:00
Zorg a Rettenetes · http://musicanta.blog.hu 2010.04.25. 21:46:33
Másrészt ha mégis működik az INTO OUTFILE, akkor azt kis szerencsével sokkal keményebben is kihasználhatod, mint lekérdezéshalmozásra, például ha tudsz írni valami webről elérhető könyvtárba...
EQ · http://rycon.hu 2010.04.26. 00:07:49
Zorg a Rettenetes · http://musicanta.blog.hu 2010.04.26. 07:27:25
websec.wordpress.com/2007/11/17/mysql-into-outfile/
'At the end some notes regarding INTO OUTFILE:
(...)
there is no way I know of to encode the pathname, so quotes are required'
Persze ha van valami trükk, amit nem ismerek, akkor kíváncsi vagyok rá.
EQ · http://rycon.hu 2010.04.26. 11:25:58
Zorg a Rettenetes · http://musicanta.blog.hu 2010.04.26. 19:01:43