DVWA代码分析之login.php

最近在学习代码审计,写一篇关于login.php的登陆分析
存在问题
dvwaPhpIdsTrap()
logout()函数的意义
PDO
session()
unset
引用传值
引用返回

相关函数

相关函数
defined 定义一个字符串为常量
session_start 开启session 
file_exists 文件/目录是否存在
require_once 包含一次
isset 是否存在变量并且非null
in_array 数组中是否存在某个值,区分大小写
set_cookie 设置cookie
array_key_exists 是否存在键
stripslashes 与magic_quotes_gpc有关
is_object 判断是否为对象
mysqli_real_escape_string mysql部分查询字符串进行转义
trigger_error,触发一个错误
md5() 返回一个md5加密的值
mysqli_num_rows mysql查询返回的行的数目
mysqli_query 传递mysql查询语句
mysqli_error 返回mysql错误,否则返回空字符串
mysqli_connect_error 返回mysql连接的错误,否则返回空
Header 发送原生http头
unset 释放变量

分析时,默认首次登陆。为了方便,直接将部分dvwaPage.inc.php部分函数截取

<?php

define( 'DVWA_WEB_PAGE_TO_ROOT', '' ); //定义路径
require_once DVWA_WEB_PAGE_TO_ROOT . 'dvwa/includes/dvwaPage.inc.php'; //文件包含

dvwaPage.inc.php与login.php有关的函数

&dvwaSessionGrab(),该函数是引用传递,是关键函数,管理着session

function &dvwaSessionGrab() {
   
	if( !isset( $_SESSION[ 'dvwa' ] ) ) {
   //如果没有全局变量$_SESSION[ 'dvwa' ],就令其为空数组
		$_SESSION[ 'dvwa' ] = array();
	}
	return $_SESSION[ 'dvwa' ];//返回这个空的二维数组
}

dvwaSecurityLevelSet

function dvwaSecurityLevelSet( $pSecurityLevel ) {
    //cookie相关设置 
//httponly=true,代表客户端脚本无法访问cookie
	if( $pSecurityLevel == 'impossible' ) {
   //判断是否是impossible
		$httponly = true;
	}
	else {
   
		$httponly = false;
	}
	setcookie( session_name(), session_id(), null, '/', null, null, $httponly ); //整个根目录都有效的cookie
	setcookie( 'security', $pSecurityLevel, NULL, NULL, NULL, NULL, $httponly );
}	//null则代表有效路径为当前请求页面有效

dvwaPhpIdsEnabledSet

function dvwaPhpIdsEnabledSet( $pEnabled ) {
   
	$dvwaSession =& dvwaSessionGrab(); ///引用传递,当dvwaSessionGrab()的值发生改变,$dvwaSession的值也会跟着改变
		if( $pEnabled ) {
   //如果为真,则将全局数组$_SESSION[ 'dvwa' ]['php_ids']设置为enabled
		$dvwaSession[ 'php_ids' ] = 'enabled';
	}
	else {
   //否则将断开绑定,即$dvwaSession['phpi_ids']值释放,但是$dvwaSessionGrab()还是指向原来的地址
		unset( $dvwaSession[ 'php_ids' ] );
	}
}

&dvwaSessionGrab,该函数是引用传递,是关键函数,管理着session

function &dvwaSessionGrab() {
   
	if( !isset( $_SESSION[ 'dvwa' ] ) ) {
   //如果没有全局变量$_SESSION[ 'dvwa' ],就令其为空数组
		$_SESSION[ 'dvwa' ] = array();
	}
	return $_SESSION[ 'dvwa' ];//返回这个空的二维数组
}

dvwaPageStartup

function dvwaPageStartup( $pActions ) {
   //传入的数组是array( 'phpids' )
	if( in_array( 'authenticated', $pActions ) ) {
   
		if( !dvwaIsLoggedIn()) {
    //首次返回一个true
			dvwaRedirect( DVWA_WEB_PAGE_TO_ROOT . 'login.php' ); //跳转到login.php
		}
	}

	if( in_array( 'phpids', $pActions ) ) {
   
		if( dvwaPhpIdsIsEnabled() ) {
   //如果不存在$_SESSION['DVWA']['phpids'],则什么也不做,否则
			//跳转到dvwaPhpIds.inc.php中的dvwaPhpIdsTrap()函数
			dvwaPhpIdsTrap(); //******这里还没有看
		}
	}
}

dvwaIsLoggedIn

function dvwaIsLoggedIn() {
   
	$dvwaSession =& dvwaSessionGrab(); //$dvwaSession=$_SESSION['dvwa'][]
	return isset( $dvwaSession[ 'username' ] ); //不存在,返回一个false

}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值