Bugku-10.闪电16鞭-php语句构造

时间:2021-08-12
本文章向大家介绍Bugku-10.闪电16鞭-php语句构造,主要包括Bugku-10.闪电16鞭-php语句构造使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

代码审计

长度要为len("return'7512158cb1d484b7a54f6c004b943687c4c66015';")=49

由源码知道,$flag可以输出,且输出后就是需要的flag

关于eval()函数

eval() 函数把字符串按照 PHP 代码来计算。

该字符串必须是合法的 PHP 代码,且必须以分号结尾。

如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false

使用短标签可以构造出echo

<? ?><?= ?>是短标签而<?php ?>是长标签,其中<?= 是代替 <? echo的,<? ?> 代替的是<?php ?>

当你发现你的PHP不支持使用短标签,请到PHP的安装目录下找到php.ini文件,使用Ctrl+F搜索short_open_tag ,

然后将等号后面的Off改成On,再重新启动Apache服务,那么短标签就会被识别了

因此构造<?=$flag;?>就可以输出了,但是flag被过滤了

$a构造一个flag字符串,然后echo $$a​,不过[]被过滤了

用大括号代替方括号

在PHP中,大括号“{}”可以起到如下作用:

  • 将多个独立语句合并为一个复合语句,例如 if ... else ...中经常如此使用
  • 在变量间接引用中进行定界,避免歧义。例如 ${$my_var[8]}与${$my_var}[8]的区分
  • 用于指示字符串变量中的单个字符(下标从0开始),例如
$my_str="1234";

$my_str{1}='5';  //现在 $my_str 内容为 '1534'

因此最后构造

?flag=$a='fla1';$a{3}='g';?><?=$$a;?>111111111111111111

第一个;?>是为了让代码开头的<?php闭合,不然<?=$$a?>无法执行

原文地址:https://www.cnblogs.com/AlucardLink/p/15134822.html