pavel70 ha scritto:
La stringa è presente nei file:
./controllo.php - riga: 4
quindi direi è tutto ok..una sola cosa non capisco. Nel file di Micogian alla riga 4 bisogna sostituire bf760a con questo?<!--81a338-->
E' ovvio che venga trovata la stringa nel file di controllo. Per sapere qual'è la stringa da cercare bisogna aprire un file infetto e vedere qual'è la stringa utilizzata nello script. Non serve inserire lo script, basta solo il codice, ad esempio "81a338". E' difficile che questo codice sia una stringa di sistema.
Volete essere avvisati se un file è stato modificato ? Semplice, si utilizza il comando MD5 che fornisce uin numero univoco legato al nome e al contenuto di un file.
La procedura necessita di 3 file e la modifica di index.php e del template index_body.html.
I file necessari sono
- mod_md5_crea.php = crea un file contenente i codici MD5 dei file interessati
- mod_md5_dati.php = viene creato dal file precedente e contiene i codici MD5
- mod_md5_control.php = controlla il codice MD5 dei file e se sono diversi da quelli memorizzati visualizza un messaggio nell'index.
Per comodità i file vanno inseriti nella root del forum.
1) Il file mod_md5_crea.php ha il compito di creare i codici md5 dei file da controllare. Considerando che normalmente sono i file index ad essere interessati dalle intrusioni, il file controlla i file index del forum e quello della root.
Il contenuto del file è questo:
Codice: Seleziona tutto
<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
// Inserire il group_id degli admin o l'user_id degli utenti abilitati a questa funzione
if($user->data['group_id'] == 2 || $user->data['user_id'] == 99)
{
// Codice MD5 dei file index
$file1 = "../index.php"; // index della root
$file2 = "./index.php"; // index del forum
// Controlla il codice MD5 dei file
$file_1 = fopen($file1,'r');
$size_1 = filesize($file1);
$code_1 = md5(fread($file_1,$size_1));
$file_2 = fopen($file2,'r');
$size_2 = filesize($file2);
$code_2 = md5(fread($file_2,$size_2));
//adesso creo la variabile che andrò a scrivere sul file md5_dati.php
$corpo= "<?php
// Valori MD5 dei seguenti file: index.php, forum/index.php
global \$code1;
global \$code2;
\$code1 = \"$code_1\";
\$code2 = \"$code_2\";
?>";
echo "<br>PROCEDURA EFFETTUATA:<br />aggiornato il file \"mod_md5_dati.php\" con il contenuto seguente:<br><br>";
echo "<textarea rows=13 cols=60 >" . $corpo . "</textarea>";
//questo invece è il codice che scrive il file
$file = "mod_md5_dati.php";
$connect = @fopen($file, "w");
fputs($connect, $corpo, "4096");
fclose($connect);
}else{
echo "Non hai i permessi per visualizzare questa pagina";
}
?>
Ovviamente dovete cambiare il group_id e l'user_id per consentire l'uso del file solo agli utenti abilitati a farlo.
Il file provvede a creare il codice md5 dei file index e inserirli in un file di nome mod_md5_dati.php
E' possibile inserire ulteriori file per il controllo ma in questo caso bisogna inserire nuove variabili.
Il file mod_md5_crea.php va usato solamente quando uno dei file index viene modificato.
Il codice md5 memorizzato non cambia se il file non viene modificato.
Passiamo ora al file che controlla il codice md5 in tempo reale. Si chiama mod_md5_control.php, va sempre inserito nella root del forum ed ha ha il seguente contenuto:
Codice: Seleziona tutto
<?php
define('IN_PHPBB', true);
// Codice MD5 dei file index
include('./mod_md5_dati.php');
global $code1, $code2;
$index_home = $code1 ;
$index_forum = $code2 ;
// Controlla il codice MD5 dei file index
$file1 = fopen('../index.php','r');
$size1 = filesize('../index.php');
$code_1 = md5(fread($file1,$size1));
$file2 = fopen('index.php','r');
$size2 = filesize('index.php');
$code_2 = md5(fread($file2,$size2));
$msg = '';
$msg1 = '';
if($code1 != $code_1 )
{
$msg1 = "index Home," ;
}
if($code2 != $code_2 )
{
$msg1 = $msg1 . " index Forum," ;
}
if($msg1 != '')
{
$msg = "ATTENZIONE, sono stati modificati i seguenti file: " . $msg1 . "<br />";
$template->assign_vars(array(
'MSG_MD5' => true ,
'MSG_TXT' => $msg ,
));
}
?>
Il file provvede a controllare il codice md5 dei file index e se diversi da quelli memorizzati nel file mod_md5_dati.php, aggiorna le variabili MSG_MD5 e MSG_TXT che vengono passate al template.
Il file mod_md5_control.php va inserito nel file index.php con un include.
Prima della riga
inserire questo codice:
Codice: Seleziona tutto
nclude($phpbb_root_path . 'mod_md5_control.' . $phpEx);
Ogni volta che si apre la pagina index.php viene controllata la corrispondenza dei codici md5.
Passiamo ora al template. Nel file index_body.html, prima della riga
va inserita la seguente riga:
Codice: Seleziona tutto
<!-- IF S_ADMIN_GROUP and MSG_MD5 --><p style="text-align: left; font-weight: bold; color: red;">{MSG_TXT}</p><!-- ENDIF -->
Il codice, nel caso uno dei file index sia stato modificato provvede a visualizzare (solo agli admin) un messaggio di avviso che compare nell'indice del forum.
E' un messaggio che informa immediatamente che il file è stato modificato e consente di agire con tempestività prima che Google si accorga dell'intrusione e blocchi il sito.
Se la modifica dei file index è stata fatta regolarmente bisogna lanciare il file mod_md5.crea.php per aggiornare i codici md5 memorizzati nel file mod_md5.dati.php.