PHP gastenboek "gehacked", maar hoe?

Pagina: 1
Acties:
  • 14.045 views sinds 30-01-2008
  • Reageer

  • Wietse
  • Registratie: December 2000
  • Laatst online: 26-08 20:23

Wietse

¯¯¯¯¯

Topicstarter
[php n00b mode]
Ik kom net op mun site en zie dat alle post in het gastenboek weg zijn, en dat er nog maar 1 fake post staat van een gast die zegt mijn gastenboek gehacked te hebben. Nou kan dit best, want ik ben net met php begonnen, en dat script is niet van mij :D, nu zal ik wel ergens een (grote) fout hebben gemaakt kwa schrijf rechten van het gastenboek data bestand....mijn vraag is dus, hoe heeft deze "hacker" dit voor elkaar gekregen, en hoe kan ik het snel oplossen? (het gaat om http://www.wietsehage.nl/guestbook.php)
[/php n00b mode]

P.S. Die osama bin laden post is dus van die gast die mun gastenboek heeft gesloopt, hij heeft het trouwens voor elkaar gekregen om de oude berichten in een nieuw tekst bestand op de webserver te zetten... (this is your old guestbook.txt om precies te zijn :D)

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Ik ben bang dat we je op deze manier niet kunnen helpen. Dan moeten we de source kunnen zien. Maar ga dat hier niet posten, die 300 regels, want dan leest niemand het. Post of een klein stukje of een link oid.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Controleer zowiezo alle plekken waar je data van de users krijgt.

  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 18:23

Pelle

🚴‍♂️

en laat je eventuele mysql-password eruit! ;)

/edit
als je een lap code post dus

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op vrijdag 07 december 2001 16:36 schreef Pelle het volgende:
en laat je eventuele mysql-password eruit! ;)

/edit
als je een lap code post dus
LOL :)

  • Wietse
  • Registratie: December 2000
  • Laatst online: 26-08 20:23

Wietse

¯¯¯¯¯

Topicstarter
Op vrijdag 07 december 2001 16:36 schreef Pelle het volgende:
en laat je eventuele mysql-password eruit! ;)

/edit
als je een lap code post dus
Het is niet eens MySQL het is gewoon php met een simpel tekst filetje als data bestand (heb geen mysql server beschikbaar ergens...vandaar) en daar is het ook fout gegaan...ik zal ff die source posten strax

  • Robinski
  • Registratie: September 2000
  • Laatst online: 15-09 21:10

Robinski

A.K.A. RHarmsen

maak ff een file genaamd Source.php met
PHP:
1
2
3
<?
show_source("guestbook.php");
?>

O doe dit niet als er Password matteriaal in die source staat, want dan kan iedereen het lezen.

10xAXItec AC-265P = 2,650kWp @ SolarEdge SE2200 - PVOutput


  • Wietse
  • Registratie: December 2000
  • Laatst online: 26-08 20:23

Wietse

¯¯¯¯¯

Topicstarter
Ik heb trouwens meer het gevoel dat die gast mun ftp passwords heeft, want hij heeft de oude posts in een nieuw tekst bestand op mun server gezet (mun server staat meer voor ultragoedkoop ladot servertje)

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op vrijdag 07 december 2001 16:39 schreef ZeTt het volgende:
Ik heb trouwens meer het gevoel dat die gast mun ftp passwords heeft, want hij heeft de oude posts in een nieuw tekst bestand op mun server gezet (mun server staat meer voor ultragoedkoop ladot servertje)
Dan moet je de logfiles eens doorspitten :)
En is het geen php probleem, maar een ZeTt probleem :P

  • Wietse
  • Registratie: December 2000
  • Laatst online: 26-08 20:23

Wietse

¯¯¯¯¯

Topicstarter
Op vrijdag 07 december 2001 16:41 schreef Nielsz het volgende:

[..]

Dan moet je de logfiles eens doorspitten :)
En is het geen php probleem, maar een ZeTt probleem :P
Zoals ik zei, server staat bij Ladot :), ik krijg trouwens het vermoeden dat iemand ergens mijn ftp passwords vandaan heeft gehaalt... :r

  • Robinski
  • Registratie: September 2000
  • Laatst online: 15-09 21:10

Robinski

A.K.A. RHarmsen

