前幾天有稍微認識到其中一種常見的攻擊:SQL注入,讓我們稍微複習一下:
SQL injection:
這是一種發生在應用程式與資料庫層的安全漏洞。再輸入的字串中夾帶SQL指令,讓設計不良的程式忽略字元檢查,那麼這些夾帶進去的惡意指令就會被認為是正常的SQL指令執行,並遭到破壞或入侵。
-- wiki
接著我們要來更深入的認識SQL Injection。
SQL全稱為「Structrured Query Language」,是一種操作資料庫、存取出所需資料的一套查詢語言,以表格形式儲存資料。
;
代表將語句分開,--
代表忽視,用這兩個我們可以達到SQL injection的概念Union運算子用來將兩個(以上)SQL查詢的結果合併起來,而由UNION查詢中個別SQL語句所產生的欄位,但他們要有相同的列數和相似的數據類型。
也就是說,當有多個查詢想要一起執行並返回結果時,可以使用UNION
來合併結果。
例如:
SELECT name, email FROM employees
UNION
SELECT name, email FROM customers;
結果就會是employees
和 customers
兩個表的所有name
和email
。
攻擊者會利用UNION
把自己的查詢結果合併到合法查詢中,這樣就可以和合法資料合併,並竊取到資料。
例如輸入:
' UNION SELECT username, password FROM users--
利用布林值來猜測條件來觀察網站的行為,並推測數據。
例如:
輸入正常帳號及密碼為AAA
及12345
,資料庫的SQL指令是:
Where user_name = 'AAA' and password = '12345'
但若駭客輸入的資料是空白和OR 1=1
:
Where user_name=‘ OR 1=1’ and password=‘ OR 1=1’
條件都會判定為TRUE,就會被獲取資料。