250517_BYUCTF learning record

【全栈ctfer计划中,会持续复现学习与更新该文章】

题目归档坐标

web

Red This

考察知识点

  • redis的基本认识

比赛时的临时笔记

页面初探

image.png image.png 查看名言的功能对应POST请求。

分析架构

image.png 可以知道web应用是用flask框架搭建的,以及数据库采用redis

分析路由

image.png 尝试注册并登录,除了多了一个session外,其他没什么变化: image.png 且注意到token是以JWT的格式展示: image.png 头部只有用户名字段,且需要key来验证签名。在main.py中似乎可以发现这个key: image.png

分析admin相关条件

反复出现了adminOptions关键词,重点关注: image.png 如果用户名是admin,可以返回admin相关选项信息,被存储在redis中。且注意到username是来自于session中的字段。

分析数据库

大致看一下redis都做了什么: image.png image.png 接着定位到redis存储的数据: image.png set后是键值对形式来存储数据,且发现真正的flag藏在这里,且与管理员选项有关。

分析flag相关条件

image.png person来自于页面列表中选择的作者,如果其中包含“flag”,且用户名如果是admin,就会调用getData返回对应的键值对。 image.png 尝试修改jwt中的username,但由于没有密钥,发现无法对它进行编辑,且被提示payload字段不符合规则,那就只能想其他办法成为admin。可以继续尝试redis数据库中的其他键值对,因为根据以上代码分析,我们可以知道传递给getData的值是可控的,如果不包含“flag”是否也能返回对应的值? image.png 显然这就是漏洞存在的地方,成功拿到了管理员密码。接下来只要登录它就可以拿到flag。

getflag

image.png 发现admin用户的列表选项多了flag。 image.png

Willy Wonka Web

考察知识点

  • apache反向代理
  • http头注入

比赛时的临时笔记

页面初探

image.png 纯静态,没有robots,源代码也没有隐藏信息。

分析架构

image.png 采用node-js作为后端,且bookworm和express值得关注,可能是采用的框架、组件。

分析express请求处理

image.png 如果请求头中的a字段为admin,则后端返回给前端的请求包含打开flag.txt操作;否则查询请求中的name字段,并过滤一些标签,看着是用来防范xss的。 尝试: image.png 没有成功。

分析apache配置文件

注意到前端有个apache的配置文件: image.png 第一个功能是作为反向代理(规则中定义的[P]),将客户端的请求转发到后端服务器,这样做的目的是隐藏后端真实端点,比如访问https://fronthost.com/name/admin时,相当于向后端端点发送请求https://backend.com:3000/?name=admin;第二个功能则是将请求头中特定请求过滤了,所以上面尝试注入a请求头没有效果。到这里就没有思路了。

Solved by 0xfun-dr.kasbr

image.png

1
curl -g "https://wonka.chal.cyberjousting.com/name/foo%0d%0aA:%20admin%0d%0aX-Ignore:%20yes"