1. 极安网首页
  2. 网络安全技术

PbootCMS V3.0.1任意代码执行漏洞

PbootCMS V3.0.1任意代码执行漏洞-极安网

漏洞分析

先查看apps\home\controller\ParserController.php中的parserIfLabel方法的两个if标签的过滤项

  1. if (preg_match_all('/([\w]+)([\/\*\<\>\%\w\s\\\\]+)?\(/i', $matches[1][$i], $matches2)) {
  2.                     foreach ($matches2[1] as $value) {
  3.                         if (function_exists($value) && ! in_array($value$white_fun)) {
  4.                             $danger = true;
  5.                             break;
  6.                         }
  7.                     }
  8.                 }
  1. if (preg_match('/(\$_GET\[)|(\$_POST\[)|(\$_REQUEST\[)|(\$_COOKIE\[)|(\$_SESSION\[)|(file_put_contents)|(file_get_contents)|(fwrite)|(phpinfo)|(base64)|(`)|(shell_exec)|(eval)|(assert)|(system)|(exec)|(passthru)|(pcntl_exec)|(popen)|(proc_open)|(print_r)|(print)|(urldecode)|(chr)|(include)|(request)|(__FILE__)|(__DIR__)|(copy)|(call_user_)|(preg_replace)|(array_map)|(array_reverse)|(getallheaders)|(get_headers)|(decode_string)|(htmlspecialchars)/i', $matches[1][$i]))

关于第一处的判断,我们依然可以使用在函数名和括号之间插入控制字符的方法来绕过该处校验,对于第二处,可以看到在黑名单中相较于上个分析版本(2.0.9)添加了getallheaders的黑名单判断,于是该处我们需要寻找新的方法来实现代码执行的目的,这让我想到了array_filter函数

PbootCMS V3.0.1任意代码执行漏洞-极安网

通过该函数我们可以实现执行php代码,例如array_filter(['whoami'],'system');

那么接下来我们需要思考如何绕过黑名单中对system的检测,在这里我们依然可以将system放到header头中,这里可以使用session_id(session_start())的方法来取到session的值,我们可以将session的值置为system,就可以成功的调用system函数来执行命令了,通过上面的思路写出利用payload使用的时候却发生了如下问题

PbootCMS V3.0.1任意代码执行漏洞-极安网

该处的冒号被替换成了@符号

原创文章,作者: Admin ,转载请注明出处:https://secvery.com/2110.html