PHP的一些特性

看了p牛的博客,正好学习一波。

1
2
3
4
5
<?php
if(!preg_match('/[a-z0-9]/is',$_GET['shell'])) {
eval($_GET['shell']);
}
?>

绕过以上代码的限制达到执行命令的目的。

PHP的异或操作

两个字符串进行异或操作,得到的结果还是一个字符串,因此,用两个非数字字母的字符进行异或操作得到需要的字符。
比如想得到字母’a’,我们反向异或即可。

1
2
3
eg: 
$_ = 'a'^'`';
echo urlencode($_);

以此类推可得到所有字母与数字。
在php5.x版本中 可以利用 assert($_POST[]) 来执行命令。
在php7.x版本中,利用file_put_contents函数getshell。

取反

详情见p牛博客。

PHP字符变量的算数运算

阅读[PHP文档](http://php.net/manual/zh/language.operators.increment.php)
意思就是:

1
2
3
$_ = 'Z';
$_++;
echo $_; //AA

而 ‘a++’ => ‘b’ ‘b++’ => ‘c’,因此我们只需要一个字母即可得到所有字母。
在PHP中强制连接数组和字符串,数组将被转换成字符串Array。(echo ‘’.[]; 返回 Array)

1
2
3
4
$_=[];
$_=@"$_"; // $_='Array';
$_=$_['!'=='@']; // $_=$_[0];
利用以上代码取出字母'A'。

剩下部分利用文档中说的特性获取其他所需要的字母,与以上俩个类似 构成assert($_POST[])即可。

文章目录
  1. 1. PHP的异或操作
  2. 2. 取反
  3. 3. PHP字符变量的算数运算