1. 程式人生 > 實用技巧 >注入判斷資料庫型別

注入判斷資料庫型別

SQL注入-資料庫判斷

國內的網站用ASP+Access或SQLServer的佔70%以上,PHP+MySQL佔20%,其他的不足10%。

常見的資料庫Oracle、MySQL、SQL Server、Access、MSsql、mongodb等

關係型資料庫通過外來鍵關聯來建立表與表之間的關係,非關係型資料庫通常指資料以物件的形式儲存在資料庫中,而物件之間的關係通過每個物件自身的屬性來決定.

關係型資料庫:由二維表及其之間的聯絡組成的一個數據組織。如:Oracle、DB2、MySql

非關係型資料庫:非關係型資料庫產品是傳統關係型資料庫的功能閹割版本,通過減少用不到或很少用的功能,來大幅度提高產品效能。如:NoSql、Cloudant

常用組合:

asp: sql server,Access
.net : sql server
php: PostgreSQL,Mysql
java: Oracle,Mysql
前端框架和資料庫的組合,這個有助於縮小我們的判斷範圍。

  1. 是否可以使用特定的函式來判斷,該資料庫特有的

    1-  len和length
    在mssql和mysql以及db2內,返回長度值是呼叫len()函式;在oracle和INFORMIX則是通過length()來返回長度值。
    當你使用and len('a')=1的時候,返回正常頁面時,可以推斷當前的資料庫型別可能是mssql,或mysql,或是db2。反之則可能會是oracle和informix。
    
    2-  @@version和version()
    在mysql內,可以用@@version或是version()來返回當前的版本資訊。但無法判斷是mysql還是mssql時,可以用version()函式來構造判斷。
    version()>1 返回與@@version>1 相同頁面時,則可能是mysql。如果出現提示version()錯誤時,則可能是mssql。
    
    3-  substring和substr
    在mssql中可以呼叫substring。oracle則只可呼叫substr
    
  2. 是否可以使用輔助的符號來判斷,如註釋符號、多語句查詢符等等

    “/*”是MySQL中的註釋符,返回錯誤說明該注入點不是MySQL,繼續提交如下查詢字元:
    “--”是Oracle和MSSQL支援的註釋符,如果返回正常,則說明為這兩種資料庫型別之一。繼續提交如下查詢字元:
    “;”是子句查詢識別符號,Oracle不支援多行查詢,因此如果返回錯誤,則說明很可能是Oracle資料庫。
    
  3. 是否顯可以利用錯資訊

在注入點後直接加上單引號,根據伺服器的報錯資訊來判斷資料庫。錯誤提示Microsoft JET Database Engine 錯誤 '80040e14',說明是通過JET引擎連線資料庫,則表明資料庫為ACCESS資料庫,如果是ODBC的話則說明是MSSQL資料庫。
  1. 開放埠號