s'assurer d'un include

Nouveau WRInaute
hello

Avant de faire une bétise, j'aimerais avoir vos avis

Dans un fichier php, on trouve le code suivant :

...
include ("toto.php");
...

Je veux que le code contenu dans toto.php ne soit exécuté QUE lors d'une inclusion de ce type. Je veux bloquer l'exécution du code contenu de toto.php si on saisit son URL directement dans le navigateur

merci d'avance pour vos idées
 
WRInaute impliqué
dans le fichier d'appel:
<?
$a=1;
include("toto.php");
?>
dans le fichier inclus:
<?
if ($a==1) {
//tout ton code
}
?>
 
WRInaute impliqué
ouais, à condition d'avoir register_global sur off, même si deviner qu'il faut avoir une variable $a à 1 n'est pas chose aisée.
Mieux vaut définir une constante.

if ( !defined('IN_WEBAPP') )
{
die('keudalle');
}
 
WRInaute passionné
Dans tous les fichiers censé appelé ton include tu met par exemple :

Code:
define('JE_SUIS_UNE_CONSTANTE', true);

Dans la page toto.php tu met ce code :



Code:
if	(!defined('JE_SUIS_UNE_CONSTANTE') ) {
	
	/* Initialisation des variables */	
	// message pour le visiteur
	$messVisiteur  = '<div align="center"><p><strong><font color="#FF0000">Tentative de hacking avortée.</p>';
	$messVisiteur .= '<p>L\'administrateur du site à été prévenu de cette tentative d\'intrusion.</font></strong></p></div>';
	// message pour l'admin
	$messAdmin  = 'Page demandée : '.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']."\n";
	$messAdmin .= 'Adresse ip du visiteur : '.$_SERVER['REMOTE_ADDR']."\n";		
	$messAdmin .= 'Navigateur utilisé : '.$_SERVER['HTTP_USER_AGENT']."\n";
	// en-tête de l'e-mail
	$header  = 'From: '.no-reply@exemple.com."\r\n";
	$header .= 'Reply-To: '.no-reply@exemple.com."\r\n";	
	// autres variables
	$sujet			= 'Tentative d\'accès à la page'.$_SERVER['REQUEST_URI'];
	$destinataire	= admin@exemple.com;
	
	mail($destinataire, $sujet, $messAdmin, $header); // envoi d'un e-mail à l'administrateur
	exit($messVisiteur); // sortie avec affichage du message
	}
 
Nouveau WRInaute
'pécable, ça !

je comptais faire la même chose avec une variable, et m'assurer qu'elle était bien parmi celles définies dans $_GET (pour que ca marche aussi si register_globals = on)

ca à l'air bien plus simple avec le coup de la constante

merci
 
WRInaute passionné
ben3w a dit:
'pécable, ça !

je comptais faire la même chose avec une variable, et m'assurer qu'elle était bien parmi celles définies dans $_GET (pour que ca marche aussi si register_globals = on)

ca à l'air bien plus simple avec le coup de la constante

merci

Une variable ; ça peut se modifier...
Une constante ; on ne peut pas la modifier
 
Nouveau WRInaute
tiens, je viens de trouver par accident une autre solution, elle m'a bien fait rire :

dans le fichier qui appelle toto.php, on déclare une fonction quelconque
on appelle cette fonction dans toto.php

fatal error ... ca a l'air efficace !
 
WRInaute passionné
ben3w a dit:
tiens, je viens de trouver par accident une autre solution, elle m'a bien fait rire :

dans le fichier qui appelle toto.php, on déclare une fonction quelconque
on appelle cette fonction dans toto.php

fatal error ... ca a l'air efficace !

En fait par ce moyen, tu appelle de nouveau une foinction déjà déclarée.

Tu ne fais que provoqué une erreur.

La solution que je te propose permet d'une part de ne rien exécuter de toto.php, et de t'envoyé un e-mail pour te prévenir.
 
WRInaute passionné
medium69 a dit:
guicara a dit:
medium69 a dit:
guicara a dit:
Merci pour ce code !

Content de t'avoir rendu service.

Tu me dois 1 euro :mrgreen:

Payable par chèque ? :D

Pour me faire un chèque en bois ??
Je ne prend que les espèces... ( à moins que tu ne sois une fille ;) )

Et si je te donne un lien sur un page rank 5 ^^ ? :D
Non non je ne suis pas une fille :lol:
Et si je te payais en pièce de 1 centime ! :eek:
 
WRInaute passionné
guicara a dit:
medium69 a dit:
guicara a dit:
medium69 a dit:
guicara a dit:
Merci pour ce code !

Content de t'avoir rendu service.

Tu me dois 1 euro :mrgreen:

Payable par chèque ? :D

Pour me faire un chèque en bois ??
Je ne prend que les espèces... ( à moins que tu ne sois une fille ;) )

Et si je te donne un lien sur un page rank 5 ^^ ? :D
Non non je ne suis pas une fille :lol:
Et si je te payais en pièce de 1 centime ! :eek:

oui :arrow:
:arrow: dommage :cry:
:arrow: ok, mais tu me l'envoi par la Poste :lol:
 
WRInaute passionné
c'est carrement débile comme système

je suis désolé, je vous aime bien mais là ça fait quand 5 minutes que je m'éclate de rire sans parvenir à m'arreter
:D

comment est-il possible de faire une verification dans le fichier inclus

donc si j'inclue ma backdoor il n'y a plus de verification ??
:D

claque.gif


rog
 
WRInaute accro
gné ?

si la page qui s'occupe de l'inclusion n'est pas appellée cela signifie que l'on tente une ouverture directe sur le fichier, et de ce fait on ne fait pas le traitement.. le raisonnement et le fonctionnement sont bon!

