原網址web
當一個應用程序可能受到SQL注入侵害,而且查詢的結果在應用程序的響應中顯示時,關鍵字UNION能夠用來獲取數據庫中其它表中的信息。這就形成了UNION攻擊。sql
關鍵字UNION容許用戶執行一個或多個SELECT查詢,並將結果附加到原始查詢。例如:數據庫
1 SELECT a, b FROM table1 UNION SELECT c, d FROM table2
這條SQL查詢將返回一個包含兩列的結果集,其中包含表1中a列和b列以及表2中c列和d列的值。spa
UNION查詢有兩個關鍵要求:.net
1. 各個查詢必須返回相同數量的列。code
2. 每列中的數據類型必須在各個查詢之間兼容。blog
要執行UNION攻擊,須要確保攻擊知足以上兩個要求。這一般須要咱們知道:索引
1. 原始查詢返回多少列?字符串
2. 原始查詢返回的哪些列具備適當的數據類型以保存注入查詢的結果?get
在執行UNION攻擊時,有兩種有效方法可肯定從原始查詢返回的列數。
第一種方法涉及注入一系列ORDER BY子句並遞增指定的列索引,直到出現錯誤。例如,假設注入點是原始查詢的WHERE子句中的帶引號的字符串,提交:
1 ' ORDER BY 1-- 2 ' ORDER BY 2-- 3 ' ORDER BY 3-- 4 ……