文件上傳繞過-getshell
目標(biāo)環(huán)境
Linux
jsp
黑名單
前言
通過讀取js文件,發(fā)現(xiàn)后臺。然后查看用戶名規(guī)則,進行爆破。最開始爆破一個,提示已過期,然后根據(jù)長度規(guī)則,特定去嘗試。爆破出一個。然后進行文件上傳
文件上傳過程
后綴黑名單繞過方式
boundary= ? ?----WebKitFormxxxxx

疑惑點
上傳圖片,正常訪問。
上傳html,正常訪問。
上傳圖片,改名為jsp繞過后無法訪問。
繼續(xù)測試,改名為jspx也是無法訪問。
圖片上傳處有兩個按鈕,一個是查看,一個是下載。
jsp訪問是404
但是可以正常下載。這里猜測應(yīng)該是上傳成功,但是存在內(nèi)容檢查。
內(nèi)容檢測繞過
過程1
上傳圖片,改名jsp ---404
這個時候就很疑惑。不知道為啥會這樣,
難道是后綴和Content-Type不匹配的問題。
jpg:
image/jpeg
jsp:
application/octet-stream
嘗試修改Content-Type,上傳成功,下載成功。訪問404
過程2
沒有遇到過,不知為啥會這樣,陷入沉思。
難道是內(nèi)容+Content-Type+后綴匹配才能正常解析訪問。
繼續(xù)fuzz
filename:jsp
Content-Type:application/octet-stream
內(nèi)容:<% out.println ("helloworld"); %>
上傳成功。下載正常,訪問404
過程3
感覺沒有思路,沉思一會,想起來目標(biāo)一定是有防護的。
后綴一定是繞過去。那么有問題的一定是內(nèi)容檢測。
想起來,以前jsp內(nèi)容繞過的時候,一般都會對jsp中的%進行檢測。
修改一下上傳內(nèi)容
filename:jsp
Content-Type:application/octet-stream
內(nèi)容:out.println ("helloworld");//hello

激動,終于可以訪問jsp。離成功又近一步。
過程4
心里想著,只要上傳不帶%%的jsp馬就可以了。
找到之前不帶%號的馬,成功上傳。激動了。
下載正常,訪問404!這。。。。
難道是不免殺的問題。這里難過了。自己不會寫這種不帶%的馬子,這可怎么辦。
繼續(xù)思考:
是不是函數(shù)被查殺。fuzz一下可以用函數(shù)。
java中,當(dāng)然首選RunTime.getRuntime().exec()命令執(zhí)行試試。
又一次上傳
filename:jsp
Content-Type:application/octet-stream
內(nèi)容:
<jsp:scriptlet>
Runtime.getRuntime().exec("ping dnslog");
<jsp:scriptlet>
嘗試dnslog是不是可以收到。發(fā)現(xiàn)可以收到。

目標(biāo)又是linux是不是就可以反彈了。利用bash。卒。
過程5
看到路了,不過好像又不是路。知識不夠,不知道怎么繼續(xù)下一步了。
沉思一會,還是繼續(xù)從馬的方向入手。一定是可以繞過的。只不過需要找到目標(biāo)查殺方式。
不過難點是利用jsp:scriptlet,對這個更是不懂?,F(xiàn)學(xué)可能不夠用,放一下。
繼續(xù)fuzz內(nèi)容:
在一次無意中測試,發(fā)現(xiàn)帶%號也可以正常訪問。一機靈。
原來不是%檢測。那就方便多了。
進行jsp免殺馬的測試,發(fā)現(xiàn)正常本地可以免殺的馬,上傳之后就404.難道是內(nèi)容長度太長了。
小馬都無法訪問。
繼續(xù)思考,之前上傳成功是利用jsp:scriptlet,然后內(nèi)容是利用unicode編碼才可以成功。
雖然感覺不是對%號檢測,但是內(nèi)容用unicode應(yīng)該可以繞過。
過程6-成功
ps
JSP Unicode解析特性
在JSP文件中,在除開頭部聲明處,其他的代碼內(nèi)容均可以使用Unicode代碼進行替換
https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-UnicodeEscape
免殺馬制作:
先正常的免殺馬,繞過進行unicode編碼。這里需要先看一下上面unicode特性。
然后利用了Eclipse中編碼。編碼不對會報錯。很方便。

編碼后上傳,下載正常,訪問正常。命令執(zhí)行嘗試。

但是利用webshell進行連接的時候,發(fā)現(xiàn)無法連接。有點好奇。
因為習(xí)慣,馬生成的時候,本地都會繼續(xù)測試,本地都是可以正常連接的。
思考了一下,可能是流量特征,用的都是原生的。
這里看百度改了一下webshell管理工具的一些特征。發(fā)現(xiàn)也無法連接。
不知道是不是unicode編碼的問題。
后續(xù)
免殺馬不好整,這里測試了一下哥斯拉和冰蝎馬的unicode編碼后。
發(fā)現(xiàn)哥斯拉unicode編碼后,也可以上傳成功,可以訪問,也是存在連接不了的問題。(未解決)
整體思路
1.根據(jù)用戶名規(guī)則進行爆破。
2.文件上傳后綴+內(nèi)容繞過。
3.耗時一天~~~~
更多精彩在這里
