护网杯2018 easylaravel

本文详细介绍了通过EasyLaravel框架进行渗透测试的过程,包括利用SQL注入获取管理员权限、利用Phar协议实现反序列化删除缓存文件,以及最终获得flag。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 * FROMnotesWHEREauthor='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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值