easylaravel
robots.txt没啥东西
注释给了源码地址,下下来审计
/routes/web.php 查看路由
包里有composer.json 先composer install安装一下相关的包依赖(需要先安装composer)
安装完后项目根目录会有vendor文件夹 composer.lock文件。(因为网络问题一直没安装完。。。也就没composer.lock文件,后来换了阿里云的源才搞定,菜鸟教程那写着的国内源一直不行,不知道咋回事),安装完后才能得到完整源码,毕竟是用的laravel框架
php artisan route:list 查看一下已经定义的路由
因为我扫的时候看到一个upload 但自己注册的账户没有 这个功能 所以先去注册登录那看看怎么搞到admin账户,这里用户名是随便的,主要是邮箱地址
app/Http/Middleware/AdminMiddleware.php 找到admin用户邮箱
但不能用重复邮箱注册,好在有一个重置密码功能
这里点击后会发送一个token到数据库
访问Illuminate\Foundation\Auth\SendsPasswordResetEmails;
再到\Illuminate\Contracts\Auth\PasswordBroker
改密码的时候也需要这个token
\database\migrations\2014_10_12_100000_create_password_resets_table.php
/app/Http/Controllers/NoteController.php 发现有一个sql注入
SELECT * FROM
notesWHERE
author='admin' or 1=1#'
通过恶意构造后 回显(正常是无回显的)
nginx是坠吼的 ( 好麻烦,默认配置也是坠吼的
这里可以注入得到用户表中的密码,但是是经过加密处理的,无法解开还是搞不到密码
但可以通过这个sql注入搞到数据库中用来修改密码的token
test' union select 1,(select token from password_resets where email='admin@qvq.im'),3,4,5#
然后访问/password/reset/token
登录成功后访问flag页面
flag | App\Http\Controllers\FlagController@showFlag 本来应该直接打印处flag的
现在的flag是空的
Blade 视图文件使用 .blade.php 文件扩展并存放在 resources/views 目录下
但是还有一个上传功能,题目上传页面代码可通过file_exists(也就是页面中的check功能)使用phar://协议触发反序列化,用pop链删除这个编译后的模板文件
需要达成的条件:
- 1.找到可以用来删除文件的函数(unlink函数),并构造pop链
- 2.需要知道编译后的文件名
find . -name "*.php" | xargs grep "__destruct"
vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php
新建SwiftByteStream_TemporaryFileByteStream
类,将要删除的路径写入,生成phar文件,利用phar://伪协议访问该文件,反序列化结束时自动调用__destruct()也就调用了unlink函数删除文件。
下面就是找到缓存文件的路径
laravel视图缓存没有及时更新:
vendor/laravel/framework/src/Illuminate/View/Compilers/Compiler.php
编译后文件的路径由两部分构成第一部分是模板的绝对路径path,第二部分是是缓存路径,又因为缓存路径为/storage/framework/views/
根据sql注入那的提示,默认配置是最好的,得到path为/usr/share/nginx/html/resources/views/auth/flag.blade.php的sha1值
最终的路径为:
/usr/share/nginx/html/storage/framework/views/34e41df0934a75437873264cd28e2d835bc38772.php
生成phar的脚本:https://github.com/CTFTraining/huwangbei_2018_easy_laravel
easy_laravel_exp_gen.php
把生成的gif文件上传
然后去/files check一下 要更改path路径才能触发反序列化,存储的目录为storge/app/public
再次访问flag页面
参考:
https://www.cnblogs.com/tr1ple/p/11044313.html
https://xz.aliyun.com/t/2912
https://www.dazhuanlan.com/2019/12/24/5e01ca0844f13/