What do we have in this session?
Testing BASE and Snort
First of all, let run snort manually (we failed to run it as the Windows’s service previously!). Choose appropriate interface (NIC) that having traffic.
We use the WAN (PPP/SLIP) interface in this case interface #4 (running in IDS mode). Execute the following Snort’s command. -p option is for promiscuous mode.
C:\>snort -c c:\snort\etc\snort.conf -l c:\snort\log -v -i4 –p
When there are activities, the verbose should be visible.
BASE and MySQL Errors
Then, browse to http://localhost/base-1.4.5/base_main.php to interact with the BASE webpage. Well, we encounter the following errors. Look like the connection to mysql failed miserably. The errors information can be found in Google.
...Notice: Undefined index: QUERY_STRING in C:\Inetpub\wwwroot\base-1.4.5\includes\base_state_criteria.inc.php on line 248 Warning: mysql_pconnect(): [2002] A connection attempt failed because the connected party did not (trying to connect via tcp://localhost:3306) in C:\PHP\adodb5\drivers\adodb-mysql.inc.php on line 383 Warning: mysql_pconnect(): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. in C:\PHP\adodb5\drivers\adodb-mysql.inc.php on line 383 Fatal error: Maximum execution time of 30 seconds exceeded in C:\PHP\adodb5\drivers\adodb-mysql.inc.php on line 383 PHP Notice: Undefined index: QUERY_STRING in C:\Inetpub\wwwroot\base-1.4.5\includes\base_state_criteria.inc.php on line 248 PHP Warning: mysql_pconnect(): [2002] A connection attempt failed because the connected party did not (trying to connect via tcp://localhost:3306) in C:\PHP\adodb5\drivers\adodb-mysql.inc.php on line 383 PHP Warning: mysql_pconnect(): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. in C:\PHP\adodb5\drivers\adodb-mysql.inc.php on line 383 PHP Fatal error: Maximum execution time of 30 seconds exceeded in C:\PHP\adodb5\drivers\adodb-mysql.inc.php on line 383...
Then, as suggested, we change all the 'localhost' occurrences to '127.0.0.1' (without the single quote) in base_conf.php file. These errors should be resolved if we setup BASE, mySQL, PHP etc on the real server that having real domain name. Then, reopen the URL.
More Errors
Well, less errors! At the top page, we have the following errors.
Notice: Undefined index: QUERY_STRING in C:\Inetpub\wwwroot\base-1.4.5\includes\base_state_criteria.inc.php on line 248 Notice: Undefined index: REQUEST_URI in C:\Inetpub\wwwroot\base-1.4.5\includes\base_output_html.inc.php on line 92
And at the bottom with the following errors.
PHP Notice: Undefined index: QUERY_STRING in C:\Inetpub\wwwroot\base-1.4.5\includes\base_state_criteria.inc.php on line 248 PHP Notice: Undefined index: REQUEST_URI in C:\Inetpub\wwwroot\base-1.4.5\includes\base_output_html.inc.php on line 92
When there is no data, errors will be thrown. To resolve these errors, re-open base_state_criteria.inc.php and find line 248. Replace the original code:
$query_string = CleanVariable($_SERVER["QUERY_STRING"], VAR_PERIOD | VAR_DIGIT | VAR_PUNC | VAR_LETTER);
With the following and save the file.
$query_string = CleanVariable((isset($_SERVER["QUERY_STRING"]) ? $_SERVER["QUERY_STRING"] : ''), VAR_PERIOD | VAR_DIGIT | VAR_PUNC | VAR_LETTER);
Next, open base_output_html.inc.php file find code on line 92. Replace the original code:
htmlspecialchars(CleanVariable($_SERVER["REQUEST_URI"], VAR_FSLASH | VAR_PERIOD | VAR_DIGIT | VAR_PUNC | VAR_LETTER), ENT_QUOTES).'">'."\n";
With the following and save the file.
htmlspecialchars(CleanVariable((isset($_SERVER["REQUEST_URI"]) ? $_SERVER["REQUEST_URI"] : ''), VAR_FSLASH | VAR_PERIOD | VAR_DIGIT | VAR_PUNC | VAR_LETTER), ENT_QUOTES).'">'."\n";
Then let do a simple customization by changing the following code in base_main.php to enable the custom footer. A simple custom sample footer is under contrib sub folder.
/* Custom footer addition. The below variable, if set, will cause
* base_main.php to include whatever file is specified.
* A sample custom footer file is in the contrib directory
*/
$base_custom_footer = '/contrib/custom_base_footer.php';
Reload the base_main.php file from browser.
Those errors vanished! Everything looks fine! Click one of the links, for example any protocol.
-------------------------------------------------------------
----------------------------------------------------------------------
At bottom of the page, there are more errors.
Warning: Unknown: 1 result set(s) not freed. Use mysql_free_result to free result sets which were requested using mysql_query() in Unknown on line 0 PHP Warning: Unknown: 1 result set(s) not freed. Use mysql_free_result to free result sets which were requested using mysql_query() in Unknown on line 0
To resolve these non-critical warnings, re-open php.ini file. Find the following code.
; Trace mode. When trace_mode is active (=On), warnings for table/index scans and
; SQL-Errors will be displayed.
; https://php.net/mysql.trace-mode
mysql.trace_mode = On
Turn off mysql.trace_mode.
; Trace mode. When trace_mode is active (=On), warnings for table/index scans and
; SQL-Errors will be displayed.
; https://php.net/mysql.trace-mode
mysql.trace_mode = Off
mysql_free_result() will free all memory associated with the result identifier result and only needs to be called if you are concerned about how much memory is being used for queries that return large result sets. All associated result memory is automatically freed at the end of the script's execution.
Save the file and reload the base_main.php and try any links.
Hmmm, no more errors when clicking any links. Click another link, as in this case, 1.
Another PHP Notice….However these also are non critical errors which can be suppressed by modifying the error_reporting variable in php.ini file that can be found at:
https://php.net/error-reporting
A lot of configuration options for Snort, BASE, PHP and also mysql were not covered in this lengthy tutorial. However we have successfully demonstrated how to run Snort with BASE (together with other required 'friends' such as PHP, MySQL and IIS server.
This was intended to be a how-to on getting all these thingies running on Windows XP Pro SP2. There are many other considerations to take into account such as where to place the IDS sensor on the network, refined configuration of Snort and Snort rules, setting up SMTP alert notifications in BASE, security implications and many more. Those things should be customized to your organization needs.