dvwa 源码分析(二) --- dvwaPage.inc.php分析
在setup.php中,包含了这个文件,所以这里分析这个文件。
1 <?php 2 3 if( !defined( 'DVWA_WEB_PAGE_TO_ROOT' ) ) { 4 5 define( 'DVWA System error- WEB_PAGE_TO_ROOT undefined' ); 6 exit; 7 8 } 9 10 11 session_start(); // Creates a 'Full Path Disclosure' vuln.
在setup.php中,定义了DVWA_WEB_PAGE_TO_ROOT为空
所以这里判断是否已经定义,如果未定义,则会报错,我测试了,报错是
Warning: define() expects at least 2 parameters, 1 given
然后退出。
然后是启用会话。
// Include configs require_once DVWA_WEB_PAGE_TO_ROOT.'config/config.inc.php'; require_once( 'dvwaPhpIds.inc.php' );
然后再次包含两个文件,我们先去分析这两个文件。
dvwa 源码分析(三) --- config.inc.php分析
dvwa 源码分析(四) --- dvwaPhpIds.inc.php分析
分析了这两个文件,我们继续往下分析
声明html变量
// Declare the $html variable if(!isset($html)){ $html = ""; }
设置dvwa安全等级cookie
// Set security cookie to high if no cookie exists if (!isset($_COOKIE['security'])){ setcookie( 'security', 'high' ); }
返回dvwa版本号
// DVWA version function dvwaVersionGet() { return '1.0.7'; }
dvwa 发布日期
// DVWA release date function dvwaReleaseDateGet() { return '08/09/10'; }
以数组的形式定义会话信息
// Start session functions -- function &dvwaSessionGrab() { if( !isset( $_SESSION[ 'dvwa' ] ) ) { $_SESSION[ 'dvwa' ] = array(); } return $_SESSION[ 'dvwa' ]; }
判断用户是否登录,是否使用IDS功能
function dvwaPageStartup( $pActions ) { if( in_array( 'authenticated', $pActions ) ) { if( !dvwaIsLoggedIn()){ dvwaRedirect( DVWA_WEB_PAGE_TO_ROOT.'login.php' ); } } if( in_array( 'phpids', $pActions ) ) { if( dvwaPhpIdsIsEnabled() ) { dvwaPhpIdsTrap(); } } }
启用IDS功能
function dvwaPhpIdsEnabledSet( $pEnabled ) { $dvwaSession =& dvwaSessionGrab(); if( $pEnabled ) { $dvwaSession[ 'php_ids' ] = 'enabled'; } else { unset( $dvwaSession[ 'php_ids' ] ); } }
判断是否启用了IDS功能
function dvwaPhpIdsIsEnabled() { $dvwaSession =& dvwaSessionGrab(); return isset( $dvwaSession[ 'php_ids' ] ); }
用户登录
function dvwaLogin( $pUsername ) { $dvwaSession =& dvwaSessionGrab(); $dvwaSession['username'] = $pUsername; }
判断用户是否已经登录
function dvwaIsLoggedIn() { $dvwaSession =& dvwaSessionGrab(); return isset( $dvwaSession['username'] ); }
用户退出,清除会话
function dvwaLogout() { $dvwaSession =& dvwaSessionGrab(); unset( $dvwaSession['username'] ); }
重新加载
function dvwaPageReload() { dvwaRedirect( $_SERVER[ 'PHP_SELF' ] ); }
返回当前用户
function dvwaCurrentUser() { $dvwaSession =& dvwaSessionGrab(); return ( isset( $dvwaSession['username']) ? $dvwaSession['username'] : '') ; }
初始化页面
function &dvwaPageNewGrab() { $returnArray = array( 'title' => 'Damn Vulnerable Web App (DVWA) v'.dvwaVersionGet().'', 'title_separator' => ' :: ', 'body' => '', 'page_id' => '', 'help_button' => '', 'source_button' => '', ); return $returnArray; }
获取当前安全等级
function dvwaSecurityLevelGet() { return isset( $_COOKIE[ 'security' ] ) ? $_COOKIE[ 'security' ] : 'high'; }
设置安全等级
function dvwaSecurityLevelSet( $pSecurityLevel ) { setcookie( 'security', $pSecurityLevel ); }
启用消息函数,以压入栈的方式(数组)
// Start message functions -- function dvwaMessagePush( $pMessage ) { $dvwaSession =& dvwaSessionGrab(); if( !isset( $dvwaSession[ 'messages' ] ) ) { $dvwaSession[ 'messages' ] = array(); } $dvwaSession[ 'messages' ][] = $pMessage; }
弹出消息,以出栈的方式
function dvwaMessagePop() { $dvwaSession =& dvwaSessionGrab(); if( !isset( $dvwaSession[ 'messages' ] ) || count( $dvwaSession[ 'messages' ] ) == 0 ) { return false; } return array_shift( $dvwaSession[ 'messages' ] ); }
以html的形式返回所以消息
function messagesPopAllToHtml() { $messagesHtml = ''; while( $message = dvwaMessagePop() ) { // TODO- sharpen! $messagesHtml .= "<div class=\"message\">{$message}</div>"; } return $messagesHtml; }
。。