php的可变变量覆盖漏洞
2022/9/4 1:25:18
本文主要是介绍php的可变变量覆盖漏洞,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
题目如下:
<?php highlight_file('source.txt'); echo "<br><br>"; $flag = 'xxxxxxxx'; $giveme = 'can can need flag!'; $getout = 'No! flag.Try again. Come on!'; if(!isset($_GET['flag']) && !isset($_POST['flag'])){ exit($giveme); } if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){ exit($getout); } foreach ($_POST as $key => $value) { $$key = $value; } foreach ($_GET as $key => $value) { $$key = $$value; } echo 'the flag is : ' . $flag; ?>
代码分析:
第一个if判断get请求和post请求的参数是否为flag,第二个if判断get请求参数和post请求参数为flag的值是否为flag。综上,代码限制的条件是,要有get和post的请求参数为flag,注意这里这是要求有这个参数而已,没有说参数唯一。其次要求我们参数为flag时其值都不能出现flag。接着分析,第一个foreach是关于post请求的,把参数名赋值给变量key,把参数值赋值给变量value,于是假设参数名为flag,参数值为a,则第一个foreach得到的是:$flag = a。即把变量flag重新赋值为a。同理得到第二个foreach得到的结果:$flag = $a。即变量flag的值为变量a的值。
漏洞利用:
因为最后要输出flag的值,而经过前面的代码又会把flag的值覆盖掉,于是这里解决的问题是:如何让变量flag不被覆盖,原样输出。
前面说了参数可以不为一,所以我们思路是:通过另外一个参数作为变量(假设为a)先获取原来flag的值,然后去获取变量a的值,则能够到达我们获取原来的值的目的。
payload:
GET:a=flag&flag=a
POST:anything(这里post传参不重要)
这篇关于php的可变变量覆盖漏洞的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-03-29env: php: no such file or directory
- 2024-03-01php foreach break
- 2024-02-26Exception参数 php-icode9专业技术文章分享
- 2023-12-30PHP文件批量上传-icode9专业技术文章分享
- 2023-12-30thinkphp6 withJoin-icode9专业技术文章分享
- 2023-12-27MagicArray:像php一样,让Go业务代码不再卷!
- 2023-11-18centos7编译安装PHP教程。
- 2023-11-18centos7编译安装phpMyAdmin教程。
- 2023-10-13唱衰这么多年,PHP 仍然还是你大爷!
- 2023-07-25PHP8,性能更好,语法更好,类型安全更完善