get_defined_functions

获取已定义函数,返回一个数组 ,包括用户定义函数和内置函数,内置函数通过$arr[‘internal’]获取,用户定义函数通过$arr[‘user’]获取

fuzz正则

fuzz脚本

1
2
3
4
5
6
7
8
9
10
<?php
$arr=get_defined_functions()['internal'];
foreach ($arr as $key => $value) {
if(preg_match('/[0-9]/i', $value)){
continue;
}
var_dump($value);
echo "<br>";
}
?>

这里限制函数名中不含有数字0-9

隐藏webshell

通过索引调用system等函数,写shell

1
2
3
4
5
6
7
8
9
$arr=get_defined_functions()['internal'];
foreach ($arr as $key => $value) {
if (preg_match('/system/i', $value)) {
var_dump(array_search($value, $arr));
}
}
var_dump($arr[355]);

//输出system

get_declared_classes

获取已定义的类,返回由已定义类的名字所组成的数组

获取已定义类的已定义方法

1
2
3
4
5
6
7
8
9
10
<?php
$arr=get_declared_classes();
foreach ($arr as $key => $value) {
#echo $value."<br>";
$value_func=get_class_methods($value);
echo $value;
var_dump($value_func);
echo "<br>";
}
?>

获取指定类的指定方法

1
2
3
4
5
6
7
8
9
10
11
<?php
$arr=get_declared_classes();
foreach ($arr as $key => $value) {
$value_func=get_class_methods($value);
if (in_array('call', $value_func)) {
echo $value."-->";
var_dump($value_func);
echo "<br>";
}
}
?>

动态声明类

类也可以利用动态变量的特性去声明

1
2
3
4
5
6
7
8
<?php
class test{

}
$a='test';
$b=new $a;
var_dump($b);
?>

fuzz异或

脚本1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$start='_GET';
$i=0;
$c='';
$str_1='';
$str_2='';
for ($k=0; $k <strlen($start) ; $k++) {
for ($i=0; $i < 256; $i++) {
for ($j=1; $j < 256; $j++) {
if ($start[$k]==chr($j^$i)) {
/* $str_1 .= "%".(string)dechex($i);
$str_2 .= "%".(string)dechex($j);*/
$str_1 .= urlencode(chr($i));
$str_2 .= urlencode(chr($j));
break;
}
break;
}
}
}
echo $str_1."<br>";
echo $str_2;
?>

脚本2

1
2
3
4
5
6
<?php
$_ = $_GET['a'] ^ $_GET['b'];
print(urlencode($_));

//测试
?a=_GET&b=%ff%ff%ff%ff