有没有人可以给我一个非常基本的asp.net Web应用程序示例,它容易受到padding oracle攻击。
答案 0 :(得分:1)
尝试以下两个站点中的步骤来测试您的站点。
http://blog.dotsmart.net/2010/09/22/asp-net-padding-oracle-detector/
http://www.troyhunt.com/2010/09/fear-uncertainty-and-and-padding-oracle.html
希望有所帮助
答案 1 :(得分:0)
我知道这是一个很晚的答案,但也许有人会在寻找此信息。
旧版本的ASP.NET容易受到填充Oracle攻击。仍然可以通过一些调整来强制执行“旧的”行为。我在blog上详细介绍了它们,示例代码在GitHub上。
我们将攻击VIEWSTATE字段。首先,您需要禁用ViewState签名。为此,请确保在web.config文件中具有以下设置:
<appSettings>
<add key="aspnet:UseLegacyMachineKeyEncryption" value="true" />
</appSettings>
还有一个易受填充Oracle攻击的示例.ashx文件:
<%@ WebHandler Language="C#" Class="EncryptionHandler" %>
using System;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.Security;
using System.Text;
public class EncryptionHandler : IHttpHandler
{
static readonly byte[] secret = Encoding.UTF8.GetBytes("Some text to break.");
public void ProcessRequest(HttpContext context)
{
var viewState = context.Request.Form["VIEWSTATE"];
if (viewState == null) {
viewState = MachineKey.Encode(secret, MachineKeyProtection.Encryption);
context.Response.ContentType = "text/html";
context.Response.Write("<!doctype html><html><form action=\"/EncryptionHandler.ashx\" method=\"POST\">" +
"<input type=\"hidden\" name=\"VIEWSTATE\" value=\"" + viewState + "\" />" +
"<input type=\"submit\" value=\"Test\" /></form></html>");
return;
}
var v = MachineKey.Decode(viewState, MachineKeyProtection.Encryption);
context.Response.ContentType = "text/plain";
if (v.SequenceEqual(secret)) {
context.Response.Write("I know the secret");
} else {
context.Response.Write("Something is wrong with my secret.");
}
}
public bool IsReusable {
get {
return false;
}
}
}
现在,根据HTTP代码(密码无效时为HTTP 500),您可以尝试攻击该网站(如here所述)。