Ik zit nu al 2 dagen te klooien met dezelfde bug....
eerst zal ik uitleggen wat er gebeurt:
www.cj-multisoft.nl/admin/list.php
die kijkt eerst of er is ingelogged, dat is niet zo, en dus word je geredirect naar www.cj-multisoft.nl/users/login.php
so far so good
daar kan je inloggen onder de naam lll en met pass lll .
Dat werkt ook, hij ziet dat je in de database staat en geeft je een stel cookies.
maar dan... Als je in de bron kijkt van www.cj-multisoft.nl/users/login.php (na het inloggen) zie je dat de link netjes naar www.cj-multisoft.nl/admin/list.php toe staat, maar als je er op klikt, ga je dus weer terug naar de inlogpagina
....
Dan heb ik hier de belangrijkste sourcecodes:
list.php
check.php
de login.php werkt wel goed met deze check.php (kijkt niet of het een admin is).
(als je dat zelf wil testen moet je maar eens naar www.cj-multisoft.nl/users/edit.php gaan en dan ook met lll / lll inloggen.)
hier nog een deel van de loginpagina:
Ziet iemand wat ik hier fout doe ?
sorry voor de layout, heb zoveelmogelijk de regels ingekort.
eerst zal ik uitleggen wat er gebeurt:
www.cj-multisoft.nl/admin/list.php
die kijkt eerst of er is ingelogged, dat is niet zo, en dus word je geredirect naar www.cj-multisoft.nl/users/login.php
so far so good
daar kan je inloggen onder de naam lll en met pass lll .
Dat werkt ook, hij ziet dat je in de database staat en geeft je een stel cookies.
maar dan... Als je in de bron kijkt van www.cj-multisoft.nl/users/login.php (na het inloggen) zie je dat de link netjes naar www.cj-multisoft.nl/admin/list.php toe staat, maar als je er op klikt, ga je dus weer terug naar de inlogpagina
Dan heb ik hier de belangrijkste sourcecodes:
list.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| <?php require("../includes/connect.php"); require("../admin/check.php"); $result = (mysql_query("SELECT ID, voornaam, tussenvoegsels, achternaam, inschrijfdatum FROM users order by ID")); //kijk of de database leeg is if (mysql_num_rows($result) == 0) { echo "Nog geen gebruikers gevonden."; } //gooi het op het scherm else { echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"1\" width=\"600\">\n"; echo "<tr><td>Naam</td><td>lid sinds</td><td>Show/Edit info</td></tr>"; while ($row = mysql_fetch_object($result)) { echo "<tr> <td>$row->voornaam $row->tussenvoegsels $row->achternaam</td><td>$row->inschrijfdatum</td><td> <a href=\"http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']). "/edit.php?ID=$row->ID\">[X]</a></td></tr>"; } echo "</table>"; } ?> |
check.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| <?php require("../includes/config.php"); //kijk of het logincookie bestaat. if ($HTTP_COOKIE_VARS["login"] != yes){ //nee? dan direct naar login pagina sturen. header("Location: http://".$_SERVER['HTTP_HOST']."/users/login.php? ref=".$_SERVER['PHP_SELF']); } else { //bestaat het inlogcookie wel ?, kijk of er niet is gerommeld met het cookie. //Bereken de hash $hash = md5($HTTP_COOKIE_VARS["ID"].$HTTP_COOKIE_VARS["name"]. $HTTP_COOKIE_VARS["password"].$key); //kijk of de nieuwe hash gelijk is aan die van de gebruiker. if($hash != $HTTP_COOKIE_VARS["userhash"]) { //nee? dan word er dun niet ingelogged... (login blijft unset) echo "Lamer detected!!!"; exit(); } else{ $result = (mysql_query("SELECT admin FROM users where ID = " . $HTTP_COOKIE_VARS["ID"])); if (mysql_num_rows($result) != 1) { echo "Lamer detected!!!"; exit(); } else{ while ($row = mysql_fetch_object($result)) { if ($row->admin != yes) { echo "Je bent geen admin :)<br>En dat is wel nodig voor deze actie."; exit(); } } } } } ?> |
de login.php werkt wel goed met deze check.php (kijkt niet of het een admin is).
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| <?php require("../includes/config.php"); //kijk of het logincookie bestaat. if ($HTTP_COOKIE_VARS["login"] != yes){ //nee? dan direct naar login pagina sturen. header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']). "/login.php?ref=".$_SERVER['PHP_SELF']); } else { //bestaat het inlogcookie wel ?, kijk of er niet is gerommeld met het cookie. //Bereken de hash $hash = md5($HTTP_COOKIE_VARS["ID"].$HTTP_COOKIE_VARS["name"]. $HTTP_COOKIE_VARS["password"].$key); //kijk of de nieuwe hash gelijk is aan die van de gebruiker. if($hash != $HTTP_COOKIE_VARS["userhash"]) { //nee? dan word er dun niet ingelogged... (login blijft unset) echo "Lamer detected!!!"; exit(); } } ?> |
(als je dat zelf wil testen moet je maar eens naar www.cj-multisoft.nl/users/edit.php gaan en dan ook met lll / lll inloggen.)
hier nog een deel van de loginpagina:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| $userhash = md5($ID.$voornaam.$password.$key); setcookie ('userhash', $userhash, time()+3600, '', $HTTP_HOST); setcookie ("ID", $ID, Time()+3600, '', $HTTP_HOST); setcookie ("name", $voornaam, Time()+3600, '', $HTTP_HOST); setcookie ("password", $password, Time()+3600, '', $HTTP_HOST); setcookie ("login", 'yes', Time()+3600, '', $HTTP_HOST); echo "Acces Granted <br>"; if ($HTTP_GET_VARS['ref']) { echo "Klik <a href=\"http://".$_SERVER['HTTP_HOST'].$HTTP_GET_VARS['ref']."\"> hier</a> om terug te gaan naar de pagina waar u vandaan kwam."; } else { echo "Klik <a href=\"../index.php\">hier</a> om naar de indexpagina te gaan."; } |
Ziet iemand wat ik hier fout doe ?
sorry voor de layout, heb zoveelmogelijk de regels ingekort.