Web應用系統安全 Ch5~8
游上德 / 2022-11-10
B L U E P L A N E T
目錄
2
B L U E P L A N E T
Ch.5 API分析技巧
3
B L U E P L A N E T
REST API
4
REST的HTTP動詞 | 用途 |
POST | 新增 |
GET | 讀取 |
PUT | 更新/取代 |
PATCH | 更新/修改 |
DELETE | 刪除 |
REST架構支援的HTTP動詞
B L U E P L A N E T
REST API
5
GET api.mega-bank.com/users/1234
GET api.mega-bank.com/users/1234/payments
POST api.mega-bank.com/users/1234/payments
POST /users/1234/payments HTTP/1.1
Host: api.mega-bank.com
Autthorization: Bearer abc 21323
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/1.0 (KHTML, like Gecko)
B L U E P L A N E T
「Option」動詞
6
Curl –I –X OPTIONS https://api.mega-bank.com/users/1234
200 OK
Allow: HEAD, GET, PUT, DELETE, OPTIONS
B L U E P L A N E T
測試 – 蛛思/實告API的Options動詞回應
使用comman line下curl失敗不確定原本,感覺有可能是環境問題。
使用線上工具測試的結果蛛思及實告的api皆有回應:
7
猜測可能是Nginx預設為開啟(未證實),須另外手動設定才能夠關閉。
B L U E P L A N E T
偵查HTTP動詞
8
GET api.mega-bank.com/users/1234
可以將這個API端點擴展成以下API。在本書例子中有寫成腳本用程式暴力呼叫測試API,有興趣的人可自行翻閱。
GET api.mega-bank.com/users/1234
POST api.mega-bank.com/users/1234
PUT api.mega-bank.com/users/1234
PATCH api.mega-bank.com/users/1234
DELETE api.mega-bank.com/users/1234
B L U E P L A N E T
測試 - 實告API
9
B L U E P L A N E T
身份驗證機制
10
GET /homepage
HOST mega-bank.com
Authorization: Basic am9l0jEyMzQ
Content Type: application/json
透過Base64解碼可得
joe:1234
B L U E P L A N E T
常見的API形式 – O Auth 2.0為例
11
{
“response_type”: code,
“client_id”: id,
“scope”: [scope],
“state”: state,
“redirect_uri”: uri
}
https://discordapp.com/api/oauth2/authorize?response_type=code&client_\id=157730590492196864&scope=identify%20guilds.\join&state=15773059ghq9183habn&redirect_uri=https%3A%2F%2Fnicememe.\website&prompt=consent
GET https://graph.facebook.com/v4.0/oauth/access_token?
Client_id={app-id}
&redirect_uri={redirect-uri}
&client_secret={app-secret}
&code={code-parameter}
B L U E P L A N E T
偵查獨有的API形式
12
B L U E P L A N E T
Ch.6 識別第三方元件
13
B L U E P L A N E T
通用漏洞披露(CVE)資料庫
14
B L U E P L A N E T
檢測SPA框架
15
> Ember.VERSION
< “3.2.2”
const elements = getAllAngularRootElements();
const version = elements[0].attributes[‘ng-version’];
const version = React.version
const version = Vue.version
B L U E P L A N E T
檢測Javascript函式庫
16
B L U E P L A N E T
檢測CSS樣式庫
17
B L U E P L A N E T
後端框架/套件留下來的痕跡
18
大家一看就知道這個網站是用什麼框架做的吧?
X-Power-By: ASP.NET
Server: Microsoft-IIS/4.5
X-AspNet-Version: 4.0.25
B L U E P L A N E T
案例 – Ruby on Rails
19
B L U E P L A N E T
資料庫檢測
20
B L U E P L A N E T
資料庫檢測 – MongoDB範例 (1)
MongoDB的預設鍵值為「_id」欄位,_id鍵值是使用雜湊演算法產生的12字元之十六進制字串,其演算法可以在文件裡看到,如下:
「507f1f77bcf86cd799439011」就是 ObjectId的一個例子。
21
B L U E P L A N E T
資料庫檢測 – MongoDB範例 (2)
22
GET users/:ID
PUT users, body = { id: ID }
GET users?id = ID
{
_id: ‘507f1f77bcf86cd799439011’,
username: ‘joe123’,
email: ‘joe123@my-email.com’,
role: ‘moderator’,
biography: ‘…’
}
B L U E P L A N E T
Ch.7 尋找應用系統架構的弱點
23
B L U E P L A N E T
偵查清單
24
B L U E P L A N E T
系統架構安全性
25
B L U E P L A N E T
案例 – XSS防護機制
。
26
import { DOMPurify } from ‘../utils/DOMPurify’
// 使用:https://github.com/cure53/DOMPurify
Const appendToDom = function (data, selector, unsafe = false) {
const element = document.querySelector(selector)
if (unsafe) {
element.innerHTML = DOMPurify.sanitize(data)
} else {
element.innerText = data
}
}
B L U E P L A N E T
多層式安全
27
B L U E P L A N E T
Ch.8 重點回顧
28
B L U E P L A N E T
第一回合重點回顧
29
B L U E P L A N E T
Thx for listening
30
B L U E P L A N E T