après si tu appel la page qui s'occupe de l'inclusion, ben tu passe par le bon chemin et donc l'ouverture et "légal" par rapport à ton système.

je ne vois pas ou est le pb rog ?
 
WRInaute passionné
ouf
ça c'est calmé
-------------------

c'est une question d'héritage

si le fichier toto est enfant d'index

l'action include est fait par le parent et c'est l'enfant qui verifie

si je spoof l'enfant, il n'y a plus de verification

c'est obligatoirement le parent qui doit filtrer

rog
 
WRInaute accro
rog a dit:
ouf
ça c'est calmé
-------------------

c'est une question d'héritage

si le fichier toto est enfant d'index

l'action include est fait par le parent et c'est l'enfant qui verifie

si je spoof l'enfant, il n'y a plus de verification
si tu spoof ? c'est à dire ?

rog a dit:
c'est obligatoirement le parent qui doit filtrer

rog
le parent permet le filtrage...sans le parent je vois pas comment tu peux appeller un enfant..

à par ton truc de spoof mais là faut m'en dire plus ???
 
WRInaute passionné
L'enfant vérifie qu'une constante (et non une variable) existe...

Comment ouvrir l'enfant sans l'existence de cette constante ??

Je souhaiterais bien en savoir un peu plus.

Je sais que les failles sont nombreuses, mais là j'aimerais comprendre la faille d'une telle protection...
 
WRInaute passionné
:arrow: Rog :

Je te laisse l'adresse du père qui t'autorisera de parlé à l'enfant.
edit medium69 lien supprimé

Si tu parviens à accéder à l'enfant sans le père, je te laisse m'indiqué la réplique qu'il te dira ici.
 
WRInaute passionné
je vais encore me faire engueuler par olivier duffez, il n'aime pas qu'on parle de hacking ici

pour resumer :

toutes les démarches pour que l'enfant (toto.php) detecte une anomalie sont vaines

si je bypass les restrictions d'index.php (le parent) et fais inclure mon C99.php

le code de detection de l'enfant (toto.php) n'etant plus appelé donc pas interprété ne pourra pas detecter quoi que ce soit

rog
 
WRInaute impliqué
Tu mets tous tes includes qui ne doivent pas directement être appelés dans un répertoire sur lequel tu appliques un ".htaccess" qui contiendra l'instruction "deny from all" et personne ne pourra exécuter ton include directement (et ça me semble plus sécurisé et moins "bidouilleux" que toutes les autres propositions).

(pfou ... ma phrase était longue)
 
WRInaute passionné
petit-ourson a dit:
Tu mets tous tes includes qui ne doivent pas directement être appelés dans un répertoire sur lequel tu appliques un ".htaccess" qui contiendra l'instruction "deny from all" et personne ne pourra exécuter ton include directement (et ça me semble plus sécurisé et moins "bidouilleux" que toutes les autres propositions).

(pfou ... ma phrase était longue)

Je reconnais que je n'y avais pas pensé...
En fait cela se résumerais à peu près à cela ?

Code:
SetEnvIfNoCase Request_URI \.ht(access|passwd)$ deny
SetEnvIfNoCase Request_URI toto\.php$ deny
<Files ~ "^.*$">
order allow,deny
allow from all
deny from env=deny
</Files>
 
WRInaute impliqué
euh ... moi je le résumerai à :

Code:
deny from all

Le reste est tout logiquement gérer dans la configuration d'apache (par défaut même si je ne m'abuse).

Il faut bien sûr réservé ce répertoire aux fichiers appelé dans des scripts et uniquement à eux.
 
Nouveau WRInaute
rog, j'a pas compris ton truc, là ... Je vois toujours pas en quoi le code mis dans toto.php ne serait pas efficace si ce dernier est appelé directement ...

petit-ourson, je suis d'accord, c'est une solution plutot fiable le htaccess, mais j'aimerais l'éviter. Comme dit au début, c'est pour un script que je diffuse. D'expérience, je sais les utilisateurs de ce script (qui n'est pas destiné à des informaticiens) n'auront pas envie d'aller mettre un htaccess en place sur leur site
 
WRInaute impliqué
d'ailleurs il est possible qu'ils n'aient même pas le droit de créer un htaccess sur un mutu.

quant aux avertissements de rog... bah lis un peu ce qu'il poste, tu vas cerner le personnage ;-)
 
Nouveau WRInaute
rog a dit:
je vais encore me faire engueuler par olivier duffez, il n'aime pas qu'on parle de hacking ici

pour resumer :

toutes les démarches pour que l'enfant (toto.php) detecte une anomalie sont vaines

si je bypass les restrictions d'index.php (le parent) et fais inclure mon C99.php

le code de detection de l'enfant (toto.php) n'etant plus appelé donc pas interprété ne pourra pas detecter quoi que ce soit

rog

Ce n'est pas du tout le sujet.

Tu nous parle d'une faille include dans index.php qui pourrait etre présente (et pourquoi pas) mais il ne s'agit pas du tout de se prémunir de se genre d'attaque. Partant de ce principe, on considère que tu n'arrive pas à inclure ton reverse shell.

Le sujet est simplement d'empecher d'appeler directement des enfants pour auditer le code (a priori la connexion base de données échouerait (configurée en amont) et cela permettrait de regarder un peu les requetes en vue de faire du SQL INJECTION).

La vérification de la présence d'une variable globale est un moyen réellement efficace, afficher un message d'avertissement ne dissipera les motivations que des scripts kiddies qui attaquent sans passer par un proxy, soit une trait faible minorité. On ne peux tout de même pas faire beaucoup mieux :D

Salutations,
ShinMei.
 
Discussions similaires
Haut