SQL injection – VSCAN | 網站安全弱點檢測 http://vscan.local 網站弱點掃描服務 | 程式碼弱點掃描服務 Sat, 03 Mar 2018 15:01:50 +0000 zh-TW hourly 1 https://wordpress.org/?v=6.9.1 SQL Injection http://vscan.local/blog/sql-injection/ Wed, 15 Nov 2017 13:37:38 +0000 http://vscan.local/?p=2357 SQL Injection 蟬聯 OWASP TOP 10 冠軍寶座從2013年版到最新的2017年版,可見其造成的傷害及普遍性之高,畢竟開發人員在將外部參數丟...

這篇文章 SQL Injection 最早出現於 VSCAN | 網站安全弱點檢測

]]>
SQL Injection 蟬聯 OWASP TOP 10 冠軍寶座從2013年版到最新的2017年版,可見其造成的傷害及普遍性之高,畢竟開發人員在將外部參數丟入 SQL 命令列時,為了方便就直接帶入,省略了過濾或用參數化的方式,相信有寫過串接 Database 的網站開發人員都會有的經驗。

SQL Injection 為透過外部使用者的輸入或可供改造的參數,未經驗證就帶入 SQL 相關指令被執行,導致跳脫原先預期的行為,變成攻擊者想要的行為。攻擊行為可利用 SQL 的指令如 SELECT、UPDATE 或 DELETE 等來造成資料庫非預期的行為,若執行權限又沒特別去做區分,等於將整個資料庫被外部任意存取與動作,甚至可用來執行指令碼,後果將難以彌補!

 

SQL Injection 攻擊型態類型

 

綜合這幾種類型,可以得知為防範此攻擊,為當外部參數進入SQL 陳述式(Statement)前,需再經過驗證格式是否合法,是否有隱藏特殊符號等檢查,主要有以下幾種方法:

 

參數化
將參數經過 Parameter 或 Prepare 等可用來對 SQL 參數做執行前的型態轉換,若有特殊字元將無法產生攻擊作用,最為推薦此種方法!

.NET
String query = “SELECT account_balance FROM user_data WHERE user_name = “
+ request.getParameter(“customerName”);

try {
Statement statement = connection.createStatement( … );
ResultSet results = statement.executeQuery( query );
}

PHP
$preparedStatement = $db->prepare(‘INSERT INTO table (column) VALUES (:column)’); $preparedStatement->execute(array(‘column’ => $unsafeValue));

 

替代字元
使用 Replace() 等方法來將特定字元做替換,但可能攻擊字元稍微經過變化或加密後,變成誤擋或漏檔等結果。

string sql = “SELECT * FROM WIDGETS WHERE ID=” +badValue.Replace(“‘”,”””);

 

正則表達式
利用 Regular Expression 設定合法的格式,直接用白名單方式限定參數的內容,這就變成需根據資料的不同來調整對應的 Regex,雖然嚴謹但較為麻煩,但有可能產生誤擋或漏擋的情況發生。

 

以上幾種防範方法適用於 Injection attack 類型的攻擊行為,可針對外部不被信任的參數做驗證與過濾處理,避免產生不可預期的行為,可視資料的多樣性與參數用途來選擇相對應的防禦方式。

 

這篇文章 SQL Injection 最早出現於 VSCAN | 網站安全弱點檢測

]]>
Injection Attack http://vscan.local/blog/injection-attack/ Thu, 15 Jun 2017 15:05:21 +0000 http://vscan.local/?p=2349 Injection Attack (注入式攻擊)為一種利用外部不被信任的輸入來源,未經驗證就被直接帶入後端處理,導致利用跳脫字元或編碼等方式造成攻擊字串被執行,...

這篇文章 Injection Attack 最早出現於 VSCAN | 網站安全弱點檢測

]]>
Injection Attack (注入式攻擊)為一種利用外部不被信任的輸入來源,未經驗證就被直接帶入後端處理,導致利用跳脫字元或編碼等方式造成攻擊字串被執行,進而發生無法預期行為,更由於其普遍性導致網路上有多種工具可協助進行攻擊,不需要高深技巧,可想而知其嚴重性!

 

常見的 Injection attack

 

SQL injectionXSS 更是蟬聯 OWASP TOP 10 多年,可見其造成的傷害及普遍性之高,畢竟開發人員在將外部參數丟入 SQL 命令列時,為了方便時常就直接帶入,省略了過濾或參數化等方式,相信有寫過串接 Database 的網站開發人員都會有的經驗吧!

CRLF 則是利用 \r\n 換行字元切割 HTTP Header 並帶入攻擊行為,因為 Header 就是使用 \r\n 來做欄位的分離,而通常會搭配 XSS 來進行更危險的攻擊手法。

Code injeciton 則為由外部未經驗證的字串被直接使用 eval 或 system 等執行指令來執行,導致伺服器被執行未預期的程式行為,能造成的後果自然也是無法預期。

SMTP injection 為類似 CRLF 利用換行字元切割參數導致送出 SMTP 相關指令,常被第三方用來寄送匿名廣告信件(Relay),從而演變成釣魚信件的進階持續式攻擊 (APT)。

XPath injection 攻擊原理類似 SQL injection,利用跳脫字元繞過檢查,並帶入其他攻擊行為,若為處理使用者身分驗證等流程,則可能造成提權與機密資訊外洩等風險。

 

Injection 式的攻擊手法都是直接信任外部輸入,沒有經過字元的檢查或進行過濾,或是只利用前端 javascript 檢查輸入行為,卻很容易被駭客繞過,能這麼長久被列為最常見的攻擊千萬不可忽略。

 

這篇文章 Injection Attack 最早出現於 VSCAN | 網站安全弱點檢測

]]>