SQL 是網站取得資料庫資料的一種語法,而 SQL injection 則是駭客利用修改這種語法導致資料庫外洩或破壞的一種攻擊行為,基本上你可以想像他是餐廳的隱藏菜單之類的,沒有出現在餐單上但是你可以點
舉個簡單的例子,你去星〇克點了一碗炒飯,然後店員不疑有他真的去端出一盤炒飯給你,它的菜單(GUI)絕對不會出現炒飯,但是可能他的廚房(資料庫)裡面真的有但是沒有公開,那跟店員點餐不論是點咖啡還是點炒飯同樣都是中文,這就是一個 SQL injection 的奇妙例子拜託不要真的去星〇克點炒飯
以下是我自己學 SQL injection 時用的網站,那我也會從裡面抓他的題目來當作例題來講解
portswigger:https://portswigger.net/web-security/sql-injection
那一般使用 SQLi 不外乎就是想辦法從對面的資料庫中套出使用者的帳號、密碼、信用卡資料之類的敏感資訊,那至於要怎麼使用呢?首先我們需要先看一下 SQL 的原理
SQL 是與資料庫之間溝通的術語,利用 SQL 可以對資料庫做一些操作,例如:插入( Insert )、讀取( Read )、更新( Update )、刪除( Delete )等,但是我們僅會對能使用到的 SQL injection 的語法做說明
不用懷疑,真的都是大寫,使用方式基本上就是
SELECT 欄位名 FROM 表格名
你可以把他想像成一個 Excel 的表格( 他也確實是一種表格 ),然後知道要找表格以後就是利用註解想辦法讓它略過之後原本的程式,讓它把正常你不應該看到的東西顯示出來,那會用到的註解語法是以下三個
/*
--
#
--
這個語法後面記得加上空格,不然可能會有語法錯誤,那如果是想要使用 SQL injection 的地方有被做一定程度的限制的話(例如不能輸入特殊字元),我們還是可以利用一些其他的語法想辦法 bypass 掉,不過那個之後再説,那現在先進入簡單的例題時間例題網址:https://portswigger.net/web-security/sql-injection/lab-retrieve-hidden-data
記得要登入才能做,進來以後點 ACCESS THE LAB 來打開 LAB,打開有點慢很正常(我有幫你框起來,我人好好)
進到 LAB 以後長的是一個購物網站的形式
那按照剛剛的題目要求,我們需要找出隱藏的資料
至於要怎麽找,我們先隨便點除了 ALL 以外的一個分類,讓他的網址那裡出現查詢資料庫的語法
/filter?category=Accessories
那基本上背後的資料庫查詢語法大概是長這樣
SELECT Product FROM 'Products' WHERE ProductNumber = 'Accessories'
然後我們要做的就是用布林值的操作以及注解把查詢資料庫的語法注解掉,你可以看到現在該分類裡面的東西少的可憐所以我們要讓他讓他掏心掏肺
會用到的語法
' or 1=1 --
詳細分析
'
在這裡的用處是將該欄位的 input 方塊內容關閉,白話來説就是非正確讀取1 = 1
在這裡的用處是產生一個 true 的布林值,讓這個判斷式恆真--
是剛剛上面提到過的注解按下 Enter 以後系統就會人很好的告訴你成功了,你也會看到下面原本隱藏在資料庫裡面的東西跑了出來
例題網址:https://portswigger.net/web-security/sql-injection/lab-login-bypass
這就是大家喜聞樂見的登入 bypass 了,那廢話不多説直接看 LAB 的畫面
既然都是登入 bypass 了那進去肯定是往賬號那裡鑽啊
然後 484 不知道要幹嘛
那跟上一題一樣,他的資料庫的讀取也是差不多的形式,這裡給個大概的狀況
SELECT * FROM Username WHERE Usernames =' Username ' AND Passwords = ' Password '
那一樣的也是輸入同一串東西就可以把密碼驗證的地方 bypass 掉,密碼就可以隨便輸反正都 bypass 掉了,像這裡你們雖然看不到但我的密碼就是隨便按的 123123
賬號:' or 1=1 --
密碼:隨便亂打
然後就是成功提示又蹦出來了
那今天就是先兩題最基礎的 SQL injection,明天就會是一些 " 比較 " 進階的語法,但是應該是也不會難到哪裡去啦,我會盡量講的淺顯易懂一點,不然這個東西真的蠻不直觀的