als je gewoon ff de source laat zien,
dan weet je tenminste zeker of het wel/niet aan het script ligt

10xAXItec AC-265P = 2,650kWp @ SolarEdge SE2200 - PVOutput


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Het is deze, of niet?
Als je je admin password van de default hebt gehaald ;) dan vermoed ik dat het via je ftp gebeurd is.

Who is John Galt?


  • Wietse
  • Registratie: December 2000
  • Laatst online: 26-08 20:23

Wietse

¯¯¯¯¯

Topicstarter
Bij deze de source, ik kan me niet meer herinneren waar ik dit script vandaan heb, let iedergeval niet op de enorme troep en overbodige codes enz. ik heb me nog niet erg verdiept in php, vandaar :D

<?php

$emailEntryTo = "";

$emailEntryFrom = "guestbook@" . $SERVER_NAME;

$entriesPerPage = 35;

$datafile = "gb_entries.txt";

$hrImage = "";

require("header.inc.php");
require("footer.inc.php");

if (isset($HTTP_GET_VARS['add'])) {
if (isset($HTTP_POST_VARS['submitForm']))
addEntry();
else
displayForm();
}
else
displayEntries();

function displayForm($errorMessage = "") {
if ($errorMessage)
global $HTTP_POST_VARS;

echoHeader("Nieuw Bericht Plaatsen");

?>
<p class="navbarTop">
[<a href="guestbook.php">Bekijk berichten</a>]
<strong>Nieuw Bericht Plaatsen</strong>
</p>

Nieuw Bericht Plaatsen

<?php
// end of HTML

echo "<p>Vul in iedergeval de met <b>bold</b> aangegeven velden in ; de rest moet je zelf weten.\n";
echo "HTML codes worden uit de berichten gefilterd.</p>\n\n";

if ($errorMessage)
echo "<p class=\"new\"><strong>Error:</strong> " . $errorMessage . "</p>\n\n";

echo "<form action=\"guestbook.php?add=1\" method=\"post\">\n";
echo "<table>\n";

echoFormInputTag("Naam", "name", $HTTP_POST_VARS['name'], 30, true);
echoFormInputTag("E-mail", "email", $HTTP_POST_VARS['email'], 30);

echo "<tr>\n";
echo "\t<td></td>\n";
echo "\t<td>\n";
echo "\t\t(<input type=\"checkbox\" name=\"hideEmail\"";
if (!$errorMessage || isset($HTTP_POST_VARS['hideEmail']))
echo " checked=\"checked\"";
echo " /> e-mail adres is alleen te zien voor de beheerder van het gastenboek)\n";
echo "\t</td>\n";
echo "</tr>\n";

echoFormInputTag("Homepage", "homepage", $HTTP_POST_VARS['homepage'], 50);
echoFormInputTag("Stad", "city", $HTTP_POST_VARS['city'], 30);
echoFormInputTag("Land", "country", $HTTP_POST_VARS['country'], 30);

echo "<tr>\n";
echo "\t<td class=\"label\" style=\"vertical-align: top\">\n";
echo "\t\t<strong>Bericht:</strong>\n";
echo "\t</td>\n";
echo "\t<td>\n";
echo "\t\t<textarea name=\"message\" rows=\"6\" cols=\"45\">";
if (isset($HTTP_POST_VARS['message']))
echo $HTTP_POST_VARS['message'];
echo "</textarea>\n";
echo "\t</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "\t<td></td>\n";
echo "\t<td>\n";
echo "\t\t<input type=\"submit\" name=\"submitForm\" value=\"Verzenden\" />\n";
echo "\t\t<input type=\"submit\" name=\"resetForm\" value=\"Wissen\" />\n";
echo "\t</td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "</form>\n\n";

echo "<p class=\"navbarBottom\">\n";
echo "[<a href=\"guestbook.php\">Bekijk berichten</a>]\n";
echo "<strong>Sign guestbook</strong>\n</p>\n";

echoFooter();

if ($errorMessage)
exit;
}

function echoFormInputTag($label, $name, &$value, $size, $required = false) {
echo "<tr>\n";
echo "\t<td class=\"label\">\n";

if ($required)
echo "\t\t<strong>" . $label . ":</strong>\n";
else
echo "\t\t" . $label . ":\n";

echo "\t</td>\n";
echo "\t<td>\n";

echo "\t\t<input type=\"text\" name=\"" . $name . "\" value=\"";
if (isset($value))
echo $value;
echo "\" size=\"" . $size . "\" maxlength=\"" . $size * 4 . "\" />\n";

echo "\t</td>\n";
echo "</tr>\n";
}

