CHHHCHHOH 's BLOG

Laravel 路由分析

基础路由

直接看官方文档
有点像thinkphp的强制模式,路由都是routes下的这四个文件定义的,主要是web.php,其次是api.php

web路由

后面两个web路由都是我自己定义的,可以正常访问。



第一个/路由是返回一个welcome的view视图,通过一个工厂类进行实例化

先找到一个视图文件

再根据视图文件进行实例化

api路由

接下来看api.php,定义了一个auth的中间件来过滤


这里我自己另外写了一个api路由

其实跟web路由差不多,不过是要多加一个/api

middleware路由

kernel.php定义了中间件的路由


没有期待的json就跳转到login

路由注册分析

那为什么我们在Config里定义就有了这几个路由了呢?
可以看到应该是通过调用了Route类的get等方法进行了路由的注册



最后会在这个类的routes添加这个新注册的路由,所以routes里应该是所有的路由

自定义controller

这里根据官方文档写了一个UserController,有一个show函数根据id返回一个user的view视图


视图文件在resources文件夹下

路由就是在web.php里定义就可以了

CVE-2021-3129

漏洞复现

参考
开启debug模式


会根据报错提供常见的解决办法


得到一个solution,然后调用它的run方法,参数get得到


solution也是我们可以指定的

在这些解决方法中有一个MakeViewVariableOptionalSolution进行了文件的写入

往文件里写的内容是根据原本的内容进行一次替换,variableName也是我们可控的

顺便写一个文件,会爆没有这个文件

我们可以通过php的filter让写入的内容为空,相当于一个删除内容的功能

{
  "solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
  "parameters": {
    "variableName": "username",
    "viewFile": "php://filter/write=convert.iconv.utf-8.utf-16be|convert.quoted-printable-encode|convert.iconv.utf-16be.utf-8|convert.base64-decode/resource=../storage/logs/laravel.log"
  }
}


成功清空


后面生成phar的时候不知道为什么会报错,可能是我本地环境的问题,就不复现了。

漏洞路由分析

可以看到所有可以访问的路由以及对应的方法,那我们来分析除了我们定义的路由,这几个默认路由是哪里来的。


然后调用controller的method方法

可以找到是在IgnitionServiceProvider.php里定义了这几个路由

基于Laravel的mycms审计

春秋杯夏季赛的awdp出了道mycms,我去Gitee对比更改应该是mycmsv4.8

路由

web.php里只定义了/路由


Addons里有很多模块,每个模块都定义自己的路由和controller

Ads

保存配置的功能往forbid.php里写入我们可以拼接的内容


提交路由应该是/admin/addon/ads/config,post提交,不过最后写入的forbid.php不知道要怎么访问

Upgrade

可以下载任意一个文件,然后解压


应该是在app文件夹下,感觉应该可以进行覆盖

路由是/admin/addon/upgrade/version post

添加新评论