ASP-Nuke : RC1, RC2 ******************* Produit : ********* ASP-Nuke http://www.asp-nuke.com Versions : ********** RC1, 27 mars 2002 RC2, 03 avril 2002 Date : ****** 28 mars, 07 avril, 08 avril 2002 =p Problemes : *********** RC1 & RC2 : - Accès aux comptes users/admins - Cross Site Scripting - Path Disclosure uniquement RC1 : - Problèmes dans les filtres anti-html (balise [img][/img]) Developpement : *************** ASP-Nuke est un service web qui propose, tout comme PHP-Nuke, des editions de news, des sondages, des forums, etc... Plus d'infos : http://www.asp-nuke.com/comments.asp?id=2 Contournement des filtres ~~~~~~~~~~~~~~~~~~~~~~~~~ Commencons par les problemes anti-tags htmls de la version RC1. Je tiens à preciser que ces bugs ont été corrigés dans l'heure. Il nous est donc interdit de poster du html dans les forums, que ce soit une balise , , Le deuxieme trou xss se trouve dans l'option "Preview" d'ASP-Nuke. Elle permet donc de donner un aperçut de ce que sera le message que l'on veut envoyer sur les forums. L'url est http://www.site.com/Post.asp. Si le message est "hop", on verra dans la source du preview : On va donc utiliser un petit 'truc' qui va refermer la balise puis ecrire un code. Il faudra donc envoyer comme message : "> et il le script sera executé; la source sera : "> et le "> final sera pris pour du texte. Il reste enfin le xss qui permet de realiser un 'profil piégé'. Pour acceder au profil d'une personne, il faudra se rendre à l'url http://www.website.com/profile.asp?id=lepseudodelapersonne. Dans ce profil, on a entre autre la possibilité de mettre l'url de son site. a l'affichage du profil, on pourra voir dans la source : http://www.sonsiteperso.com Il suffit donc de changer sur son profil l'adresse de son site web en par exemple : "> Ce qui executera le script à chaque visite du profil. La source sera alors : target="_blank">"> Ce qui est alors pris comme balises html est : et comme texte (hyperliens) : target="_blank">"> Si ça ne marche pas, il se peut que la case "profil visible" ne soit pas cochée. Les cookies : accès aux comptes et Path disclosure ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Viennent maintenant differents problemes liés aux cookies. Quand on se logge, des cookies sont envoyés au site, dont role, email (contenant l'email de l'user),pseudo (contenant le pseudo de l'user),... Voyons une partie du code de /includes/signup-inc.asp : ----------------------------------------------------------------------------------- Sub DoSignup() If Request.Form("pseudo") <> "" Then If AddAccount(Request.Form("pseudo"), Request.Form("mdp"), Request.Form("email")) Then sInfoPage = LANG_ACCOUNT_CREATED Response.Cookies("pseudo") = Request.Form("pseudo") sPseudo = Request.Form("pseudo") Else sInfoPage = LANG_ACCOUNT_ERROR End If End If End Sub ----------------------------------------------------------------------------------- On voit ici que le pseudo de l'user est envoyé par cookies si le compte a bien été créé : Response.Cookies("pseudo") = Request.Form("pseudo") Voyons maintenant une partie du code de /includes/authentication-inc.asp : ----------------------------------------------------------------------------------- Function Authentication(ByRef sLogin, ByRef sMyPassword, ByVal bKeepalive) Dim oCn, oRs, rSQL Authentication = False // On donne une valeur par defaut à Authentication rSQL = "SELECT uLogin, uEmail, uPassword, uRole FROM users WHERE uLogin LIKE '" & SQLEncrypt(sLogin) & "'" Set oCn = DBConnexion(DB_MAIN) Set oRs = DBRecordSet(oCn, rSQL) // on envois une requete sql avec les données entrées If Not oRs.EOF Then // si il n'y a pas d'erreur niveau sql... If oRs(2) = sMyPassword Then // si le password est le bon Authentication = True // Autentication vaut true Response.Cookies("pseudo") = oRs(0) // on envois le pseudo par cookie Response.Cookies("email") = oRs(1) // on envois l'email par cookie If IsNull(oRs(3)) Then Response.Cookies("role") = "0" Else Response.Cookies("role") = oRs(3) End If // on donne une valeur au cookie role ----------------------------------------------------------------------------------- Stupeur !! ASP-Nuke authentifie les users/admins uniquement avec le cookie "pseudo" . Il suffit donc d'envoyer un cookie avec comme nom "pseudo" et comme valeur le pseudo d'un user sur la page http://www.website.com/forum/MyAccount.asp pour pouvoir rentrer dans son compte. Si le pseudo envoyé est un pseudo admin, on aura les droits admin. Voyons maintenant ce qui se passe si on envois un cookie "pseudo" contenant un pseudo n'existant pas dans la base de donnée. Tout d'abord, on pourra voir dans la liste des membres connectés : Pseudo Date admin 07/04/2002 13:41:50 TeSt 07/04/2002 14:15:21 user 07/04/2002 14:17:06 Si on essaye d'ecrire un message, l'option preview fonctionnera. Imaginons un cookie pseudo=TeSt, on pourra voir dans preview : "Auteur : TeSt". Si maintenant on essaye de poster ce message, on pourra voir s'afficher la faille Path Discolsure disant : ----------------------------------------------------------------------- Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][Pilote ODBC Microsoft Access] Vous ne pouvez pas ajouter ou modifier un enregistrement car l'enregistrement associé est requis dans la table 'Users'. C:\WEBSITEPATH\FORUM\INCLUDES\../../includes/database-inc.asp, line 40 ----------------------------------------------------------------------- Une autre faille Path Disclosure dans le même fichier mais n'ayant rien a voir avec les cookies : http://www.website.com/forum/Post.asp?forum=1§ion=1&post=1&myAction=post Patch : ******* Dernieres versions Greetz : ******** Le créateur d'ASP-Nuke. Credits : ********* frog-m@n (leseulfrog@hotmail.com)