
|
|
<?php set_include_path( get_include_path() . PATH_SEPARATOR . '/home/deny/aide/lib' ); require_once 'IDS/Init.php'; $request = array( 'REQUEST' => $_REQUEST, 'GET' => $_GET, 'POST' => $_POST, 'COOKIE' => $_COOKIE ); $init = IDS_Init::init('/home/deny/aide/lib/IDS/Config/Config.ini'); $ids = new IDS_Monitor($request, $init); $result = $ids->run(); if (!$result->isEmpty()) { // Take a look at the result object echo $result; require_once 'IDS/Log/File.php'; require_once 'IDS/Log/Composite.php'; $compositeLog = new IDS_Log_Composite(); $compositeLog->addLogger(IDS_Log_File::getInstance($init)); $compositeLog->execute($result); } ?> |
À présent, on peut afficher ce script dans notre navigateur à l'adresse http://192.168.0.10/phpids.php), et on verra une page blanche. Mais si on essaye d'ajouter des paramètres malicieux dans l'URL (par exemple http://192.168.0.10/phpids.php?test=%22%3EXXX%3Cscript%3Ealert(1)%3C/script%3E), PHPIDS le détectera et ajoutera le résultat dans le navigateur:
|
Total impact: 64 Affected tags: xss, csrf, id, rfe, lfi Variable: REQUEST.test | Value: ">XXX<script>alert(1)</script>) Impact: 32 | Tags: xss, csrf, id, rfe, lfi Description: finds html breaking injections including whitespace attacks | Tags: xss, cs rf Description: Detects self-executing JavaScript functions | Tags: xss, csrf Description: Detects possible includes and typical script methods | Tags: xss, csrf, id, rfe Description: Detects very basic XSS probings | Tags: xss, csrf, id, rfe Description: Detects obfuscated script tags and XML wrapped HTML | Tags: xss Description: Detects possibly malicious html elements including some attributes | Tags: xss, csrf, id, rfe, lfi Description: Detects unknown attack vectors based on PHPIDS Centrifuge detection | Tags: xss, csrf, id, rfe, lfi Variable: GET.test | Value: ">XXX<script>alert(1)</script>) Impact: 32 | Tags: xss, csrf, id, rfe, lfi Description: finds html breaking injections including whitespace attacks | Tags: xss, csrf Description: Detects self-executing JavaScript functions | Tags: xss, csrf Description: Detects possible includes and typical script methods | Tags: xss, csrf, id, rfe Description: Detects very basic XSS probings | Tags: xss, csrf, id, rfe Description: Detects obfuscated script tags and XML wrapped HTML | Tags: xss Description: Detects possibly malicious html elements including some attributes | Tags: xss, csrf, id, rfe, lfi Description: Detects unknown attack vectors based on PHPIDS Centrifuge detection | Tags: xss, csrf, id, rfe, lfi |
Maintenant il faut que nos scripts PHP tirent partie de PHPIDS. Bien sûr, on ne va pas modifier tous nos scripts PHP On peut dire à PHP d'ajouter un script PHP quand un script PHP est appelé. Par exemple, si on appelle un script info.php, PHP exécutera d'abord phpids.php et ensuite info.php et on ne modifiera donc pas info.php.
On peut faire ceci en utilisant la directive PHP auto_prepend_file dans notre php.ini (qui est une configuration globale valide pour tous les sites PHP web du serveur), ou dans un fichier .htaccess (valide seulement pour le site web en question):
Dans votre php.ini, fixez auto_prepend_file à /home/deny/aide/phpids.php:
vi /etc/php.ini
[...]
auto_prepend_file = /home/deny/aide/phpids.php
[...]
Et redémarrez apache avec un service httpd restart
Au lieu de modifier php.ini, on peut utiliser un fichier .htaccess pour une configuration seulement valide pour le site web pour lequel on crée ce fichier
vi /home/deny/aide/.htaccess
php_value auto_prepend_file /home/deny/aide/phpids.php
Assurez-vous toutefois que le virtual host de votre site contient quelque chose comme ceci:
AllowOverride All
On peut alors créer un fichier info.php:
vi /home/deny/aide/info.php
<?php
phpinfo();
?>
et l'appeler dans un navigateur (http://192.168.0.10/info.php), et on verra l'affichage de phpinfo().
Ajoutons à présent quelques paramètres bizarres à l'URL (c'est-à-dire http://192.168.0.10/info.php?test=%22%3EXXX%3Cscript%3Ealert(1)%3C/script%3E), et on aura un rapport de PHPIDS
PHPIDS affiche ces infos dans le fichier /home/deny/aide/lib/IDS/tmp/phpids_log.txt
En observant ces avertissements, on peut apprendre ce que les assaillants essayent de faire et on peut de ce fait renforcer nos applications
Pour ajouter un autre niveau de sécurité, on peut stopper l'exécution de nos scripts PHP si PHPIDS trouve qu'ils sont attaqués : on ajoute simplement quelque chose comme die('Go away!'); à la boucle if (!$result->isEmpty()) {} dans la section du script phpids.php
|
<?php set_include_path( get_include_path() . PATH_SEPARATOR . '/home/deny/aide/lib' ); require_once 'IDS/Init.php'; $request = array( 'REQUEST' => $_REQUEST, 'GET' => $_GET, 'POST' => $_POST, 'COOKIE' => $_COOKIE ); $init = IDS_Init::init('/home/deny/aide/lib/IDS/Config/Config.ini'); $ids = new IDS_Monitor($request, $init); $result = $ids->run(); if (!$result->isEmpty()) { // Take a look at the result object echo $result; require_once 'IDS/Log/File.php'; require_once 'IDS/Log/Composite.php'; $compositeLog = new IDS_Log_Composite(); $compositeLog->addLogger(IDS_Log_File::getInstance($init)); $compositeLog->execute($result); die(' Go away!');} ?> |
S'il n'y a pas d'attaques, les scritps s'éxecutent, mais si PHPIDS trouve quelque chose, il empêche l'exécution des scripts et dispense un message aux assaillants:
Go away