INSERT
、SELECT
、UPDATE
和 DELETE
,這些指令用來對資料庫中的資料進行新增、查詢、更新及刪除等操作。SQL 注入的工作原理是透過未經驗證的輸入來操作 SQL 查詢字串,使資料庫執行原本不應該允許的指令。常見的 SQL 注入攻擊過程如下:
攻擊者在輸入欄位中輸入惡意的 SQL 指令,例如:
' OR 1=1 --
上述指令的作用是將原本的 SQL 查詢條件變成 WHERE UserID = '' OR 1=1 --
,這會使查詢條件始終為真(因為 1=1
永遠成立),從而繞過驗證並返回所有的資料。
攻擊者可以進一步使用此技術來查看資料表結構、提取敏感資料、修改資料,甚至刪除資料表。
根據攻擊者使用 SQL Injection 的目的和目標,SQL 注入可以分為以下幾種攻擊類型:
以下是 SQL 注入的幾種常見攻擊手法:
利用 UNION
操作符合併查詢結果
UNION
操作符將多個查詢結果合併,從而在查詢結果中包含惡意資料。利用布林邏輯條件繞過驗證
攻擊者可以在查詢中加入布林條件來繞過身份驗證,範例如下:
SELECT * FROM users WHERE username = '' OR 1=1 -- AND password = 'password';
透過時間盲注判斷 SQL 執行結果
SLEEP()
函數來延遲 SQL 查詢執行時間,從而判斷資料庫中是否存在某個特定條件或資料。以下是幾個常見的 SQL Injection 攻擊範例及其說明:
更新資料(Updating Table):
攻擊者 SQL 查詢:
blah'; UPDATE jb-customers SET jb-email = 'info@certifiedhacker.com' WHERE email = 'jason@springfield.com'--
執行的 SQL 查詢:
SELECT jb-email, jb-password, jb-login_id, jb-last_name
FROM members
WHERE jb-email = 'blah';
UPDATE jb-customers SET jb-email = 'info@certifiedhacker.com' WHERE email = 'jason@springfield.com'--
攻擊效果:
透過注入 UPDATE
語句,攻擊者將指定帳戶的 email 欄位更新為 info@certifiedhacker.com
。這意味著攻擊者能夠竄改現有資料表中的特定資料。
新增資料記錄(Adding New Records):
攻擊者 SQL 查詢:
blah'; INSERT INTO jb-customers (jb-email, jb-password, jb-login_id, jb-last_name)
VALUES ('jason@springfield.com','hello','jason','Jason Springfield')--
執行的 SQL 查詢:
SELECT jb-email, jb-password, jb-login_id, jb-last_name
FROM members
WHERE jb-email = 'blah';
INSERT INTO jb-customers (jb-email, jb-password, jb-login_id, jb-last_name)
VALUES ('jason@springfield.com','hello','jason','Jason Springfield')--
攻擊效果:
攻擊者利用 INSERT INTO
語句新增一筆新的記錄到資料庫中,使得資料庫中存在惡意攻擊者加入的假資料。
辨識資料表名稱(Identifying Table Name):
攻擊者 SQL 查詢:
blah' AND 1=(SELECT COUNT(*) FROM mytable)--
執行的 SQL 查詢:
SELECT jb-email, jb-password, jb-login_id, jb-last_name
FROM members
WHERE jb-email = 'blah' AND 1=(SELECT COUNT(*) FROM mytable)--
攻擊效果:
此查詢嘗試確認 mytable
資料表是否存在於資料庫中,從而收集目標資料庫架構資訊。
刪除資料表(Deleting a Table):
攻擊者 SQL 查詢:
blah'; DROP TABLE Creditcard;--
執行的 SQL 查詢:
SELECT jb-email, jb-password, jb-login_id, jb-last_name
FROM members
WHERE jb-email = 'blah';
DROP TABLE Creditcard;--
攻擊效果:
攻擊者利用 DROP TABLE
語句刪除資料庫中的整個 Creditcard
資料表,導致資料遺失或服務中斷。
返回更多資料(Returning More Data):
攻擊者 SQL 查詢:
OR 1=1
執行的 SQL 查詢:
SELECT * FROM User_Data WHERE Email_ID = 'blah' OR 1=1
攻擊效果:
此查詢會返回 User_Data
資料表中的所有記錄,因為 OR 1=1
始終為真,這樣攻擊者便可繞過查詢條件獲取所有資料。
終於完賽了,總結一下我這次的缺點,由於沒有事先規劃好30天要幹嘛只好照著CEH的步驟來,好家在最後還是拿到證照了