当前位置:网站首页>[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
至此结束,撒花
边栏推荐
猜你喜欢
EXCEL解决问题:如何查找目标区域,是否包含指定字符串?
Verilog grammar basics HDL Bits training 08
Concepts of cloud-native applications and 15 characteristics of cloud-native applications
IO/multiplexing (select/poll/epoll)
Verilog语法基础HDL Bits训练 08
Microsoft SQL服务器被黑客入侵 带宽被窃取
超图iServer rest服务之最佳路径分析
电脑奔溃的时候,到底发生了什么?
基于MySQL数据库,Redis缓存,MQ消息中间件,ES搜索引擎的高可用方案解析
win下怎么搭建php环境的方法教程
随机推荐
How to add data to the request header when feign is called remotely
saltstack学习2grains&pillar
ORA-00600 [13013], [5001], [268] 问题分析及恢复
淘宝/天猫淘宝评论问答列表接口 API
概率论的学习整理1: 集合和事件
开源出来的fuse版pfs文件系统主要就是解决缓存问题吧。nfs挂载参数带sync规避缓存问题是不是
爱可可AI前沿推介(7.30)
contentDocument contentWindow,canvas 、svg,iframe
Explain the problem of change exchange in simple terms - the shell of the backpack problem
Transfer Learning Technology Training
PyQt5快速开发与实战 8.2 绘图 && 8.3 QSS的UI美化
自定义查询--关于倒排索引的研究
云原生应用的概念和云原生应用的 15 个特征
A tutorial on how to build a php environment under win
不用if分支对同一个变量做判断的方法
Kubernetes 入门实战03 中级篇
[SCTF2019]Flag Shop
反转链表-迭代反转法
The use and principle of distributed current limiting reduction RRateLimiter
Get the original data API on 1688app