250517_BYUCTF learning record
250517_BYUCTF learning record
cvestone【全栈ctfer计划中,会持续复现学习与更新该文章】
题目归档坐标
web
Red This
考察知识点
- redis的基本认识
比赛时的临时笔记
页面初探
查看名言的功能对应POST请求。
分析架构
可以知道web应用是用flask框架搭建的,以及数据库采用redis
分析路由
尝试注册并登录,除了多了一个session外,其他没什么变化:
且注意到token是以JWT的格式展示:
头部只有用户名字段,且需要key来验证签名。在
main.py
中似乎可以发现这个key:
分析admin相关条件
反复出现了adminOptions
关键词,重点关注:
如果用户名是admin,可以返回admin相关选项信息,被存储在redis中。且注意到username是来自于session中的字段。
分析数据库
大致看一下redis都做了什么:
接着定位到redis存储的数据:
set后是键值对形式来存储数据,且发现真正的flag藏在这里,且与管理员选项有关。
分析flag相关条件
person来自于页面列表中选择的作者,如果其中包含“flag”,且用户名如果是admin,就会调用
getData
返回对应的键值对。
尝试修改jwt中的username,但由于没有密钥,发现无法对它进行编辑,且被提示payload字段不符合规则,那就只能想其他办法成为admin。可以继续尝试redis数据库中的其他键值对,因为根据以上代码分析,我们可以知道传递给
getData
的值是可控的,如果不包含“flag”是否也能返回对应的值?
显然这就是漏洞存在的地方,成功拿到了管理员密码。接下来只要登录它就可以拿到flag。
getflag
发现admin用户的列表选项多了flag。
Willy Wonka Web
考察知识点
- apache反向代理
- http头注入
比赛时的临时笔记
页面初探
纯静态,没有robots,源代码也没有隐藏信息。
分析架构
采用node-js作为后端,且bookworm和express值得关注,可能是采用的框架、组件。
分析express请求处理
如果请求头中的a字段为admin,则后端返回给前端的请求包含打开flag.txt操作;否则查询请求中的name字段,并过滤一些标签,看着是用来防范xss的。
尝试:
没有成功。
分析apache配置文件
注意到前端有个apache的配置文件:
第一个功能是作为反向代理(规则中定义的
[P]
),将客户端的请求转发到后端服务器,这样做的目的是隐藏后端真实端点,比如访问https://fronthost.com/name/admin
时,相当于向后端端点发送请求https://backend.com:3000/?name=admin
;第二个功能则是将请求头中特定请求过滤了,所以上面尝试注入a
请求头没有效果。到这里就没有思路了。
Solved by 0xfun-dr.kasbr
1 | curl -g "https://wonka.chal.cyberjousting.com/name/foo%0d%0aA:%20admin%0d%0aX-Ignore:%20yes" |