欢迎访问 生活随笔!

凯发ag旗舰厅登录网址下载

当前位置: 凯发ag旗舰厅登录网址下载 > 编程语言 > php >内容正文

php

php extract 变量覆盖,extract变量覆盖 -凯发ag旗舰厅登录网址下载

发布时间:2024/10/14 php 35 豆豆
凯发ag旗舰厅登录网址下载 收集整理的这篇文章主要介绍了 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

bugkuctf题库中的一道代码审计题,通过巧妙利用file_get_contents函数特性来绕过extract变量覆盖

源代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

$flag='../readme.txt';

extract($_get);

if(isset($shiyan)){

@$content=trim(file_get_contents($flag));

if($shiyan == $content){

echo 'flag{xxx}';

}

else{

echo 'oh,no';

}

}

?>

首先先弄明白几个函数:

extract:该函数将数组的键名作为变量名,键名对应的键值作为对应的变量值,返回值为设置成功的变量个数

也就是说这里的extract($_get)将我们get的参数名作为变量名,参数值作为变量值

例子如下:

1

2

3

4

5

6

7

8

9

10

11

12

if(isset($_get['shiyan']) $$ isset($_get['flag'])){

$a=extract($_get);

echo '$a:'.$a;

echo '
';

echo '$shiyan:'.$shiyan;

echo '
';

echo '$flag:'.$flag;

}

?>

输出结果:

成功设置了两个变量,$shiyan和$flag,所以$a=2

file_get_contents:将文件内容作为字符串输出

例子如下:

1

2

3

4

5

6

7

$flag='../readme.txt';

$content=file_get_contents($flag);

echo $content;

?>

输出结果

这里注意file_get_contents函数里的参数是$flag,也就是说我们get进来的参数flag值会将之前的flag值覆盖掉,从而造成变量覆盖,而我们输入的flag值如果不为文件名,函数执行错误,$content会被赋值为空

例子如下:

1

2

3

4

5

6

7

8

9

10

$flag='../readme.txt';

if(isset($_get['flag'])){

extract($_get);

@$content=file_get_contents($flag);

echo $content.'1';

}

?>

输出结果:

要得到最终要的flag,就必须要让变量content值等于变量shiyan的值

所以我们可以让shiyan值也为空,这样flag值任意输入,只要不为文件名,就一定相等

另外,即使shiyan值为空,isset($shiyan)也是返回true的

1

2

3

4

5

6

7

8

$shiyan="";

if(isset($shiyan)){

echo "11";

}

?>

输出结果:

总结

以上是凯发ag旗舰厅登录网址下载为你收集整理的的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发ag旗舰厅登录网址下载网站内容还不错,欢迎将凯发ag旗舰厅登录网址下载推荐给好友。

  • 上一篇:
  • 下一篇:
网站地图