Exploitable C# Fonctions
Cette question est similaire à Exploitable Fonctions PHP.
Entachée proviennent les données de l'utilisateur, ou plus précisément d'un attaquant. Lorsqu'un entachée variable atteint un évier de fonction, alors vous avez une vulnérabilité. Par exemple une fonction qui exécute une requête sql est un évier, et GET/POST variables sont des sources de souillure.
Ce sont tous de l'évier de fonctions en C#? Je suis à la recherche pour les fonctions qui présentent une vulnérabilité ou logiciel de faiblesse. Je suis particulièrement intéressé par des vulnérabilités d'Exécution de Code à Distance. Existe-il des classes entières/bibliothèques qui contiennent méchant fonctionnellement qu'un pirate souhaite influencer? Comment les gens accidentellement rendre dangereux de code C#?
- C'est un peu vague. Beaucoup de le danger vient des applications en cours d'exécution sous une confiance totale au lieu d'une baisse du niveau de confiance; le bas de la confiance, de plus il arrive à faire quelque chose de malveillant.
- J'ai aimé le php en question, je pense que cela s'applique à C# très bien.
- wow, le logiciel faiblesse lien est un huuuuge page.
- yep a fallu un certain temps pour mettre ensemble 😉
- Que voulez-vous attendre ici? Une énorme liste de fonctions? Je ne suis pas sûr de savoir comment ce qui est utile... Aussi, pour être pédant, on parle de la .Net Bibliothèque de classes de Base, ou peut-être Asp.Net, pas du C# fonctions (je ne suis pas sûr qu'il y a "C# fonctions").
- Mon post pour les fonctions de PHP a été très utile et plus que juste un idiot liste. Il y a des familles de fonctions, et non intentionnelle de la fonctionnalité.
- Pour ajouter à @Kobi remarques, pas de réponse ci-dessous est en fait liée à C# comme langage. Elles s'appliquent à tous probablement .NET languages (VB, F#, etc.). Vous devez creuser la question de la BCL ou .NET À MON HUMBLE AVIS.
Vous devez vous connecter pour publier un commentaire.
Sur le web en fonction de côté des choses, C# (et, plus généralement, ASP.NET) est souvent vulnérables à la suivante (éléments énumérés par Top 10 OWASP 2013). Je me rends compte que vous étaient principalement intéressés dans l'évier fonctions, dont je couvre certains, cependant, vous ne demandez comment les gens accidentellement rendre dangereux de code C# alors j'espère que je vous ai donné un aperçu ici.
A1-Injection
Injection SQL
Générer des requêtes par la concaténation de chaîne.
Cela peut souvent être résolu par les requêtes paramétrées, mais si vous utilisez un
IN
condition n'est actuellement pas possible sans la concaténation de chaîne.LDAP Injection
Code comme
peut faire la demande vulnérables. Plus d'informations ici.
OS de Commande d'Injection
Ce code est vulnérable à l'injection de commandes parce que le deuxième paramètre à
Process.Start
pouvez avoir plus de commandes passées à l'aide de la&
caractère par lots de plusieurs commandespar exemple
foldername && ipconfig
A2-Broken d'Authentification et de Gestion de Session
Signe
Les Formulaires par défaut l'Authentification SignOut méthode ne permet pas de mettre à jour quelque chose côté serveur, permettant une capture d'auth jeton a continué à être utilisé.
À l'aide de l'État de Session pour l'Authentification
Un fixation de session vulnérabilité pourrait être présent si l'utilisateur a utilisé des l'état de session pour l'authentification.
A3-Cross-Site Scripting (XSS)
Response.Write
(et le raccourci<%= =>
) sont vulnérables par défaut, à moins que le développeur s'est souvenu de HTML codent pour la sortie. La plus récente raccourci<%:
code HTML par défaut, bien que certains développeurs peuvent l'utiliser pour insérer des valeurs dans JavaScript où ils peuvent encore être échappé par un attaquant. Même en utilisant le moderne Moteur de rasoir il est difficile d'obtenir ce droit:ASP.NET par défaut permet La Demande De Validation, ce qui permet de bloquer toute entrée de cookies, la chaîne de requête et de publier des données qui pourraient être potentiellement malveillantes (par exemple, les balises HTML). Cela semble bien se débrouiller avec les commentaires à venir par le biais de l'app en particulier, mais si il est contenu dans la base de données qui est inséré à partir d'autres sources, comme à partir d'une application écrite en utilisant d'autres technologies, il est possible qu'un code de script malveillant pourrait encore être de sortie. Une autre faiblesse est l'endroit où les données sont insérées dans une valeur d'attribut. par exemple,
Cela peut être exploité sans déclencher la Validation de la Demande:
Si
alt
estpuis cela rend
Dans les anciennes versions de .NET que c'était un peu un mine-field pour un développeur de s'assurer que leur production a été correctement encodé à l'aide de certains de la valeur par défaut des contrôles web.
par exemple, de ne pas être vulnérable:
vulnérables:
A4-Directe Non Sécurisée À Un Objet De Références
Modèle MVC liaison peut permettre l'ajout de paramètres pour publier des données à mapper sur le modèle de données. Cela peut se produire involontairement que le développeur n'a pas réalisé qu'un utilisateur malveillant peut modifier les paramètres de cette manière. Le
Bind
attribut peut être utilisé pour prévenir ce.A5-Mauvaise Configuration De Sécurité
Il existe de nombreuses options de configuration qui permettent d'affaiblir la sécurité d'une application. Par exemple en définissant
customErrors
àOn
ou de l'activation de la trace.Lecteurs tels que ASafaWeb pouvez vérifier cette commune erreurs de configuration.
A6-Les Données Sensibles De L'Exposition
Défaut De Hachage
Le mot de passe par défaut de hachage méthodes ASP.NET sont parfois pas le meilleur.
A7-Absence De Niveau De La Fonction De Contrôle D'Accès
Échec de Restreindre l'Accès URL
Dans le pipeline intégré mode .NET pouvez voir toutes les requêtes et les poignées peuvent autoriser chaque demande, même pour des non .Montant NET des ressources (par exemple,
.js
et images). Toutefois, si l'application que je fonctionne en mode classique, .NET ne voit que les demandes de fichiers tels que des.aspx
de sorte que les autres fichiers peuvent être accidentellement non garantis. Voir cette réponse pour plus de détails sur les différences.par exemple
www.example.com/images/private_photograph_user1.jpg
est plus susceptibles d'être vulnérables à une application qui s'exécute en mode classique, bien qu'il existe solutions de contournement.A8-Cross-Site Request Forgery (CSRF)
Bien que l'héritage des formulaires web les applications sont généralement plus sûr contre les CSRF en raison de l'attaquant de forger l'État d'Affichage et Événement De Validation valeurs, de nouvelles applications MVC pourraient être vulnérables à moins que le développeur a mis en œuvre manuellement anti faux jetons. Notez que je ne dis pas que les formulaires web n'est pas vulnérable, juste que c'est plus difficile que de simplement en passant sur quelques paramètres de base - il y a des correctifs si, comme l'intégration de l'utilisateur de la clé dans l'État d'Affichage de la valeur.
A10-non validée - les Redirections et les Transmet
L'ajout de code comme
feront de votre site vulnérables. L'attaque pourrait être initiée par l'envoi d'un e-mail d'hameçonnage à un utilisateur contenant un lien. Si l'utilisateur est vigilant ils peuvent avoir vérifié le domaine de l'URL avant de cliquer. Cependant, comme le domaine correspondent à votre domaine qui l'utilisateur fait confiance, ils vont cliquer sur le lien, ignorant que la page redirige l'utilisateur vers l'attaquant du domaine.
La Validation devrait avoir lieu sur
Url
pour s'assurer qu'il soit un parent, d'un permis d'URL ou d'une URL absolue pour celui de votre permis de domaines et de pages. Vous pouvez consulter quelqu'un n'est pas rediriger vos utilisateurs à/Logout.aspx
par exemple. Bien qu'il y a peut-être rien n'empêche un attaquant de reliant directement àhttp://www.example.com/Logout.aspx
, ils pourraient utiliser la redirection de cacher l'URL de sorte qu'il est plus difficile pour un utilisateur de comprendre quelle page doit être accessible (http://www.example.com/Redirect.aspx?Url=%2f%4c%6f%67%6f%75%74%2e%61%73%70%78
).Autres
L'autre OWASP catégories sont les suivantes:
dont je ne pense pas du tout à l'esprit qui sont spécifiques à C#/ASP.NET. Je vais mettre à jour ma réponse si je pense à tout (si vous pensez qu'ils sont pertinentes à votre question).
Tout ce qui utilise des expressions régulières (en particulier RegularExpressionValidator). Pour voir cela, exécutez une RegularExpressionValidator avec les regex
^(\d+)+$
et de lui donner 30 chiffres et un caractère alpha pour la validation.Certains postes:
Cela s'appelle une Expression Régulière attaque de Déni de Service, et il peut apporter un site web pour ses genoux.
Processus.Démarrer
est le premier à venir à l'esprit.Je suis sûr que
WindowsIdentity
et beaucoup deSystem.Sécurité
peut également être utilisé pour le mal.Bien sûr, il y a des attaques par injection SQL, mais je ne pense pas que c'est ce que tu veux dire (même si l'exécution à distance peut se produire par le biais de SQL Server).
À part bien évidemment
Process.Start()
déjà mentionné, je peux voir un couple de façons de le potentiel d'une exploitation indirecte.CreateProcess()
et autres joyeusetés.Assembly.Load()
et autres surcharges. Si un compromis de montage pour le système et chargé.C'est tout ce qui me vient à l'esprit maintenant.
De l'OMI: Le n ° 1 exploitables fonctions, de l'innocence de la recherche, mais très dangereusement lorsque utilisé sans pensée.
Dans ASP.Net
Response.Write
ou le raccourci:Dans ADO.Net:
string
+
opérateur:var sql = "SELECT * FROM table WHERE name = '" + searchTermFromUser + "'"
N'importe quel morceau de données que vous obtenez de l'utilisateur (ou de toute autre source externe) et de passer à un autre système ou un autre utilisateur est un potentiel à exploiter.
Si vous obtenez une chaîne à partir de l'utilisateur et de l'afficher à un autre utilisateur sans l'aide HtmlEncode c'est un potentiel à exploiter.
Si vous obtenez une chaîne à partir de l'utilisateur et de l'utiliser pour construire SQL c'est un potentiel d'injection SQL.
Si vous obtenez une chaîne à partir de l'utilisateur et de l'utiliser pour un contrat d'un nom de fichier pour le Processus.Démarrer ou l'Assemblage.La charge c'est une exécution à distance de la vulnérabilité
Vous obtenez le point, le danger vient de l'utilisation unsanitized de données, si vous ne laissez jamais passer une entrée d'utilisateur pour le système externe sans désinfection (exemple: HtmlEncode) ou à l'aide de l'injection de sécurité interfaces (exemple: paramètres SQL) vous sont relativement sans danger - la minute que vous oublier de désinfecter quelque chose de plus innocent méthode peut devenir un problème de sécurité.
Remarque: les cookies, les en-têtes html et tout ce qui passe sur un réseau, également des données sur l'utilisateur, dans la plupart des cas, même les données dans votre base de données sont des données de l'utilisateur.
Beaucoup de choses dans la System.Net, System.XML, Système.IO, (tout ce qui prend une URI et/ou le chemin du fichier et traite de la ressource identifier) du Système.La Réflexion, Système.Sécurité, Système.Web, Système.De données et de Système.Le filetage des espaces de noms peuvent être dangereux, car ils peuvent être utilisés pour faire de mauvaises choses qui vont plus loin que simplement gâcher l'exécution en cours. Tellement qu'il serait temps d'essayer d'identifier chaque.
Bien sûr, chaque méthode dans tous les assemblys tiers devra supposé être dangereux jusqu'à ce que montre le contraire. Plus de temps encore.
Je ne pense qu'il est particulièrement à l'approche fructueuse. La production d'une liste de contrôle des tâches ne fonctionne vraiment avec un nombre limité de bibliothèque, ou avec une grande langue, où beaucoup de ce qui serait dans une bibliothèque avec un langage comme C# est le langage lui-même.
Il y a quelques classiquement dangereux exemples comme
Process.Start()
ou quoi que ce soit qui exécute un autre processus directement, mais ils sont équilibrés en étant bien évidemment dangereux. Même relativement irresponsable et incompétent codeur peut prendre soin quand ils l'utilisent, tout en laissant de données qui va à d'autres méthodes unsanitised.Que l'assainissement des données est l'un des plus fructueux chose à regarder que toute liste de fonctions. Données validées pour supprimer manifestement inexact d'entrée (qui peut être due à une attaque, ou peut-être simplement une erreur) et il est codé et s'est échappé dans la façon appropriée pour une couche donnée (il y a trop de parler de "dangereux" séquences de caractères,
'
jamais fait de mal à personne, c'est'
pas correctement échappé pour SQL, qui peut faire mal quand c'est en effet à un SQL couche - le travail nécessaire pour s'assurer que les données sont là correctement est la même que pour éviter les exploits). Ce sont les couches au cours de laquelle la communication avec quelque chose en dehors de code solide. Sont des Uri construit à l'aide sans examen d'entrée, par exemple - si non, vous pouvez désactiver certaines des plus couramment utilisé System.Net et System.XML méthodes dans les trous.À l'aide de n'importe quel type de code non sécurisé peut causer des problèmes tels que les pointeurs. Microsoft a fourni un bon article sur le code unsafe ici: http://msdn.microsoft.com/en-us/library/aa288474(SV.71).aspx
Réflexion.Émettre et CodeDom
Modifier:
De plug-ins permettant ou des bibliothèques tierces qui utilise le filetage peut apporter l'ensemble de votre application vers le bas, sauf si vous chargez ces bibliothèques/plugins dans un autre domaine d'application.
Probablement la moitié le cadre contient de très effrayant fonctions. Je pense moi-même que
File.WriteAllText()
est très effrayant car il peut écraser n'importe quel fichier de l'utilisateur courant a accès.Une approche différente à cette question serait de savoir comment vous pouvez gérer la sécurité. L'article à http://ondotnet.com/pub/a/dotnet/2003/02/18/permissions.html contient une description de base concernant l' .NET, système de sécurité, avec le Système.De sécurité.Les autorisations espace de noms qui contient toutes les autorisations .NET met à la disposition des. Vous pouvez également jeter un oeil à http://msdn.microsoft.com/en-us/library/5ba4k1c5.aspx pour plus d'informations.
En bref, .NET vous permet de limiter les autorisations d'un processus peut avoir, par exemple, de nier les méthodes qui changent les données sur le disque. Vous pouvez ensuite vérifier les autorisations et de la loi si le processus a ou pas.
même une simple comparaison de chaînes de caractères qui peut être un problème.
Prendre un coup d'oeil à la exemple. Assez facile à manquer
J'ai vu du code, où l'utilisateur peut définir le nom et les paramètres d'un appel de fonction dans une base de données. Le système serait alors exécuter la fonction nommée par le biais de la Réflexion, sans vérifier quoi que ce soit ...