登录后台

页面导航

本文编写于 117 天前,最后修改于 115 天前,其中某些信息可能已经过时。

基础路由

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

2024-07-16T05:55:09.png

web路由

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

2024-07-16T05:56:58.png

2024-07-16T05:56:39.png

第一个/路由是返回一个welcome的view视图,通过一个工厂类进行实例化
2024-07-16T06:00:49.png

先找到一个视图文件
2024-07-16T06:04:13.png

再根据视图文件进行实例化
2024-07-16T06:06:40.png

2024-07-16T06:10:07.png

api路由

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

2024-07-16T06:47:11.png

这里我自己另外写了一个api路由
2024-07-16T07:52:09.png

其实跟web路由差不多,不过是要多加一个/api
2024-07-16T07:51:50.png

middleware路由

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

2024-07-16T06:50:02.png

没有期待的json就跳转到login
2024-07-16T06:54:43.png

路由注册分析

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

2024-07-17T13:24:42.png

2024-07-17T13:27:04.png

最后会在这个类的routes添加这个新注册的路由,所以routes里应该是所有的路由
2024-07-17T13:27:51.png

自定义controller

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

2024-07-16T07:31:46.png

视图文件在resources文件夹下
2024-07-16T07:34:29.png

路由就是在web.php里定义就可以了
2024-07-16T07:35:59.png

2024-07-16T07:36:46.png

CVE-2021-3129

漏洞复现

参考
开启debug模式

2024-07-17T03:21:10.png

会根据报错提供常见的解决办法
2024-07-17T03:22:02.png

2024-07-17T03:24:06.png

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

2024-07-17T08:49:15.png

solution也是我们可以指定的
2024-07-17T08:50:24.png

在这些解决方法中有一个MakeViewVariableOptionalSolution进行了文件的写入
2024-07-17T08:42:20.png

往文件里写的内容是根据原本的内容进行一次替换,variableName也是我们可控的
2024-07-17T08:53:11.png

顺便写一个文件,会爆没有这个文件
2024-07-17T11:02:56.png

我们可以通过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"
  }
}

2024-07-17T09:21:05.png

成功清空
2024-07-17T09:13:16.png

2024-07-17T09:13:35.png

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

漏洞路由分析

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

2024-07-17T13:10:01.png

然后调用controller的method方法
2024-07-17T13:12:27.png

可以找到是在IgnitionServiceProvider.php里定义了这几个路由
2024-07-17T13:20:08.png

基于Laravel的mycms审计

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

路由

web.php里只定义了/路由

2024-07-18T03:04:27.png

Addons里有很多模块,每个模块都定义自己的路由和controller
2024-07-18T03:09:54.png

Ads

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

2024-07-18T03:14:58.png

提交路由应该是/admin/addon/ads/config,post提交,不过最后写入的forbid.php不知道要怎么访问
2024-07-18T03:16:19.png

Upgrade

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

2024-07-18T07:04:57.png

应该是在app文件夹下,感觉应该可以进行覆盖
2024-07-18T07:09:07.png

路由是/admin/addon/upgrade/version post
2024-07-18T07:11:34.png