Пример приложения asp.net, уязвимого для атаки Oracle Padding? - PullRequest
3 голосов
/ 21 октября 2010

Кто-нибудь может привести мне очень простой пример веб-приложения asp.net, которое уязвимо для атаки оракула-отступа.

Ответы [ 2 ]

1 голос
/ 31 октября 2011

Попробуйте выполнить шаги на следующих двух сайтах, чтобы протестировать свой сайт.

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

Надеюсь, что поможет

0 голосов
/ 24 января 2019

Я знаю, что ответ очень поздний, но, возможно, кто-то будет искать эту информацию.

Старые версии ASP.NET были уязвимы для атаки Oracle Padding. По-прежнему возможно применить «старое» поведение с помощью некоторых настроек. Я подробно описал их в своем блоге , а пример кода находится на GitHub .

Мы будем атаковать поле VIEWSTATE. Во-первых, вам нужно отключить подпись ViewState. Для этого убедитесь, что у вас есть следующий параметр в файле web.config:

<appSettings>
  <add key="aspnet:UseLegacyMachineKeyEncryption" value="true" />
</appSettings>

И пример файла .ashx, уязвимого для атаки Oracle Padding:

<%@ 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, когда шифр недействителен), вы можете попытаться атаковать сайт (как описано здесь ).

...