38. 針對 SQL 注入測試,下列哪一個觀念最「不」適切?
(A) ' OR '1'='1' -- 是非常萬用的語法,通常可以有效測出 SQL Injection 存在與否,對 測試標的影響程度低,無論是在資料庫的新增、刪除、修改都可以直接使用
(B) '; DROP TABLE Products;# 這種語法會導致刪除整張資料表,通常不會在實戰過 程中使用這種語法
(C) '; IF (1=1) WAITFOR DELAY '0:0:10'-- 這種語法會導致伺服器延遲 10 秒再回應, 有可能會讓使用者感受到效能異常,必須謹慎使用
(D) 在特定情境下,施測人員可以透過 INTO OUTFILE 這種功能寫入後門到資料庫 伺服器中,並且透過該後門達成 Remote Code Execution
統計: A(4), B(2), C(1), D(4), E(0) #3871613
詳解 (共 1 筆)
這題的正確答案是 (A) ' OR '1'='1' -- 是非常萬用的語法,通常可以有效測出 SQL Injection 存在與否,對測試標的影響程度低,無論是在資料庫的新增、刪除、修改都可以直接使用。
在進行滲透測試時,安全性與不可逆性是首要考量。選項 (A) 的敘述雖然在「查詢」情境下很常見,但在其他情境下卻極度危險且不適切。
選項分析與說明
| 選項 | 敘述評價 | 原因說明 |
| (A) | 錯誤 (不適切) | 正確答案。 雖然 ' OR '1'='1' 在 SELECT(查詢)時常用,但若用在 UPDATE(修改)或 DELETE(刪除)指令,會導致 Where 條件恆真,進而更新或刪除整張資料表的所有資料。這會造成嚴重的資料破壞,絕非「影響程度低」。 |
| (B) | 正確 | 這是典型的破壞性攻擊。在專業的滲透測試(Penetration Testing)中,目標是證明弱點存在,而非破壞客戶資料。隨意刪除資料表會導致服務中斷與資料遺失,是實務上的大忌。 |
| (C) | 正確 | 這屬於 Time-based Blind SQLi(時間型盲注)。透過延遲回應來判斷漏洞是否存在。但在高負載的生產環境中,過長的延遲可能會佔用資料庫連線池,導致正常使用者無法存取,因此必須謹慎設定延遲時間。 |
| (D) | 正確 | 在 MySQL 等資料庫中,若權限足夠(如 file_priv 開啟)且路徑已知,攻擊者可利用 INTO OUTFILE 將 WebShell 寫入網頁目錄,進而取得系統控制權 (RCE)。這是 SQL 注入中極高威脅的利用方式。 |
滲透測試的專業建議:如何正確測試 SQL 注入?
針對 (A) 選項提到的風險,資安人員在測試時應遵循以下原則:
-
優先使用查詢語法:僅在 SELECT 相關的參數進行測試,避免在 UPDATE 或 DELETE 的參數上直接使用恆真式。
-
使用單純的算術運算:例如輸入 id=10-1,若回傳結果與 id=9 相同,即可初步判定存在注入點,且完全不具破壞性。
-
無損盲注:使用 AND 1=1 與 AND 1=2 觀察頁面回傳差異,這是比 OR 1=1 更安全且常見的探測方式。
總結
身為資安或系統管理人員,在面對類似「B 級機關」或「醫療關鍵基礎設施」的環境時,執行測試必須格外小心。任何可能導致資料庫全表異動的語法(如 A 選項所述)都應被禁止在正式環境執行。
針對這類 SQL 注入防禦,除了代碼層級的參數化查詢,您在維護醫院內部的伺服器(如 NHI 相關系統)時,是否也有部署 WAF(網頁應用程式防火牆)來攔截這類常見的惡意特徵碼呢?