[BSidesCF 2020]Cards
[BSidesCF 2020]Cards
考点
请求逻辑分析
wp
是一个21点的游戏,一开始有1000,要赢到100000
首先,打开游戏,会先向/api发送POST请求,获取一段json,保存用户信息
{"SecretState":"enc1","PlayerHand":[],"DealerHand":[],"Balance":1000,"GameState":"Idle","SessionState":"Playing","Bet":0}/api/config发送POST请求,返回题目配置信息,然后下注进行游戏
{"Goal":100000,"MinBet":10,"MaxBet":500,"GameHandler":"/game.go","DeckHandler":"/deck.go"}1、点击Deal向/api/deal发送POST
{"Bet":500,"SecretState":"enc1"}然后返回的内容是手牌信息,这时会返回一个新的SecretState
{"SecretState":"enc2","PlayerHand":[["7","Spades"],["8","Spades"]],"DealerHand":[["X","X"],["4","Clubs"]],"Balance":500,"GameState":"Playing","SessionState":"Playing","Bet":500}2、点击Hit,向/api/hit发送POST请求
{"SecretState":"enc2"}返回
3、点击Stand,向/api/stand发送POST请求
判定是玩家赢,返回新的SecretState,并且把钱加上
4、点击Deal,向/api/deal发送POST
返回
5、点击Stand,向/api/stand发送POST请求
返回
6、再点击Deal,向/api/deal发送POST
返回
7、点击Stand,向/api/stand发送POST请求
返回
8、点击Deal,向/api/deal发送POST
返回
这里的GameState变成了Blackjack,并且余额直接增加了,是1750
如果把enc9作为SecretState,向/api/deal进行重放,直到返回包出现Blackjack,这时会增加金币为2000,返回包的SecretState为enc10,再把enc10作为SecretState,向/api/deal进行重放,这样重复下去,最后余额就会满足条件
至此逻辑就清楚了
小结
Link
最后更新于