当前位置:网站首页>【PHP特性-变量覆盖】函数的使用不当、配置不当、代码逻辑漏洞
【PHP特性-变量覆盖】函数的使用不当、配置不当、代码逻辑漏洞
2022-07-05 03:33:00 【黑色地带(崛起)】
目录
一、总述
发现方法:
代码审计
产生原因:
函数的使用不当、配置不当、代码逻辑漏洞
利用:
通过前端传入的值去覆盖程序中的局部变量或全局变量,从而达到变量覆盖
使用场景:
$$ 使用不当
extract() 、parse_str() 函数使用不当
import_request_variables() 使用不当,开启了全局变量注册(PHP 4 >= 4.1.0, PHP 5 < 5.4.0)
……
二、extract函数
语法:
extract(array,extract_rules,prefix)
参数 描述 array 必需。规定要使用的数组。 extract_rules 可选。extract() 函数将检查每个键名是否为合法的变量名,同时也检查和符号表中已存在的变量名是否冲突。对不合法和冲突的键名的处理将根据此参数决定。
可能的值:
- EXTR_OVERWRITE - 默认。如果有冲突,则覆盖已有的变量。
- EXTR_SKIP - 如果有冲突,不覆盖已有的变量。
- EXTR_PREFIX_SAME - 如果有冲突,在变量名前加上前缀 prefix。
- EXTR_PREFIX_ALL - 给所有变量名加上前缀 prefix。
- EXTR_PREFIX_INVALID - 仅在不合法或数字变量名前加上前缀 prefix。
- EXTR_IF_EXISTS - 仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。
- EXTR_PREFIX_IF_EXISTS - 仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。
- EXTR_REFS - 将变量作为引用提取。导入的变量仍然引用了数组参数的值。
prefix 可选。请注意 prefix 仅在 extract_type 的值是 EXTR_PREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS 时需要。如果附加了前缀后的结果不是合法的变量名,将不会导入到符号表中。
前缀和数组键名之间会自动加上一个下划线。
示例:
<?php
$a = false;
extract($_GET);
if ($a) {
echo "flag{...}";
} else {
echo "……";
}
?>extract函数将GET传入的数据转换为变量名和变量的值
输入?a=1可将$a的值变为true----->获得flag
三、parse_str函数
语法:
parse_str(string,array)
参数 描述 string 必需。规定要解析的字符串。 array 可选。规定存储变量的数组的名称。该参数指示变量将被存储到数组中。 未设置 array 参数,由该函数设置的变量将覆盖已存在的同名变量
parse_str函数的作用是解析字符串并注册成变量
在注册变量之前不会验证当前变量是否存在,直接覆盖掉已有变量
也就是把输入的字符串变成变量
示例:
<?php
$a = false;
parse_str($_SERVER['QUERY_STRING']);
if ($a) {
echo "flag{...}";
} else {
echo "……";
}
?>输入?a=1
四、import_request_variables函数
语法:
bool import_request_variables ( string $types [, string $prefix ] )
参数 描述 $types 指定需要导入的变量,可以用字母 G、P 和 C 分别表示 GET、POST 和 Cookie,这些字母不区分大小写,所以你可以使用 g 、 p 和 c 的任何组合。POST 包含了通过 POST 方法上传的文件信息。注意这些字母的顺序,当使用 gp 时,POST 变量将使用相同的名字覆盖 GET 变量。任何 GPC 以外的字母都将被忽略 $prefix 变量名的前缀,置于所有被导入到全局作用域的变量之前。所以如果你有个名为 userid 的 GET 变量,同时提供了 pref_ 作为前缀,那么你将获得一个名为 $pref_userid 的全局变量。虽然 prefix 参数是可选的,但如果不指定前缀,或者指定一个空字符串作为前缀,你将获得一个 E_NOTICE 级别的错误 PHP 4 >= 4.1.0, PHP 5 < 5.4.0
示例:
<?php
$a = false;
import_request_variables('G');
if ($a) {
echo "flag{...}";
} else {
echo "……";
}
?>排在前面的会覆盖排在后面的字符传入参数的值,若为“GP”,且GET和POST同时传入了a参数,则POST传入的a会被忽略
五、配置不当
前提:
当PHP配置register_globals=ON时,利用register_globals的特性,复现全局变量覆盖漏洞
示例:
<?php
if ($a) {
echo "flag{...}";
} else {
echo "……";
}
?>用户传入参数auth=1即可进入if语句块
如果在if语句前初始化$a变量,就不会触发了
六、代码逻辑漏洞
$$导致的变量覆盖
$$(可变变量)
一个变量的变量名可以动态的设置和使用
这个可变变量获取了一个普通变量的值作为这个可变变量的变量名
<?php
$a="hello";//赋值
$$a="everybody";
//使a变量的值作为变量名
echo "$a ${$a}";
//输出:hello everybody
echo "$a $hello";
//同样输出:hello everybody
?>示例:
<?php
$a = false;
foreach($_GET as $key => $value){
$$key = $value;
}
if ($a) {
echo "flag{...}";
} else {
echo "……";
}
?>通过foreach循环遍历数组(如,$_GET、$_POST等),这里将GET传入的参数注册为变量,用户输入“?auth=1”就又成功绕过了判断,获得了flag
边栏推荐
- Logstash、Fluentd、Fluent Bit、Vector? How to choose the appropriate open source log collector
- 001 chip test
- El select, El option drop-down selection box
- Six stone programming: advantages of automated testing
- [daily problem insight] Li Kou - the 280th weekly match (I really didn't know it could be so simple to solve other people's problems)
- When sqlacodegen generates a model, how to solve the problem that the password contains special characters?
- Machine learning experiment report 1 - linear model, decision tree, neural network part
- Acwing game 58 [End]
- Azkaban overview
- Binary heap implementation (priority queue implementation)
猜你喜欢
Leetcode42. connect rainwater
2021 Li Hongyi machine learning (2): pytorch
Sqoop命令
Quick start of UI component development of phantom engine [umg/slate]
el-select,el-option下拉选择框
Blue Bridge Cup single chip microcomputer -- PWM pulse width modulation
Easy processing of ten-year futures and stock market data -- Application of tdengine in Tongxinyuan fund
LeetCode146. LRU cache
Why do some programmers change careers before they are 30?
Flume配置4——自定义MYSQLSource
随机推荐
v-if VS v-show 2.0
Kubernetes -- cluster expansion principle
How to make OS X read bash_ Profile instead of Profile file - how to make OS X to read bash_ profile not . profile file
Redis6-01nosql database
Monitoring web performance with performance
Asemi rectifier bridge 2w10 parameters, 2w10 specifications, 2w10 characteristics
[安洵杯 2019]不是文件上传
Idea inheritance relationship
001 chip test
Basic authorization command for Curl
Jd.com 2: how to prevent oversold in the deduction process of commodity inventory?
How to learn to get the embedding matrix e # yyds dry goods inventory #
IPv6 experiment
2021 Li Hongyi machine learning (1): basic concepts
Yuancosmic ecological panorama [2022 latest]
【软件逆向-基础知识】分析方法、汇编指令体系结构
In MySQL Association query, the foreign key is null. What if the data cannot be found?
Six stone programming: advantages of automated testing
glibc strlen 实现方式分析
Kubernetes - identity and authority authentication