小風的資安科普-SQL injection - 資安
By Selena
at 2019-05-11T21:07
at 2019-05-11T21:07
Table of Contents
※ [本文轉錄自 CyberSecure 看板 #1SrZoqyB ]
作者: st1009 (前端攻城師) 看板: CyberSecure
標題: [教學] 小風的資安科普-SQL injection
時間: Sat May 11 11:08:32 2019
一.前言
SQL injection 是一種在網路上經典常見的攻擊手法,不論是在CTF中,還是真實的
網路攻防戰中都可以見到其身影。
故本文將介紹這種古老又實用的攻擊手法給想要學習資訊安全的板友了解其原理以及
運作方式。
期待可以為一些沒有資安經驗的板友們開啟一扇通往資訊安全領域的大門。
二.概述
1.甚麼是 SQL injection ?
SQL injection 是一種將惡意的程式碼注入資料庫搜尋語法的資安技術。
2.SQL injection 的危害是甚麼?
藉由 SQL injection 黑客可以修改資料庫中的內容,非法越權或者之後進行更
進一步的攻擊手法。
3.如何進行 SQL injection?
找到存在漏洞的SQL注入點注入,例如:網址列的get使用處,帳號密碼輸入處,
以及其他各種會將資料送到資料庫的位置。
三.原理
在資料庫中,我們會使用搜尋語法進行搜尋。
例如:"SELECT * FROM user_data WHERE account ='$account' AND pwd = '$pwd' "
上例中存在兩個來自使用者的變數,分別是帳號($account)以及密碼($pwd),
在程式正常運行的時候,我們會尋找對應帳號密碼皆相符的資料,將其輸出。
但假設有惡意使用者輸入了一些非法字元就會破壞這段搜尋語法。
例如:
$account = "' OR 1=1 -- ";
$pwd = "QAQ";
此時我們的搜尋語法會變成
"SELECT * FROM user_data WHERE account ='' OR 1=1 -- ' AND pwd = 'QAQ' "
因為account遭到兩個單引號閉合,並且 -- 在SQL中是註解的意思,因此在進入資料
庫後,該程式碼會轉成以下:
"SELECT * FROM user_data WHERE account ='' OR 1=1 "
也就是說關於密碼確認的欄位消失了!此時惡意使用者將可以非法登入!
四.範例
https://imgur.com/dQ3CYRm.jpg
如上圖我們在登入欄位輸入了帳號admin,並且於其後插入惡意代碼。
https://imgur.com/FzZJ3Vn.jpg
此時我們可以看到我們成功的登入了admin的帳號!
五.案例
建中蘇柏榕曾經使用SQL injection 駭入我國大考中心。
(資訊來源:http://www.epochtimes.com/b5/5/7/26/n997634.htm)
六.防禦方式
要防禦SQL injection 首先要注意一個基本原則,所有來自使用者的資訊皆不可信!
我們可以藉由以下幾種方式防禦SQL injection :
1.過濾使用者輸入,將非法字元過濾掉。
但此方法因為黑客們有著各種創意,所以存在著風險。
2.建立白名單,只有符合的資料可以使用。
此法最安全,但是可以適用的範圍最小,不利於大量使用。
3.預處理(prepare)
PHP中的PDO套件可以針對參數進行綁定,以此避免SQL injection,此方法是目
前最主流的方法。
(PDO官方說明:https://www.php.net/manual/en/book.pdo.php)
七.後話
SQL injection隨著時間的演進,不斷的進化著,除了最基礎的這些外,還有其他應
用,譬如基於時間的盲注(time based blind)
此外也可能被當成更進一步攻擊,譬如遠程代碼執行(RCE)的跳板。
因此值得各位學習資安的人一再研究學習。
發表此文,希望可以與各位舊雨新知們一同學習,一同進步,為台灣的資訊安全貢獻
一份心力。
共勉之。
By st1009
--
半壁河山半攻守
半爭成敗半悟道
許銀川
--
作者: st1009 (前端攻城師) 看板: CyberSecure
標題: [教學] 小風的資安科普-SQL injection
時間: Sat May 11 11:08:32 2019
一.前言
SQL injection 是一種在網路上經典常見的攻擊手法,不論是在CTF中,還是真實的
網路攻防戰中都可以見到其身影。
故本文將介紹這種古老又實用的攻擊手法給想要學習資訊安全的板友了解其原理以及
運作方式。
期待可以為一些沒有資安經驗的板友們開啟一扇通往資訊安全領域的大門。
二.概述
1.甚麼是 SQL injection ?
SQL injection 是一種將惡意的程式碼注入資料庫搜尋語法的資安技術。
2.SQL injection 的危害是甚麼?
藉由 SQL injection 黑客可以修改資料庫中的內容,非法越權或者之後進行更
進一步的攻擊手法。
3.如何進行 SQL injection?
找到存在漏洞的SQL注入點注入,例如:網址列的get使用處,帳號密碼輸入處,
以及其他各種會將資料送到資料庫的位置。
三.原理
在資料庫中,我們會使用搜尋語法進行搜尋。
例如:"SELECT * FROM user_data WHERE account ='$account' AND pwd = '$pwd' "
上例中存在兩個來自使用者的變數,分別是帳號($account)以及密碼($pwd),
在程式正常運行的時候,我們會尋找對應帳號密碼皆相符的資料,將其輸出。
但假設有惡意使用者輸入了一些非法字元就會破壞這段搜尋語法。
例如:
$account = "' OR 1=1 -- ";
$pwd = "QAQ";
此時我們的搜尋語法會變成
"SELECT * FROM user_data WHERE account ='' OR 1=1 -- ' AND pwd = 'QAQ' "
因為account遭到兩個單引號閉合,並且 -- 在SQL中是註解的意思,因此在進入資料
庫後,該程式碼會轉成以下:
"SELECT * FROM user_data WHERE account ='' OR 1=1 "
也就是說關於密碼確認的欄位消失了!此時惡意使用者將可以非法登入!
四.範例
https://imgur.com/dQ3CYRm.jpg
如上圖我們在登入欄位輸入了帳號admin,並且於其後插入惡意代碼。
https://imgur.com/FzZJ3Vn.jpg
此時我們可以看到我們成功的登入了admin的帳號!
五.案例
建中蘇柏榕曾經使用SQL injection 駭入我國大考中心。
(資訊來源:http://www.epochtimes.com/b5/5/7/26/n997634.htm)
六.防禦方式
要防禦SQL injection 首先要注意一個基本原則,所有來自使用者的資訊皆不可信!
我們可以藉由以下幾種方式防禦SQL injection :
1.過濾使用者輸入,將非法字元過濾掉。
但此方法因為黑客們有著各種創意,所以存在著風險。
2.建立白名單,只有符合的資料可以使用。
此法最安全,但是可以適用的範圍最小,不利於大量使用。
3.預處理(prepare)
PHP中的PDO套件可以針對參數進行綁定,以此避免SQL injection,此方法是目
前最主流的方法。
(PDO官方說明:https://www.php.net/manual/en/book.pdo.php)
七.後話
SQL injection隨著時間的演進,不斷的進化著,除了最基礎的這些外,還有其他應
用,譬如基於時間的盲注(time based blind)
此外也可能被當成更進一步攻擊,譬如遠程代碼執行(RCE)的跳板。
因此值得各位學習資安的人一再研究學習。
發表此文,希望可以與各位舊雨新知們一同學習,一同進步,為台灣的資訊安全貢獻
一份心力。
共勉之。
By st1009
--
半壁河山半攻守
半爭成敗半悟道
許銀川
--
Tags:
資安
All Comments
By Catherine
at 2019-05-13T06:55
at 2019-05-13T06:55
By Daph Bay
at 2019-05-14T16:44
at 2019-05-14T16:44
By Quintina
at 2019-05-16T02:33
at 2019-05-16T02:33
By Heather
at 2019-05-17T12:21
at 2019-05-17T12:21
By Heather
at 2019-05-18T22:10
at 2019-05-18T22:10
By Dorothy
at 2019-05-20T07:58
at 2019-05-20T07:58
By Thomas
at 2019-05-21T17:47
at 2019-05-21T17:47
By Enid
at 2019-05-23T03:35
at 2019-05-23T03:35
By Zora
at 2019-05-24T13:24
at 2019-05-24T13:24
By Ophelia
at 2019-05-25T23:12
at 2019-05-25T23:12
By Hamiltion
at 2019-05-27T09:01
at 2019-05-27T09:01
Related Posts
請問找資安方面的工作需要會那些技能和程式語言
By Kyle
at 2019-05-08T23:04
at 2019-05-08T23:04
請問找資安方面的工作需要會那些技能和程式語言
By Valerie
at 2019-05-08T21:53
at 2019-05-08T21:53
資訊安全應用實務人才養成班(510小時)
By Harry
at 2019-05-07T21:20
at 2019-05-07T21:20
我的筆電怎麼了? 這是被駭嗎?
By Genevieve
at 2019-05-06T15:28
at 2019-05-06T15:28
Java Web Application程式設計師
By William
at 2019-05-02T11:01
at 2019-05-02T11:01