Web开发-PHP应用&原生语法&全局变量&数据接受&身份验证&变量覆盖&任意上传(代码审计案例)

DW+ PHPStorm + PhpStudy + Navicat Premium

DW:HTML&JS&CSS开发

PHPStorm : 专业PHP开发IDE

PhpStudy :Apache MYSQL环境

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

参考:https://tutorials.wcode.net/php

变量覆盖安全:

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

存在这种变量覆盖安全问题

数据接收安全:

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

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

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

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

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

这里z是走到post提交,用hackbar试一下

成功

或者使用postman进行提交参数

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

文件上传安全:

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

上面是源码,下面是浏览器展示情况,然后我们使用file函数看一下他的作用

下面添加一段代码,就是我们使用$_FILES获取上传文件的名字,并且用echo输出,看一下

复制代码
<?php
$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传递给当前脚本的内容。

本地客户端浏览器存储

cookie也可以提交数据

这里就定义了一个COOKIE提交方式

这里就传完了参数

然后设置一下cookie,看一下返回数据

复制代码
<?php
$user='zhaoyang';
setcookie(user,$user,time()+3600);

这里看一下我们抓包后的数据

$_SESSION:是一个关联数组,包含当前脚本中的所有session内容。

目标服务端存储,存储记录的数据

代码审计应用:

1、DuomiCMS变量覆盖

找变量覆盖代码->找此文件调用->

选择利用覆盖Session->找开启Session文件覆盖

这里开一个网站

复制代码
知识点:
$x='a';
$a='bbb';
$$x='ccc';
echo $a;
最后输出的是cccc,也就是说$$x=$a

这里看一下参考文章

复制代码
foreach(Array('_GET','_POST','_COOKIE') as $_request)
{
	foreach($$_request as $_k => $_v) ${$_k} = _RunMagicQuotes($_v);
}

这里第一行就是进行一边遍历,遍历_GET,_POST,_COOLIE,然后再依次赋值给变量$_request

_k =\> _v这个写法等同于键名和键值,类似于a=@_REQUERST['x'];

复制代码
foreach($$_request as $_k => $_v)
  • $$_request代表的是含有全局变量($_GET、$_POST、$_COOKIE)数组
  • 动态的调用对应的全局变量,将每个数组元素的键值对分别赋值为$_k$_v

这里全局搜索一下,哪个文件包含了common.php这个文件并且开了session

这里我们打开了config.php文件,然后发现其中的函数如果getUserID()==-1就会跳转

这里定位搜索一下,找到了getUserID功能,发现了是check.admin.php这个文件的,我们过去看一下

找到了,这里第34-43行发现了他的登录类,也就是我们要输入下面三个参数

复制代码
var $keepUserIDTag = "duomi_admin_id";
var $keepgroupidTag = "duomi_group_id";
var $keepUserNameTag = "duomi_admin_name";
这就是我们要输入的,大概能懂是干嘛的,存储识别用户的id,组id和用户名这三个变量

然后我们的思路就是修改session伪造管理员身份,因为这一段代码

在admin_manager.php这段代码中,我们发现了groupid=1是管理员,但是等于其他数字就是用户和未知类型,也就是我们的之前推测的用户分组id

复制代码
_SESSION[duomi_admin_id]=10&_SESSION[duomi_group_id]=1&_SESSION[duomi_admin_name]=zmh

所以payload就是这个样子,为什么是_SESSION呢,因为前面的引用有foreach($$_request as _k =\> _v),这里$_request就能理解为我们传入的参数,_SESSION,然后后面就是键名和键值,因此传入参数后应该是

_SESSION as duomi_admin_id =\> 10 \&_SESSION as duomi_group_id =>1 & $_SESSION as duomi_admin_name =>xxxx

就是这样,懂了噻,这不就对应了我们看到的代码这一段了吗

复制代码
if($groupid==1){
    return "系统管理员";
}else if($groupid==2){
    return "网站编辑员";
}else{
    return "未知类型";
}

思路

uomiphp/common.php存在可利用变量覆盖代码

2、找谁引用了common.php调用了这个代码

3、找到覆盖什么,覆盖的点去利用,选择覆盖session为了去登录后台,如果$_SESSION[duomi_group_id]=1就是管理员

4、但是需要有session_start();由它才能进行session接收

5、需要引用common.php还要有session_start()代码的文件

参考:

https://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

这里复现,就是访问一下,用我们构造的paload,这时服务器会记录我们的session,所以我们再次登录后台就发现有了管理员的权限

2、YcCms任意文件上传

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

参考:

https://zhuanlan.zhihu.com/p/718742254

?a=call&m=upLoad send

搭建这个网站

源码

这里找一个getPath,指向了这个文件

这里找到了验证类型的函数,也是这个文件下,我们再看一下是怎么验证的

在这里就找到了他的验证类型,只验证了image/png这种其他的没有,所以只要符合image/png就都能上传成功

相关推荐
微学AI7 小时前
Rust语言的深度剖析:内存安全与高性能的技术实现操作
java·安全·rust
xixixi777779 小时前
了解一下Sentry(一个开源的实时错误监控平台)
前端·安全·开源·安全威胁分析·监控·sentry
不爱学习的YY酱11 小时前
告别局域网束缚!Excalidraw结合cpolar随时随地画流程图
安全·流程图·cpolar
Kapibalapikapi12 小时前
家用无线网络设置方案
网络
老蒋新思维12 小时前
借陈修超之智,搭建 AI 与 IP 的创新增长桥梁|创客匠人
网络·人工智能·网络协议·tcp/ip·ip·知识付费·创客匠人
北京耐用通信13 小时前
“耐达讯自动化Profibus总线光端机在化工变频泵控制系统中的应用与价值解析”
人工智能·科技·物联网·网络安全·自动化·信息与通信
遇见火星13 小时前
Linux 网络性能测试实战:用 iperf3 精准测出真实带宽与丢包率
linux·网络·php·iperf3
无心水13 小时前
【分布式利器:RocketMQ】2、RocketMQ消息重复?3种幂等方案,彻底解决重复消费(附代码实操)
网络·数据库·rocketmq·java面试·消息幂等·重复消费·分布式利器
重启编程之路13 小时前
python 基础学习socket -TCP编程
网络·python·学习·tcp/ip
Hqst_xiangxuajun14 小时前
服务器主板选用网络变压器及参数配置HX82409S
运维·服务器·网络