github编辑

[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

https://blog.csdn.net/qq_46263951/article/details/119811028arrow-up-right

最后更新于