这道题点开始注册登录界面,但是点击注册按钮会提示Not Allowed。

但是查看源码会发现

这里是直接跳出了Not Allowed,构造POST请求,通过burp发包注册一个账号。

注册成功,登录后又上传和下载两个功能,我们发现下载有一个目录穿越,尝试读取,/WEB-INF/web.xml.

由于上传功能只有管理员可以使用它,因此可以根据xml的内容构造出,

../../WEB-INF/classes/com/web/servlet/registerServlet.class,然后下载这个class文件,查看注册的源码 。

可以使用jd-jui反编译class文件,看到源码。可以很容易就找到针对role的处理。

String var = req.getParameter("data").replaceAll(" ", "").replace("'", "\"");Pattern pattern = Pattern.compile("\"role\":\"(.*?)\"");Matcher matcher = pattern.matcher(var);while (matcher.find())role = matcher.group(); if (!StringUtils.isNullOrEmpty(role)) {var = var.replace(role, "\"role\":\"guest\"");person = (Person)gson.fromJson(var, Person.class);} else {person = (Person)gson.fromJson(var, Person.class);person.setRole("guest");} 

此时可以有两种方法,绕过,正则表达式中包含了

"\"role\":\"(.*?)\"",

会把所有内容进行完整匹配,但是JSON中的内联注释不会影响其解析,因此可以使用注释来破坏正则匹配,为了让其不直接走if的另外一个分支,我们还是需要让正则匹配有结果从而保证role变量有内容。JSON中键值一样的数据解析时后面的会覆盖前面的,因此可以构造如下payload

data={"username":"july", "password":"123456","role":"superuser", "role"/**/:"admin"}

可以注意到这里取得的正则匹配结果是最后一个,在可以使用注释的情况下,可以构造如下payload。

{"username":"july","password":"123456","role":"admin"/*,"role":"guest"*/}

利用这个payload注册一个管理员账户,登陆管理员账户之后,再根据构造../../WEB-INF/classes/com/web/servlet/uploadServlet.class下载后查看上传文件的源码。

if (checkExt(ext) || checkContent(item.getInputStream())) {req.setAttribute("error", "upload failed");req.getRequestDispatcher("../WEB-INF/upload.jsp").forward(req, resp);
}
item.write(new File(uploadPath + File.separator + name + ext));
req.setAttribute("error", "upload success!");

我们看到内容检测和扩展名检测完成之后,并没有退出,而是继续保存了文件,因此我们可以尝试想../../static/下上传一句话,使用蚁剑连接即可获取flag。

[GKCTF 2021]babycat相关推荐

  1. [GKCTF 2021]XOR

    [GKCTF 2021]XOR 题目 from Crypto.Util.number import * from hashlib import md5a = getPrime(512) b = get ...

  2. [GKCTF 2021]Random

    [GKCTF 2021]Random 题目 import random from hashlib import md5def get_mask():file = open("random.t ...

  3. CTF——MISC习题讲解(GKCTF 2021系列)

    CTF--MISC习题讲解(GKCTF 2021系列) 前言 接下来陆续给大家复现一些赛事的杂项习题讲解,因为本人也是小白入门,有些题目做的不对还请各位大佬多多包涵. 一.[GKCTF 2021]签到 ...

  4. [GKCTF 2021]RRRRsa

    复现[GKCTF 2021]RRRRsa 拿到题目后,准备操作,额,,, 看了看大佬的wp,恍然大悟,分享一下解题的思路.(部分题目如下) 一般看到这种像hint1的式子,都需要用gcd(,n)去分解 ...

  5. [GKCTF 2021]hackme

    [GKCTF 2021]hackme 进入题目后,题目如上所示,查看页面源代码 提示nosql,这里推荐WHOAMI大佬的文章 这里源代码我们也看到了php头,那我们就看大佬文章里php中的nosql ...

  6. [GKCTF 2021]babycat-revenge

    `[GKCTF 2021]babycat-revenge 一进入题目界面如上所示,简简单单,没法注册,登录试了下弱口令还有注入都不是,也没有什么其他页面 找不到线索就抓个包来看看 好家伙,这个注册页面 ...

  7. GKCTF 2021]excel 骚操作

    题目链接 https://buuoj.cn/challenges#[GKCTF%202021]excel%20%E9%AA%9A%E6%93%8D%E4%BD%9C 打开flag.xlsx 估计和wo ...

  8. [GKCTF 2021]FireFox Forensics

    题目链接 https://buuoj.cn/challenges#[GKCTF%202021]FireFox%20Forensics 解题过程 打开题目,有两个文件分别是firfox的记录文件(log ...

  9. buuctf [GKCTF 2021]你知道apng吗 <apng图片格式的考察>

    下载文件得到个 apng的文件 其可以用火狐打开查看 这里需要下载一个工具: apngdis_gui.exe 来分解这个apng图片 打开来看看 1.这张图片是扭曲的需要拉扯一下 用在线ps 扫描得到 ...

最新文章

  1. html保存blob,HTML文本图像并保存为Blob到数据库
  2. 我被面试官问到的问题-5
  3. 1.20 正则表达式详解
  4. 在Spring MVC中使用注解的方式校验RequestParams
  5. 腾讯上海某实验室SQL面试题——查询最后任职信息
  6. 第一章:线性空间和线性变换
  7. Visual Stdio下安装WTL的向导Widzard
  8. PYTHON 处理JSON文件(新建key值Findex,并将歌手名字转换为大写首字母作为value值)
  9. L1-010 比较大小 (10 分)—团体程序设计天梯赛
  10. outlook qr码在哪里_胡志明市第一次将QR码附加在街道名称板上,目的是什么?
  11. JAVA动漫论坛BBS系统的设计与实现
  12. 利用AirPlayer空中播放PC服务器视频、音乐、图片
  13. python3GUI--微博图片爬取工具V1.5 By:PyQt5(附源码)
  14. windows 控制台提示:请求的操作需要提升
  15. 《白话大数据与机器学习》学习笔记
  16. 第三方网站登录微信——保姆级
  17. 前端如何使用阿里巴巴矢量图库的图标
  18. Backpack Cryptography【背包密码】
  19. 云存储毕业设计基于SSM个人网盘系统设计与实现.rar(论文+程序源码)
  20. mysql config win.h_mysql python安装错误:无法打开include文件'config win.h'

热门文章

  1. LeeCode 322. 零钱兑换
  2. 小程序如何把时间戳转化成具体的时间
  3. 轻松帮你做到无损放大图片的软件推荐:Topaz Gigapixel AI for mac
  4. ArcGIS:如何简单地制作一幅专题地图?
  5. 动画:面试官问我插入排序和冒泡排序哪个更牛逼?
  6. python二元函数图像在线绘制_“绘图,让科学生动起来”:Python-matplotlib绘图(多元函数拟合-3D绘图专题)...
  7. 计算机网络特色的班旗,保定七中 | 319班 “一班一特色”班级文化展示
  8. 网络基本功:路由、抓包工具
  9. 笔记本电脑硬盘数据丢失怎么办
  10. 计算机应用基础本试卷号1500,计算机应用基础试卷