Onveilig script
Ik kreeg de melding dat onderstaand script gevaarlijk is voor hackers. Wie kan mij helpen waardoor dat zou komen?
Code (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
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
<?
if ($message_nr==""){
$message=Array();
if ($handle = @opendir('../messages')) {
while (false !== ($file = @readdir($handle))) {
if ($file != "." && $file != "..") {
$messages[]=$file;
}
}
closedir($handle);
}
if (count($messages)>1) { sort($messages); }
if (count($messages)>0) { $message_nr=$messages[count($messages)-1]+1; } else { $message_nr=1; }
echo "&error=99-".$message_nr;
}
if ($cmd=="getmessage" && ereg("^[0-9]+",$message_nr)) {
$target_file="../messages/".$message_nr;
if (file_exists($target_file)){
$handle = @fopen($target_file,"r");
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
$data_message=$buffer;
}
fclose($handle);
echo "&data_message=".urlencode($data_message);
echo "&message_nr_new=".($message_nr+1);
echo "&error=0";
} else {
echo "&message_nr_new=".$message_nr;
echo "&error=1000"; // file not found
}
} else {
echo "&error=9999";
}
?>
if ($message_nr==""){
$message=Array();
if ($handle = @opendir('../messages')) {
while (false !== ($file = @readdir($handle))) {
if ($file != "." && $file != "..") {
$messages[]=$file;
}
}
closedir($handle);
}
if (count($messages)>1) { sort($messages); }
if (count($messages)>0) { $message_nr=$messages[count($messages)-1]+1; } else { $message_nr=1; }
echo "&error=99-".$message_nr;
}
if ($cmd=="getmessage" && ereg("^[0-9]+",$message_nr)) {
$target_file="../messages/".$message_nr;
if (file_exists($target_file)){
$handle = @fopen($target_file,"r");
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
$data_message=$buffer;
}
fclose($handle);
echo "&data_message=".urlencode($data_message);
echo "&message_nr_new=".($message_nr+1);
echo "&error=0";
} else {
echo "&message_nr_new=".$message_nr;
echo "&error=1000"; // file not found
}
} else {
echo "&error=9999";
}
?>
Een hacker kan ze namelijk allemaal lezen.
Ward van der Put op 19/06/2013 16:31:20:
Wat staat er in de berichten die je ophaalt?
Een hacker kan ze namelijk allemaal lezen.
Een hacker kan ze namelijk allemaal lezen.
Daar hoef je geen hacker voor te zijn.
De function ereg() is antiek.
ereg("^[0-9]+",$message_nr)
En waarom controleren of het een getal ia terwijl je er zojuist een getal in hebt gezet?
Gewijzigd op 19/06/2013 16:40:22 door - SanThe -
http://www.securiteam.com/unixfocus/5OP0C0A8AC.html
De bestanden mogen gewoon bekeken worden, dus dat is niet het probleem.
Ik zie geen user input; ik zie niet wat er precies kan fout lopen. Ik zie wel een aantal variabelen waarvan ik niet weet wat er in gestoken is. Als dat user input is, is er waarschijnlijk wel een probleem.
---
Dit gezegd zijnde ...
Laat ons dit gewoon volledig opnieuw schrijven.
Geen opendir(), wel glob()
Geen fgets(), wel file_get_contents()
Wat moet dat allemaal kunnen?
Het leest een folder. In die folder zitten tekstbestanden (data bestanden); de inhoud van die bestanden is telkens een message die je mee wil geven aan de href van een een <a> element;
Klopt dat? Mis ik nog iets?