function addEntry() {
// get config. and form vars from global scope
global $datafile, $emailEntryTo, $emailEntryFrom, $HTTP_POST_VARS;

// remove whitespace and slashes
while (list($key, $value) = each($HTTP_POST_VARS)) {
$HTTP_POST_VARS[$key] = stripSlashes(trim($value));
}

// check that required fields aren't empty
if ($HTTP_POST_VARS['name'] == "")
displayForm("<var>Name</var> field is empty.");
if ($HTTP_POST_VARS['message'] == "")
displayForm("<var>Message</var> field is empty.");

// check for basic errors in e-mail address
if ($HTTP_POST_VARS['email'] != ""
&& !validEmailAddr($HTTP_POST_VARS['email']))
displayForm("<var>" . $HTTP_POST_VARS['email']
. "</var> is not a valid e-mail address.");

// remove "http://" from homepage address
$HTTP_POST_VARS['homepage'] = str_replace("http://", "", $HTTP_POST_VARS['homepage']);

// get host name
$host = gethostbyaddr(getenv("REMOTE_ADDR"));

// get time and date added (in GMT)
$date = gmdate("Y-m-d @ H:i:s", time());

// open datafile for appending
@ $fp = fopen($datafile, "a");

if (!$fp)
displayForm("Failed to open datafile." . getFileIOErrorMsg());

// lock datafile
if (!flock($fp, LOCK_EX))
displayForm("Failed to lock datafile." . getFileIOErrorMsg());

// append new entry to datafile
fwrite($fp, $date . "|" . $host . "|"
. removeHTML($HTTP_POST_VARS['name']) . "|"
. removeHTML($HTTP_POST_VARS['email']) . "|"
. $HTTP_POST_VARS['hideEmail'] . "|"
. removeHTML($HTTP_POST_VARS['homepage']) . "|"
. removeHTML($HTTP_POST_VARS['city']) . "|"
. removeHTML($HTTP_POST_VARS['country']) . "|"
. removeHTML($HTTP_POST_VARS['message'], true) . "\n");

flock($fp, LOCK_UN);
fclose($fp);

if ($emailEntryTo != "") {
$subject = "New Entry: " . $HTTP_POST_VARS['name'];

$content = "At " . $date . " (GMT), " . $HTTP_POST_VARS['name']
. " (" . $host . ") wrote the following in your guestbook:\n\n"
. $HTTP_POST_VARS['message'] . "\n";

if ($HTTP_POST_VARS['city'] != "" || $HTTP_POST_VARS['country'] != ""
|| $HTTP_POST_VARS['homepage'] != "") {
$content .= "\n--\n";
if ($HTTP_POST_VARS['homepage'] != "")
$content .= "Homepage: http://" . $HTTP_POST_VARS['homepage'] . "\n";
if ($HTTP_POST_VARS['city'] != "" || $HTTP_POST_VARS['country'] != "") {
$content .= "From: ";
if ($HTTP_POST_VARS['city'] != "") {
$content .= $HTTP_POST_VARS['city'];
if ($HTTP_POST_VARS['country'] != "")
$content .= ", " . $HTTP_POST_VARS['country'];
}
else
$content .= $HTTP_POST_VARS['country'];
$content .= "\n";
}
}

$extraHeaders = "From: " . $emailEntryFrom;

// add Reply-To field if entry contains an e-mail address
if ($HTTP_POST_VARS['email'] != "")
$extraHeaders .= "\nReply-To: " . $HTTP_POST_VARS['email'];

@ mail($emailEntryTo, $subject, $content, $extraHeaders);
}

header("Location: guestbook.php");
}

function removeHTML($var, $allowNewline = false) {

$var = str_replace(chr(13), "", $var);

if ($allowNewline)
// replace linefeeds with HTML breaks
$var = str_replace(chr(10), "<br />", $var);
else
// remove linefeeds
$var = str_replace(chr(10), "", $var);

return $var;
}

