@yzddmr6
@zsxq: websafe
背景
前幾天有個(gè)小伙伴做項(xiàng)目的時(shí)候遇到一個(gè)問(wèn)題來(lái)問(wèn)我,大概情況如下:
- jsp的站,可以任意文件上傳
- 上傳jsp會(huì)把<%中的<給轉(zhuǎn)義掉
- 上傳jspx會(huì)把<jsp:scriptlet>到</jsp:scriptlet>中的內(nèi)容替換為空
問(wèn)有什么突破辦法?

image.png

image.png
當(dāng)時(shí)研究了一下后jsp和jspx各給了一個(gè)解決方案,后來(lái)發(fā)到星球里后@hosch3n師傅又提出了一種新的方案,tql

image.png
解決方案
其實(shí)問(wèn)題等價(jià)于:
- jsp不使用<% %>標(biāo)簽如何執(zhí)行命令
- jspx不使用<jsp:scriptlet> </jsp:scriptlet>如何執(zhí)行命令
jsp利用EL表達(dá)式繞過(guò)
jsp是默認(rèn)解析el表達(dá)式的,并且在沒(méi)有jsp標(biāo)簽的情況下也可以直接執(zhí)行,這樣就可以繞過(guò)jsp的限制。
星球里面@Gh0stFx也提到了這一點(diǎn)

image.png

image.png
jspx利用命名空間繞過(guò)
因?yàn)閖spx實(shí)際上是jsp的xml寫(xiě)法,所以繼承了xml的所有特性,例如cdata跟html實(shí)體編碼等,同樣也繼承了命名空間的特性。
https://www.runoob.com/xml/xml-namespaces.html

image.png
在<jsp:scriptlet>這個(gè)標(biāo)簽中,jsp就是默認(rèn)的命名空間,但是實(shí)際上可以隨意替換成其他名字

image.png

image.png
這樣就繞過(guò)了對(duì)<jsp:scriptlet>的過(guò)濾
jspx利用<jsp:expression>繞過(guò)
在jsp中可以利用表達(dá)式繞過(guò),那么jspx中同樣也可以,以下是jsp跟jspx語(yǔ)法的對(duì)照:

image.png
這個(gè)方法是@hosch3n師傅提出來(lái)的,把表達(dá)式寫(xiě)到j(luò)spx中,同樣可以達(dá)到執(zhí)行命令的目的

image.png

image.png