当前位置: 首页 > article >正文

第27天:PHP应用原生语法全局变量数据接受身份验证变量覆盖任意上传

#知识点:

1、安全开发-原生PHP-超级全局变量

2、安全开发-原生PHP-代码审计案例

一、Web开发常用工具

DW + PHPStorm + PhpStudy + Navicat Premium

DW : HTML&JS&CSS开发

PHPStorm : 专业PHP开发IDE

PhpStudy :Apache MYSQL环境

Navicat Premium: 全能数据库管理工具

参考:PHP 教程 - 编程笔记

二、变量覆盖安全:

$GLOBALS:这种全局变量用于在PHP脚本中的任意位置访问全局变量

$x = 2;
$y = 3;
$z = 4;

function add() {
    $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}

add();
echo $z;
//add函数通过$GLOBALS超级全局变量访问并修改了全局变量z的值
//把x和y相加的结果(也就是2 + 3 = 5)赋值给了z,所以最后echo $z输出的是5
$x = 2;
$y = 3;
$z = 4;

function add() {
    $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}

echo $z;
//这里只是定义了add函数,但是并没有调用它。
//所以全局变量z的值始终保持初始值4,因此echo $z输出的是4。
$x = 2;
$y = 3;
$z = 4;

function add1() {
    // 在函数内部定义了一个局部变量 $z
    $z = 2 + 3;
    return $z;
//在这个函数里,创建了一个局部变量 $z,它的值是 2 + 3,也就是 5,然后函数返回这个值。
//这里要注意的是,函数内的这个 $z 和外面的全局变量 $z 没有关系,它只是一个作用域仅限于函数内部的局部变量。
}

$x = add1();
//把 add1 函数的返回值 5 赋值给了全局变量 $x,但这个赋值操作对全局变量 $z 没有任何影响。
echo $z;
echo $x;

运行结果如图:

变量覆盖原理:变量覆盖指的是局部变量意外地替换掉了同名的全局变量值。当使用$GLOBALS时,本意是访问和操控全局变量,但如果代码编写不当,在局部作用域内声明了与全局变量同名的变量,就可能出现覆盖情况。例如:

$password = "secure123";
function someFunction() {
    // 此处无意声明了与全局变量同名的变量
    $password = "hacked";  
    $GLOBALS['password'] = $password;
}
someFunction();
echo $password;  

在上述代码里,函数内部先声明了局部变量$password,它覆盖了同名的全局变量,随后通过$GLOBALS更新的其实是这个新的局部变量,最终导致全局变量被篡改,原本安全的密码值丢失。

三、数据接收安全:

$_REQUEST$_REQUEST 用于收集 HTML 表单提交的数据。

$_POST:广泛用于收集提交method="post"HTML表单后的表单数据。

$_GET:收集URL中的发送的数据。也可用于提交表单数据(method="get")

<?php
//$_REQUEST:$_REQUEST 用于收集 HTML 表单提交的数据。
//$_POST:广泛用于收集提交method="post" 的HTML表单后的表单数据。
//$_GET:收集URL中的发送的数据。也可用于提交表单数据(method="get")

$r=@$_REQUEST['x'];
$g=@$_GET['y'];
$p=@_POST['z'];
$c=@_COOKIE['n'];

echo $r."<hr>";
echo $g."<hr>";
echo $p."<hr>";
echo $c."<hr>";

$_ENV:是一个包含服务器端环境变量的数组。

$_SERVER:这种超全局变量保存关于报头、路径和脚本位置的信息。

<?php
// 输出客户端的 User-Agent 字符串,该字符串包含了客户端的操作系统、浏览器等信息
echo $_SERVER['HTTP_USER_AGENT'] . '<hr>';
// 输出服务器的主机名
echo $_SERVER['HTTP_HOST'] . '<hr>';
// 输出客户端能够接受的 MIME 类型
echo $_SERVER['HTTP_ACCEPT'] . '<hr>';
// 输出当前执行脚本的文件名
echo $_SERVER['PHP_SELF'] . '<hr>';

四、文件上传安全:

$_FILES:文件上传且处理包含通过POST方法上传给当前脚本的文件内容。

<form action="" method="post" enctype="multipart/form-data">
    选择文件: <input type="file" name="file_upload">
    <input type="submit" value="上传">
</form>

<?php
//获取表单名为file_upload提交的文件名
$filename = @$_FILES['file_upload']['name'];
$filetype = @$_FILES['file_upload']['type'];
$filesize = @$_FILES['file_upload']['size'];
$filetmp_name = @$_FILES['file_upload']['tmp_name'];