function validEmailAddr($addr) {
$addr = strtolower($addr);

// split address into user/domain name and check that they aren't empty
$addr = explode("@", $addr);
if (sizeof($addr) != 2 || $addr[0] == "")
return false;

// split domain name into levels and check that there's at least two
$levels = explode(".", $addr[1]);
$sLevels = sizeof($levels);
if ($sLevels < 2)
return false;

$tld = $levels[$sLevels - 1];
if (strlen($tld) < 2 || (strlen($tld) > 3 && $tld != "arpa"
&& $tld != "info" && $tld != "name" && $tld != "aero"
&& $tld != "coop" && $tld != "museum"))
return false;

return true;
}

function displayEntries() {
global $emailEntryTo, $datafile, $entriesPerPage, $hrImage,
$HTTP_GET_VARS;

@ $entries = file($datafile);
if ($entries === false && file_exists($datafile))
$errorMessage = "<strong>Error: </strong>Failed to open datafile."
. getFileIOErrorMsg();
else if (empty($entries))
$errorMessage = "Guestbook is empty.";

if (!isset($errorMessage)) {
$sEntries = sizeof($entries);

// determine first entry on last page
if ($sEntries > $entriesPerPage) {
$startLastPage = $sEntries % $entriesPerPage;
if ($startLastPage)
$startLastPage = $sEntries - $startLastPage;
else
$startLastPage = $sEntries - $entriesPerPage;
}
else
$startLastPage = 0;

// display last page if $HTTP_GET_VARS['start'] not set
if (!isset($HTTP_GET_VARS['start']) || $HTTP_GET_VARS['start'] >= $sEntries)
$HTTP_GET_VARS['start'] = $startLastPage;
else if ($HTTP_GET_VARS['start'] < 0)
$HTTP_GET_VARS['start'] = 0;

// get entries to display
$entries = array_slice($entries, $HTTP_GET_VARS['start'], $entriesPerPage);

// reverse list to display newest on top
$entries = array_reverse($entries);
}

$pageTitle = 'Guestbook Entries';
if (!isset($errorMessage)) {
$pageTitle .= ' ' . ($HTTP_GET_VARS['start'] + 1) . ' - ';
if ($HTTP_GET_VARS['start'] + $entriesPerPage < $sEntries)
$pageTitle .= $HTTP_GET_VARS['start'] + $entriesPerPage;
else
$pageTitle .= $sEntries;
}
echoHeader($pageTitle);

echo "<p class=\"navbarTop\">\n";
echo "\n";
echo "[<a href=\"guestbook.php?add=1\">Nieuw Bericht Plaatsen</a>]\n</p>\n\n";

if (!isset($errorMessage) && $sEntries > $entriesPerPage)
printDisplayEntriesMenu($HTTP_GET_VARS['start'], $startLastPage, 0);

if (isset($errorMessage))
echo "Guestbook entries\n\n";
else {
}

if (isset($errorMessage))
echo "<p class=\"new\">" . $errorMessage . "</p>\n\n";
else {
$numEntriesToDisplay = sizeof($entries);

for ($entry = current($entries); $entry; $entry = next($entries)) {
list($date, $host, $name, $email, $hideEmail, $homepage, $city,
$country, $message) = explode("|", $entry);

echo "<span class=guestbookname>" . $name;
if ($city != "") {
echo " - " . $city;
if ($country != "")
echo ", " . $country;
}
else if ($country != "")
echo " - " . $country;
echo "</span>\n";

echo "<span class=guestbookdate>" . $date . " (GMT)";
if ($homepage != "")
echo "\n| <span class=guestbookhomepage><a href=\"http://" . $homepage . "\">homepage</a></span>";
if ($email != "" && !$hideEmail)
echo "\n| <a href=\"mailto:" . $email . "\">e-mail</a>";
echo "</span><br>\n";

$numEntriesToDisplay--;
echo "<span class=guestbookmessage>";
echo str_replace("<br />", "<br />\n", chop($message));
echo "</span><br>";

if ($numEntriesToDisplay) {
echo "";
if ($hrImage != "")
echo "<table width=100% border=0 cellpadding=0 cellspacing=0><td height=1 background=images/dotline.jpg></td></table>";
else
echo "<br><table width=100% border=0 cellpadding=0 cellspacing=0><td height=1 background=images/dotline.jpg></td></table><br>";
echo "\n\n";
}
}
}

if (!isset($errorMessage) && $sEntries > $entriesPerPage)
printDisplayEntriesMenu($HTTP_GET_VARS['start'], $startLastPage, 1);

echo "<p class=\"navbarBottom\">\n";
echo "\n";
echoFooter();
}

