这篇文章主要介绍了PHP中变量覆盖漏洞的案例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。
1.提取()变量覆盖
<强> 1.提取()强>
提取()函数从数组中将变量导入到当前的符号表。
该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。
该函数返回成功设置的变量数目。
提取(数组、extract_rules前缀)
参考引用:https://www.runoob.com/php/func-array-extract.html
<强>,强>
& lt; PHP ? 提取($ _GET);, 本市echo $名字# 39;& lt; br> & # 39;; echo 年龄# 39;公司美元& lt; br> & # 39;; 本市echo $电话# 39;& lt; br> & # 39;;//得到传参:?名字=xiaohua&年龄=22岁,电话=112323123//结果://小华//22//112323123 ?在
<强> 2.清洁技术基金中提取()导致的变量覆盖强>
& lt; php ? $国旗=& # 39;flag.php& # 39;; 提取($ _GET);, 如果收取(前) { ,$内容=修剪(file_get_contents(美元标志)); 如果(前==美元内容) { ,回声# 39;旗帜{xxxxxxx} & # 39;; } 其他的 { ,回声# 39;Oh.no& # 39;; } } ?在
我们大致分析是要求我们得到传参进去值会经过提取()函数下来会有两个如果第一个如果判断前这个变量是否存在存在则继续执行如果里面的
使用file_get_contents()读取国旗变量里面的文件传递给内容变量之后再进行判断传进来前变量的值等不等于美元内容如果等于则打印出旗!
这里我们构造因为通过提取()函数我们传进的值会变成一个变量例如我们得到传入前=1则会存在前=1美元所以我们构造得到传参pyaload:
得到传参有效载荷:前=美元,美元标志=,
引用>这样再程序中会有两个为空的变量而$国旗=空则覆盖了上面的国旗中美元的值这样进行判断都是空的所以为真则得到国旗
<强> 3。漏洞修复强>
不要使用....
参考官方文档修改 extract_rules里面的值为EXTR_SKIP如:提取($ _GET EXTR_SKIP);2. php动态变量覆盖
<强> 1。动态变量覆盖强>
PHP动态变量是指一个变量名的变量名可以动态的设置和使用,一个变量获取另一个变量的值作为这个变量的变量名。
& lt; PHP ? 酒吧=美元,“a"; $ Foo=癇ar"; 美元的世界=癋oo"; $你好=皐orld"; 一美元=癏ello"; echo 美元;//你好 echo $ $;//世界 echo $ $ $;//foo echo $ $ $ $ $;//酒吧 echo $ $ $ $ $ $;//echo $ $ $ $ $ $ $;//你好 echo $ $ $ $ $ $ $ $;//世界 ?在周大福中的动态变量覆盖
https://www.cnblogs.com/xhds/p/12586928.html周大福中的动态变量覆盖
<强> 3。漏洞修复强>
避免使用这个
3. parse_str()变量覆盖
<强> 1. parse_str() 强>
parse_str()函数把查询字符串解析到变量中。
注释:<>强如果未设置数组参数,由该函数设置的变量将覆盖已存在的同名变量。强>
注释:php。ini文件中的magic_quotes_gpc设置影响该函数的输出。如果已启用,那么在parse_str()解析之前,变量会被addslashes()转换。
parse_str(字符串、数组)参考引用:https://www.runoob.com/php/func-string-parse-str.html
,
& lt; php ? parse_str (“name=xiaohua&年龄=22“); echo $干净自己的名字;& lt; br>“; echo 年龄;美元 比;//小华//22<强> 2.周大福中parse_str()导致的变量覆盖强>
& lt; php ? error_reporting (0); $国旗=肮靮小华- 2020}“; if (空($ _GET [& # 39; id # 39;])), { ,中将(__FILE__); ,死(); },{else =,美元a “www.xiaohua.com";=,美元id $ _GET [& # 39; id # 39;]; ,@parse_str ($ id);//,if (美元[0],!=,& # 39;QNKCDZO& # 39;,,,, md5(美元[0]),==,md5 (& # 39; QNKCDZO& # 39;)), { echo 才能;美元标志; ,}else { 退出才能(“no no"); ,} } ?在分析代码判断得到传入的id值是否为空为空的话输出源码终止程序,否则的话则接收id值经过parse_str()然后呢如果判断一个美元[0]的值要不等于QNKCDZO
PHP中变量覆盖漏洞的案例分析