echo "文件名:".$filename."<hr>";
echo "文件格式:".$filetype."<hr>";
echo "文件大小:".$filesize."<hr>";
echo "文件临时名:".$filetmp_name."<hr>";

五、身份验证安全:

$_COOKIE:是一个关联数组,包含通过cookie传递给当前脚本的内容。在本地客户端浏览器存储

<?php

// 获取名为username的Cookie值
$username = $_COOKIE['username'];
// 设置一个新的名为username的Cookie,值为原username的值加上'gay'
// 这个Cookie的有效期为30天,适用于整个网站(根路径)
setcookie("username", $username . 'gay', time() + (86400 * 30), "/");
//这段代码首先获取了名为username的现有 Cookie 值(如果存在),然后将其值更新为原username值加gay,并设置了一个新的 Cookie。
//所以,username = gaygaygaygaygay表明之前可能有多次执行setcookie()操作,每次都在原username值的基础上添加gay,导致这个值变得很长。

// 启动PHP会话
session_start();
// 在会话中设置username的值为'xd'
$_SESSION['username'] = 'xd';
// 输出欢迎消息,包含从会话中获取的username值
echo "Welcome, " . $_SESSION['username'] . "!!";

$username = $COOKIE['username'];
setcookie("username", $username. 'gay', time()+(86400*30), "/");
  • 这段代码首先获取了名为username的现有 Cookie 值(如果存在),然后将其值更新为原username值加上gay,并设置了一个新的 Cookie。
  • 所以,username = gaygaygaygaygay表明之前可能有多次执行setcookie()操作,每次都在原username值的基础上添加gay,导致这个值变得很长。

$_SESSION:是一个关联数组,包含当前脚本中的所有session内容。在目标服务端存储,存储记录的数据

注:因为我使用小皮面板搭建,本机充当服务器,所以session文件保存在本地

六、代码审计应用:

1、DuomiCMS变量覆盖

找变量覆盖代码->找此文件调用->选择利用覆盖Session->找开启Session文件覆盖

参考:duomicms 变量覆盖漏洞复现-CSDN博客文章浏览阅读1k次,点赞24次,收藏23次。文件common.php,通用模块文件,可能是一个对外部提交的参数做处理的文件,暂时没有问题,可以先查看哪些文件调用了这个文件。_duomicmshttps://blog.csdn.net/qq_59023242/article/details/135080259

关键点:

/interface/comment.php?_SESSION[duomi_admin_id]=10&_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_name]=zmh

2、YcCms任意文件上传

找文件上传代码->找此文件调用->找函数调用->过滤type用mime绕过

参考:https://zhuanlan.zhihu.com/p/718742254icon-default.png?t=O83Ahttps://zhuanlan.zhihu.com/p/718742254

?a=call&m=upLoad send


http://www.kler.cn/a/469171.html

相关文章:

  • Android:动态去掉RecyclerView动画导致时长累加问题解决
  • 2024.1.5总结
  • 物联网:七天构建一个闭环的物联网DEMO
  • 容器技术思想 Docker K8S
  • 欧科云链研究院:ChatGPT 眼中的 Web3
  • THREE.js的VideoTexture以及CanvasTexture在部分浏览器以及小程序webview中纯黑不起作用的解决办法
  • 人工智能深度学习物体检测之YOLOV7源码解读
  • 【C语言】_野指针
  • 利用DHCP自动分配IP
  • 手工专项测试--接口测试(jmeter)--单接口与关联接口与断言
  • 百度Android最新150道面试题及参考答案 (中)
  • 《Vue进阶教程》第三十四课:toRefs的使用
  • 【开源免费】基于SpringBoot+Vue.JS作业管理系统(JAVA毕业设计)
  • [python3]Excel解析库-xlrd
  • 简历_专业技能_熟悉分布式锁Redisson的原理以及使用
  • Linux2.4.20顶层Makefile文件分析
  • 【网络安全实验室】SQL注入实战详情
  • Fast R-CNN模型详解及分析
  • 【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 3:算法实现
  • MFC读写文件实例
  • asp.net core中的 Cookie 和 Session
  • CSS——7.CSS注释
  • 信号的产生、处理
  • S32K144 UDSdoCAN 升级刷写实现笔记
  • 【动手学电机驱动】STM32-MBD(3)Simulink 状态机模型的部署
  • Qt之屏幕录制设计(十六)