dvwa 源码分析(四) --- dvwaPhpIds.inc.php分析
根据文件名就知道是IDS相关的
1 <?php 2 3 if( !defined( 'DVWA_WEB_PAGE_TO_ROOT' ) ) { 4 define( 'DVWA System error- WEB_PAGE_TO_ROOT undefined' ); 5 exit; 6 } 7 8 define( 'DVWA_WEB_ROOT_TO_PHPIDS', 'external/phpids/'.dvwaPhpIdsVersionGet().'/' ); 9 define( 'DVWA_WEB_PAGE_TO_PHPIDS', DVWA_WEB_PAGE_TO_ROOT.DVWA_WEB_ROOT_TO_PHPIDS ); 10 11 // Add PHPIDS to include path 12 set_include_path( get_include_path().PATH_SEPARATOR.DVWA_WEB_PAGE_TO_PHPIDS.'lib/' ); 13 14 require_once 'IDS/Init.php'; 15 16 function dvwaPhpIdsVersionGet() { 17 return '0.6'; 18 }
我们先分析前面的18行
3-6行就是一个是否已定义的判断,在前面我们已经分析过了,这里不再复述。
8-9行定义一个新目录变量,这样就可以更方面的包含目录或文件了。
第8行的dvwaPhpIdsVersionGet()函数在16行定义,返回PhpIds的版本号。
第12行的set_include_path表示包含文件路径,这样做的目的是包含文件的时候可以省略文件路径,直接使用文件名。
第14行又包含一个新的文件,这个文件是在set_include_path的基础上包含的。这里我就不继续分析下去了,因为越分析文件会更多。
下面是几个函数
我们来第一个函数
1 // PHPIDS Log parsing function 2 function dvwaReadIdsLog() { 3 4 $file_array = file(DVWA_WEB_PAGE_TO_PHPIDS_LOG); 5 6 $data = ''; 7 8 foreach ($file_array as $line_number => $line){ 9 $line = explode(",", $line); 10 $line = str_replace("\""," ",$line); 11 12 $datetime = $line[1]; 13 $vulnerability = $line[3]; 14 $variable = urldecode($line[4]); 15 $request = urldecode($line[5]); 16 $ip = $line[6]; 17 18 $data .= "<div id=\"idslog\"><b>Date/Time:</b> " . $datetime . "<br /><b>Vulnerability:</b> " . $vulnerability . "<br /><b>Request:</b> " . htmlspecialchars($request) . "<br /><b>Variable:</b> " . htmlspecialchars($variable) . "<br /><b>IP:</b> " . $ip . "</div>"; 19 } 20 21 return $data; 22 }
第二个函数
1 // Clear PHPIDS log 2 function dvwaClearIdsLog() { 3 if (isset($_GET['clear_log'])) { 4 $fp = fopen(DVWA_WEB_PAGE_TO_PHPIDS_LOG, w); 5 fclose($fp); 6 dvwaMessagePush( "PHPIDS log cleared" ); 7 dvwaPageReload(); 8 } 9 }
第三个函数
1 // Main PHPIDS function 2 function dvwaPhpIdsTrap() { 3 try { 4 $request = array( 5 'REQUEST' => $_REQUEST, 6 'GET' => $_GET, 7 'POST' => $_POST, 8 'COOKIE' => $_COOKIE 9 ); 10 11 $init = IDS_Init::init( DVWA_WEB_PAGE_TO_PHPIDS.'lib/IDS/Config/Config.ini' ); 12 13 $init->config['General']['base_path'] = DVWA_WEB_PAGE_TO_PHPIDS.'lib/IDS/'; 14 $init->config['General']['use_base_path'] = true; 15 $init->config['Caching']['caching'] = 'none'; 16 17 // 2. Initiate the PHPIDS and fetch the results 18 $ids = new IDS_Monitor( $request, $init ); 19 $result = $ids->run(); 20 21 if (!$result->isEmpty()) { 22 require_once 'IDS/Log/File.php'; 23 require_once 'IDS/Log/Composite.php'; 24 25 $compositeLog = new IDS_Log_Composite(); 26 $compositeLog->addLogger(IDS_Log_File::getInstance($init)); 27 28 $compositeLog->execute($result); 29 30 echo 'Hacking attempt detected and logged.'; 31 32 //echo $result; 33 exit; 34 } 35 } catch (Exception $e) { 36 /* 37 * something went terribly wrong - maybe the 38 * filter rules weren't found? 39 */ 40 printf( 41 'An error occured: %s', 42 $e->getMessage() 43 ); 44 } 45 }
这个文件就分析完了,我们回到dvwaPage.inc.php。