dvwa 源码分析(二) --- dvwaPage.inc.php分析

时间:2021-06-06 06:47:46

在setup.php中,包含了这个文件,所以这里分析这个文件。

 <?php

 if( !defined( 'DVWA_WEB_PAGE_TO_ROOT' ) ) {

     define( 'DVWA System error- WEB_PAGE_TO_ROOT undefined' );
exit; } 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 = ""; }

$html变量声明

设置dvwa安全等级cookie

// Set security cookie to high if no cookie exists
if (!isset($_COOKIE['security'])){ setcookie( 'security', 'high' ); }

设置安全等级cookie

返回dvwa版本号

// DVWA version
function dvwaVersionGet() { return '1.0.7'; }

dvwa 版本

dvwa 发布日期

// DVWA release date
function dvwaReleaseDateGet() { return '08/09/10'; }

dvwa发布日期

以数组的形式定义会话信息

// 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(); }
}
}

dvwaPageStartup

启用IDS功能

function dvwaPhpIdsEnabledSet( $pEnabled ) {

    $dvwaSession =& dvwaSessionGrab();

    if( $pEnabled ) {

        $dvwaSession[ 'php_ids' ] = 'enabled';

    } else {

        unset( $dvwaSession[ 'php_ids' ] );

    }
}

dvwaPhpIdsEnabledSet

判断是否启用了IDS功能

function dvwaPhpIdsIsEnabled() {

    $dvwaSession =& dvwaSessionGrab();

    return isset( $dvwaSession[ 'php_ids' ] );

}

dvwaPhpIdsIsEnabled

用户登录

function dvwaLogin( $pUsername ) {

    $dvwaSession =& dvwaSessionGrab();

    $dvwaSession['username'] = $pUsername;

}

dvwaLogin

判断用户是否已经登录

function dvwaIsLoggedIn() {

    $dvwaSession =& dvwaSessionGrab();

    return isset( $dvwaSession['username'] );

}

dvwaIsLoggedIn

用户退出,清除会话

function dvwaLogout() {

    $dvwaSession =& dvwaSessionGrab();

    unset( $dvwaSession['username'] );

}

dvwaLogout

重新加载

function dvwaPageReload() {

    dvwaRedirect( $_SERVER[ 'PHP_SELF' ] );

}

dvwaPageReload

返回当前用户

function dvwaCurrentUser() {

    $dvwaSession =& dvwaSessionGrab();

    return ( isset( $dvwaSession['username']) ? $dvwaSession['username'] : '') ;

}

dvwaCurrentUser

初始化页面

function &dvwaPageNewGrab() {

    $returnArray = array(
'title' => 'Damn Vulnerable Web App (DVWA) v'.dvwaVersionGet().'',
'title_separator' => ' :: ',
'body' => '',
'page_id' => '',
'help_button' => '',
'source_button' => '',
); return $returnArray;
}

dvwaPageNewGrab

获取当前安全等级

function dvwaSecurityLevelGet() {

    return isset( $_COOKIE[ 'security' ] ) ? $_COOKIE[ 'security' ] : 'high';

}

dvwaSecurityLevelGet

设置安全等级

function dvwaSecurityLevelSet( $pSecurityLevel ) {

    setcookie( 'security', $pSecurityLevel );

}

dvwaSecurityLevelSet

启用消息函数,以压入栈的方式(数组)

// Start message functions --
function dvwaMessagePush( $pMessage ) { $dvwaSession =& dvwaSessionGrab(); if( !isset( $dvwaSession[ 'messages' ] ) ) { $dvwaSession[ 'messages' ] = array(); } $dvwaSession[ 'messages' ][] = $pMessage;
}

Start message functions

弹出消息,以出栈的方式

function dvwaMessagePop() {

    $dvwaSession =& dvwaSessionGrab();

    if( !isset( $dvwaSession[ 'messages' ] ) || count( $dvwaSession[ 'messages' ] ) == 0 ) {

        return false;

    }

    return array_shift( $dvwaSession[ 'messages' ] );
}

dvwaMessagePop

以html的形式返回所以消息

function messagesPopAllToHtml() {

    $messagesHtml = '';

    while( $message = dvwaMessagePop() ) {    // TODO- sharpen!

        $messagesHtml .= "<div class=\"message\">{$message}</div>";

    }

    return $messagesHtml;
}

messagesPopAllToHtml

。。