詳解sql注入通過函數判斷數據庫類型
某些SQL函數可以判斷數據庫類型,下面就將為您介紹sql注入通過函數判斷數據庫類型,供您參考,希望對您更深入了解SQL函數有所幫助
某日,發現一目標存在SQL注入,且過濾了select等相關敏感字段,用工具暫無法判斷數據庫類型。
后發現調用某些SQL函數也可判斷數據庫類型,雖然SQL語句大部分是通用的。但一些內置的函數還是有一定的區別。
len和length
在mssql和mysql以及db2內,返回長度值是調用len()函數;在oracle和INFORMIX則是通過length()來返回長度值。
換句話說。
當你使用and len('a')=1的時候,返回正常頁面時,可以推斷當前的數據庫類型可能是mssql,或mysql,或是db2。反之則可能會是oracle和informix。
@@version和version()
在mysql內,可以用@@version或是version()來返回當前的版本信息。但無法判斷是mysql還是mssql時,可以用version()函數來構造判斷。
換句話說:
version()>1 返回與@@version>1 相同頁面時,則可能是mysql。如果出現提示version()錯誤時,則可能是mssql。
substring和substr
在mssql中可以調用substring。oracle則只可調用substr
【編輯推薦】