function printDisplayEntriesMenu($start, $startLastPage, $navbarPos) {
// get config. variable from global scope
global $entriesPerPage;

if ($navbarPos)
echo "<p class=\"navbarBottom\">\n";
else
echo "<p class=\"navbarTop\">\n";

if ($start > 0)
echo "[<a href=\"guestbook.php?start=0\">First</a>]\n";
else
echo "<strong>First</strong>\n";

if ($start - $entriesPerPage > 0)
echo "[<a href=\"guestbook.php?start="
. ($start - $entriesPerPage) . "\">Previous</a>]\n";

if ($start + $entriesPerPage < $startLastPage)
echo "[<a href=\"guestbook.php?start="
. ($start + $entriesPerPage) . "\">Next</a>]\n";

if ($start != $startLastPage)
echo "[<a href=\"guestbook.php?start="
. $startLastPage . "\">Last</a>]\n";
else
echo "<strong>Last</strong>\n";

echo "</p>\n\n";
}

function getFileIOErrorMsg() {
global $emailEntryTo;

$msg = "\nThis could be a result of multiple users trying to access"
. " the file simultaneously.\nPlease try again in a few seconds";

if ($emailEntryTo != "")
$msg .= ", and <a href=\"mailto:"
. $emailEntryTo . "\">notify me</a> if it still doesn't work.";
else
$msg .= ".";

return $msg;
}
?>

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op vrijdag 07 december 2001 17:11 schreef ZeTt het volgende:
Bij deze de source, ik kan me niet meer herinneren waar ik dit script vandaan heb, let iedergeval niet op de enorme troep en overbodige codes enz. ik heb me nog niet erg verdiept in php, vandaar :D
Zit er ook nog een admin gedeelte in?

Who is John Galt?


  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 14-09 20:56
Op vrijdag 07 december 2001 17:11 schreef ZeTt een lap PHP
ff tussen
[php]
en
[/ php]

tags (zonder ' ' dus)

/edit

FOUT, dat gastenboek!! Ik heb de achtergrondkleur op rood gezet door gewoon een body tag in mijn bericht te flikkeren.

sorry >:)

edit/

/edit2
BIGGRIN ROCKS :D :D :D
edit2/

Verbouwing


  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Wietse: mail me even het scriptje: kan ik er zondagmiddag even naar kijken.
Je kunt via CSpot aan m'n adres komen, maar ik geloof dat je het nog wel ergen hebt...

Name IRL= Koert vd Veer.... ;-)

Localhost, sweet localhost


  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 14-09 20:56
Linkie weg?? :'(

Verbouwing


  • Wietse
  • Registratie: December 2000
  • Laatst online: 26-08 20:23

Wietse

¯¯¯¯¯

Topicstarter
Op vrijdag 07 december 2001 17:42 schreef kvdveer het volgende:
Wietse: mail me even het scriptje: kan ik er zondagmiddag even naar kijken.
Je kunt via CSpot aan m'n adres komen, maar ik geloof dat je het nog wel ergen hebt...

Name IRL= Koert vd Veer.... ;-)
You rock :), thx, ik wilde je niet lastig vallen met mun n00b php praktijken :D ik zal die code ff mailen, alvast bedankt iedergeval :)

  • Wietse
  • Registratie: December 2000
  • Laatst online: 26-08 20:23

Wietse

¯¯¯¯¯

Topicstarter
Op vrijdag 07 december 2001 17:54 schreef DinoRaptor het volgende:
Linkie weg?? :'(
Heb ff mun site offline gegooit, en het script staat er nu zonder header en footer op, sorrie dat ie het ff niet deed :)

  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 14-09 20:56
Op vrijdag 07 december 2001 18:00 schreef ZeTt het volgende:

[..]

Heb ff mun site offline gegooit, en het script staat er nu zonder header en footer op, sorrie dat ie het ff niet deed :)
Had je 'm wel gezien??

Biggrin smilies & rode achtergronden zijn liev O+

Verbouwing


Verwijderd

tja.....maar wat is de reden dat je zite nog steeds niet online is? }:O
Pagina: 1