PHP代码审计 01 基础知识

本文记录 PHP 代码审计的学习过程,教程为暗月 2015 版的 PHP 代码审计课程

PHP 代码审计博客目录

1. 环境准备

1.1 测试运行环境

安装 wamp

1.2 PHP 编写工具

  1. EditPlu

  2. Notepad++

  3. Zendstudio 10 百度云下载链接

1.3 代码审计工具

Seay源代码审计系统 百度云下载链接

1.4 代码审计平台

  1. DVWA GitHub 链接
  2. ZVulDrill GitHub 链接

2. 注释

  1. 单行注释 => //单行注释
  2. 多行注释 => /*多行注释*/

3. 单引号和双引号

  1. 单引号不解析变量

  2. 双引号解析变量

     aaa='123'
     echo '$aaa' => 结果为 $aaa
     echo "$aaa" => 结果为 123
    

4. 输出函数

  1. echo 或者 print:最简单的输出方法

  2. print_r、var_dump(var_export)、debug_zval_dump:输出变量数据值,特别是数组和对象数据

  3. var_dump 会额外输出数据类型

  4. print_r:输出格式很整齐,跟var_dump 的区别是没有类型数据,并且布尔值的 false 和 NULL 输出为空

  5. var_export:所有的数据是可以作为组织好的变量输出的,都是能够作为直接赋值使用;需要注意的一点是, var_export 对于资源型的变量会输出NULL

  6. debug_zval_dump:输出结果跟 var_dump 类似,唯一增加的一个值是 refcount,就是记录一个变量被引用了多少次,这是 php 的copy on write (写时复制) 的机制的一个重要特点。

5. 超全局变量

超全局变量——超全局变量是在全部作用域中始终可用的内置变量

1. 简介

  1. 在php 中可由用户操作的全局变量列表如下:

     $GLOBALS — 引用全局作用域中可用的全部变量
     $_SERVER — 服务器和执行环境信息
     $_GET — HTTP GET 变量
     $_POST — HTTP POST 变量
     $_FILES — HTTP 文件上传变量
     $_REQUEST — HTTP Request 变量
     $_SESSION — Session 变量
     $_ENV — 环境变量
     $_COOKIE — HTTP Cookies
    
  2. 已经被弃用的超全局变量

     $_HTTP_COOKIE_VARS
     $_HTTP_ENV_VARS
     $_HTTP_GET_VARS
     $_HTTP_POST_FILES
     $_HTTP_POST_VARS
     $_HTTP_SERVER_VARS
    

2. 超全局变量示例

  1. $GLOBALS

     # 例一:
     <?php
     $moon="1";
     echo $GLOBALS['moon'];
     ?>
     # 显示结果为1
    
     # 例二
     <?php
     function test(){
     	echo $moon="2";
     	echo $GLOBALS['moon'];
     }
     $moon="1";
     test();
     ?>
     # 显示结果为 21 
     # 函数内部为局部变量,不被 $GLOBALS 所识别
    
  2. $_SERVER

     test1.php
     	<?php
     	print_r($_SERVER);
     	?>
    
     test2.php
     	<?php
     	$_SERVER='aaaaaa';
     	print_r($_SERVER);
     	?>
    

    输出结果为服务器的配置信息

    在这里插入图片描述

    输出结果可以被覆盖

    在这里插入图片描述

  3. $_GET

     test.php
     	<?php
     	print_r($_GET);
     	?>
    

    输出结果为 URL 中的 GET 变量的数据

    在这里插入图片描述

  4. $_POST

     test.php
     	<?php
     	print_r($_POST);
     	?>
    

    输出结果为 URL 中的 POET 变量的数据

  5. $_FILES

     1. file.html
     	<form action="test.php" method="post" enctype="multipart/form-data">
     	<lable for="file">Filename:</lable>
     	<input type="file" name="file" id="file" />
     	<br />
     	<input type="submit" name="submit" value="Submit" />
     	</form>
    
     2. test.php
     	<?php
     	print_r($_FILES);
     	?>
    

    输出结果为提交的文件的信息

    在这里插入图片描述

  6. $_REQUEST

     test1.php
     	<?php
     	print_r($_REQUEST);
     	?>
    
     test2.php
     	<?php
     	$_REQUEST='aaaaaa';
     	print_r($_REQUEST);
     	?>
    

    输出结果可以被覆盖

    在这里插入图片描述

  7. $_SESSION

     test1.php
     	<?php
     	print_r($_SESSION);
     	?>
    
     test2.php
     	<?php
     	$_SESSION='aaaaaa';
     	print_r($_SESSION);
     	?>
    

    输出结果可以被覆盖

    在这里插入图片描述

  8. $_ENV

     test1.php
     	<?php
     	print_r($_ENV);
     	?>
    
     test2.php
     	<?php
     	$_ENV='aaaaaa';
     	print_r($_ENV);
     	?>
    
     test3.php
     	<?php
     	print_r($_ENV['OS']='bbbbbb');
     	?>
    

    输出结果可以被覆盖

    在这里插入图片描述

    在这里插入图片描述

  9. $_COOKIE

     test.php
     	<?php
     	print_r($_COOKIE);
     	?>
    

    输出结果为 cookie 值

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值