2023 hgame --- week1 wp

news2025/1/16 10:56:59

文章目录

    • Misc
        • sign in
        • e99p1ant_want_girlfriend
        • 神秘的海报
        • Where am I
    • Web
        • Classic Childhood Game
        • Become A Member
        • Guess Who I Am
        • Show Me Your Beauty
    • Crypto
        • RSA
        • Be Stream
        • 神秘的电话
        • 兔兔的车票
    • Re
        • test_your_IDA
        • easyasm
        • encode
        • easyenc
        • a_cup_of_tea
    • Pwn
        • test_nc
    • iot
        • Help the uncle who can't jump twice

Misc

sign in

签到题,base64解密即可得到flag
在这里插入图片描述

e99p1ant_want_girlfriend

修改图片高度
在这里插入图片描述

神秘的海报

查看lsb得到前有一部分flag
在这里插入图片描述
然后steghide 密码123456 得到剩下一部分flag
在这里插入图片描述

Where am I

wireshark导出http对象,然后用010删除多余的hex,得到一个rar文件。接下来是rar伪加密,修改rar的第24个字节为00即可正常解压
在这里插入图片描述
查看图片信息得到GPS信息
在这里插入图片描述
根据题目要求精确到小数点后两位,54.179四舍五入变成54.18
得到flag

hgame{116_24_1488_E_39_54_5418_N}

Web

Classic Childhood Game

游戏类题目,直接查看js代码,发现一串可疑16进制
在这里插入图片描述
然后16进制转字符串,再连续两次base64解密即可得到flag
在这里插入图片描述

Become A Member

根据题目给的信息依次
修改UA为Cute-Bunny
添加Cookie: code=Vidar
添加Referer: bunnybunnybunny.com
添加X-Forwarded-For: 127.0.0.1
username:luckytoday passsword:happy123(请以json请求方式登陆)
然后发送请求即可得到flag
PS:提交json数据的时候以get方式提交
在这里插入图片描述

Guess Who I Am

ctrl u大法发现hint
https://github.com/Potat0000/Vidar-Website/blob/master/src/scripts/config/member.js
在这里插入图片描述
访问站点得到其战队成员信息
在这里插入图片描述
根据题目信息得知,是根据 intro信息找到id信息然后提交,在burp抓包发现三个api
api/getScore
api/getQuestion
api/verifyAnswer
分别用来获取分数、获取intro信息、提交答案,三次请求作为一次完整的过程,且session相同
接下来就是循环一百次获取分数、获取intro信息、根据intro遍历得到id然后提交答案过程
脚本如下:

import requests

answer = [战队成员信息]
s = requests.session()
for i in range(200):
    getscore = "http://week-1.hgame.lwsec.cn:32703/api/getScore"
    getquestion = 'http://week-1.hgame.lwsec.cn:32703/api/getQuestion'
    verifyanswer = "http://week-1.hgame.lwsec.cn:32703/api/verifyAnswer"
    r1 = s.get(getscore)
    if "hgame" in r1.text:
        print(r1.json()["message"])
        break
    else:
        r2 = s.get(getquestion)
        data1 = r2.json()
        find_id=data1["message"]
        for j in answer:
            if find_id in j.values():
                id = j["id"]
                break
        data = {"id":id}
        r3 = s.post(verifyanswer,data=data)
        if "Correct answer!" in r3.text:
            print(f"第{i+1}次正确")

在这里插入图片描述

Show Me Your Beauty

文件上传大小写绕过
然后蚁🗡连接或者web页面执行命令即可得到flag
在这里插入图片描述

Crypto

RSA

直接分解n得到p,q。然后rsa普通解密

import gmpy2
from Crypto.Util.number import  *


c = 110674792674017748243232351185896019660434718342001686906527789876264976328686134101972125493938434992787002915562500475480693297360867681000092725583284616353543422388489208114545007138606543678040798651836027433383282177081034151589935024292017207209056829250152219183518400364871109559825679273502274955582
n = 135127138348299757374196447062640858416920350098320099993115949719051354213545596643216739555453946196078110834726375475981791223069451364024181952818056802089567064926510294124594174478123216516600368334763849206942942824711531334239106807454086389211139153023662266125937481669520771879355089997671125020789
p = 11239134987804993586763559028187245057652550219515201768644770733869088185320740938450178816138394844329723311433549899499795775655921261664087997097294813
q = 12022912661420941592569751731802639375088427463430162252113082619617837010913002515450223656942836378041122163833359097910935638423464006252814266959128953
e = 65537
phi = (p-1)*(q-1)
d = gmpy2.invert(e,phi)
m = pow(c,d,n)
flag  = long_to_bytes(m)
print(flag)

flag:

hgame{factordb.com_is_strong!}

Be Stream

题目:

from flag import flag
assert type(flag) == bytes

key = [int.from_bytes(b"Be water", 'big'), int.from_bytes(b"my friend", 'big')]

def stream(i):
    if i==0:
        return key[0]
    elif i==1:
        return key[1]
    else:
        return (stream(i-2)*7 + stream(i-1)*4)

enc = b""
for i in range(len(flag)):
    water = stream((i//2)**6) % 256
    enc += bytes([water ^ flag[i]])

print(enc)
# b'\x1a\x15\x05\t\x17\tu"-\x06lm\x01-\xc7\xcc2\x1eXA\x1c\x15\xb7\xdb\x06\x13\xaf\xa1-\x0b\xd4\x91-\x06\x8b\xd4-\x1e\xab\xaa\x15-\xf0\xed\x1f\x17\x1bY'

通过get_steam()函数计算出water,然后在用water对这个字节进行异或,然后将每一个结果拼接起来就是flag

解题代码:

key = [int.from_bytes(b"Be water", 'big'), int.from_bytes(b"my friend", 'big')]
enc = b'\x1a\x15\x05\t\x17\t\xf5\xa2-\x06\xec\xed\x01-\xc7\xcc2\x1eXA\x1c\x157[\x06\x13/!-\x0b\xd4\x91-\x06\x8b\xd4-\x1e+*\x15-pm\x1f\x17\x1bY'
def get_stream(i):
  if i==0:
      return key[0]
  elif i==1:
      return key[1]
  else:
      return (get_stream(i-2)*7 + get_stream(i-1)*4)


flag = b""
for i in range(len(enc)):
  water = get_stream((i//2)**6) % 256
  flag += bytes([enc[i] ^ water])

print(flag)

神秘的电话

morse.wav 摩斯转字符串

0223E_PRIIBLY__HONWA_JMGH_FGKCQAOQTMFR

另外还有一串加密信息

5Yeg5Liq5pif5pyf5YmN77yM5oiR5Lus5pS25Yiw5LiA5Liq56We56eY55qE5raI5oGv44CC5L2G5piv6L+Z5Liq5raI5oGv6KKr6YeN6YeN5Yqg5a+G77yM5oiR5Lus5LiN55+l6YGT5a6D55qE55yf5q2j5ZCr5LmJ5piv5LuA5LmI44CC5ZSv5LiA55+l6YGT55qE5L+h5oGv5piv5YWz5LqO5a+G6ZKl55qE77ya4oCc5Y+q5pyJ5YCS552A57+76L+H5Y2B5YWr5bGC55qE56+x56yG5omN6IO95oq16L6+5YyX5qyn56We6K+d55qE57uI54K54oCd44CC

base64解密加密信息
在这里插入图片描述
得知hint信息:

几个星期前,我们收到一个神秘的消息。但是这个消息被重重加密,我们不知道它的真正含义是什么。唯一知道的信息是关于密钥的:“只有倒着翻过十八层的篱笆才能抵达北欧神话的终点”。

将morse转成字符串,然后reverse再栅栏18,最后维吉尼亚解密 key:Vidar
PS:找维吉尼亚的Key找了一天,闷了

出题人吃我一拳
在这里插入图片描述

在这里插入图片描述
得到flag:

hgame{welcome_to_hgame2023_and_enjoy_hacking}

兔兔的车票

题目:

from PIL import Image
from Crypto.Util.number import *
from random import shuffle, randint, getrandbits

flagImg = Image.open('flag.png')
width = flagImg.width
height = flagImg.height

def makeSourceImg():
    colors = long_to_bytes(getrandbits(width * height * 24))[::-1]
    img = Image.new('RGB', (width, height))
    x = 0
    for i in range(height):
        for j in range(width):
            img.putpixel((j, i), (colors[x], colors[x + 1], colors[x + 2]))
            x += 3
    return img

def xorImg(keyImg, sourceImg):
    img = Image.new('RGB', (width, height))
    for i in range(height):
        for j in range(width):
            p1, p2 = keyImg.getpixel((j, i)), sourceImg.getpixel((j, i))
            img.putpixel((j, i), tuple([(p1[k] ^ p2[k]) for k in range(3)]))
    return img

n1 = makeSourceImg()
n2 = makeSourceImg()
n3 = makeSourceImg()
nonce = [n1, n2, n3]

index = list(range(16))
shuffle(index)
e=0


"""
这里flag.png已经提前被保存在source文件夹下了,文件名也是picture{xx}.png
"""

for i in index:
    im = Image.open(f"source/picture{i}.png")
    key = nonce[randint(0, 2)]
    encImg = xorImg(key, im)
    encImg.save(f'pics/enc{e}.png')
    e+=1

16张图片,3*5+1,一张flag,剩下的就是三组密钥图片,我们可以提取每张图片的像素然后对比是不是相同,得到大概的加密图片像素分布,最后再还原flag.png
还原脚本如下

from PIL import Image

width = 379
height = 234
img = Image.new('RGB',(width,height))
data1 = open("flag.txt","r").read()
data2 = open("out.txt","r").read()
data1 = data1.replace(", "," ").replace("(","").replace(")","").replace("[","").replace("]","").split(" ")
data1 = [int(x) for x in data1]
data2 = data2.replace(", "," ").replace("(","").replace(")","").replace("[","").replace("]","").split(" ")
data2 = [int(x) for x in data2]
r = []
g = []
b = []
print(data1)

for i in range(0,len(data1),3):
    r.append(data1[i]^data2[i])
    g.append(data1[i+1]^data2[i+1])
    b.append(data1[i+2]^data2[i+2])
index = 0
for i in range(height):
    for j in range(width):
        img.putpixel((j, i),(r[index],g[index],b[index]))
        index = index + 1
img.save("flag.png")

得到flag.png
在这里插入图片描述

Re

test_your_IDA

直接用notepad++打开,搜索 hgame,发现flag
在这里插入图片描述
flag:

hgame{te5t_y0ur_IDA}

easyasm

简单分析 一下代码
在这里插入图片描述
只是逐位与0x33做异或,ok,那就把密文的每一位与0x33做异或然后拼接起来即可得到flag

enc = [0x5b,0x54,0x52,0x5e,0x56,0x48,0x44,0x56,0x5f,0x50,0x3,0x5e,0x56,0x6c,0x47,0x3,0x6c,0x41,0x56,0x6c,0x44,0x5c,0x41,0x2,0x57,0x12,0x4e]
flag = ''
for i in range(len(enc)):
    flag += chr(enc[i]^0x33)
print(flag)

flag:

hgame{welc0me_t0_re_wor1d!}

encode

解题代码:

enc = [dword_403000[100]]
flag = ''
for i in range(50):
    flag+=chr((enc[2*i+1]<<4) | enc[2*i])
print(flag)

easyenc

enc = ['''v8''' ]
flag= ''
for i in range(41):
    flag += chr(((enc[i]+ 86)^0x32)%128)
print(flag)

a_cup_of_tea

from Crypto.Util.number import  *

def decode(v, k):
    v0 = v[0]
    v1 = v[1]
    x = 0x79bde460
    delta = 0xabcdef23
    k0 = k[0]
    k1 = k[1]
    k2 = k[2]
    k3 = k[3]
    for i in range(32):
        v1 -= ((v0 + k2) << 4) ^ (v0 + x) ^ ((v0 >> 5) + k3)
        v1 = v1 & 0xFFFFFFFF
        v0 -= ((v1 << 4) + k0) ^ (v1 + x) ^ ((v1 >> 5) + k1)
        v0 = v0 & 0xFFFFFFFF
        x -= delta
        x = x & 0xFFFFFFFF
    v[0] = v0
    v[1] = v1
    return v


key = [0x12345678, 0x23456789, 0x3456789, 0x45678901]
enc = [[0x2E63829D, 0xC14E400F],[0x9B39BFB9, 0x5A1F8B14],[0x61886DDE, 0x6565C6CF],[0x9F064F64, 0x236A43F6]]
flag = b''
for i in enc:
    dec = decode(i, key)
    for j in dec:
        flag += long_to_bytes(j)[::-1]
print(flag)

Pwn

test_nc

直接nc 连接容器获取到一个shell
然后执行命令得到flag
在这里插入图片描述

iot

Help the uncle who can’t jump twice

题目直接给了broker 地址

broker:117.50.177.240:1883

根据题目信息

兔兔在车站门口看到一张塑料凳子,上边坐着一个自称V的男人.他希望你能帮他登上他的大号 Vergil 去那边的公告栏上康康Nero手上的YAMATO怎么样了

另一个附件给了一个密码本,应该是爆破Vergil 密码,然后登入上去订阅Nero寻找YAMATO

github上mqtt-pwn项目可以爆破MQTT Broker密码
https://github.com/akamai-threat-research/mqtt-pwn.git

安装以及使用教程:https://zhuanlan.zhihu.com/p/581871896

启动docker 配置username.txt以及 password.txt
执行命令爆破Vergil密码

bruteforce --host host --port port

爆破出Vergil的密码为power

broker连接工具 MQTT.fx -1.71
https://pan.baidu.com/s/1jwA7GUcT8h-rk_kt4CZq1A
提取码:1234

使用MQTT连接,根据题目提示订阅Nero,得到两串字符串

YAMATO
ziyouzizai

在这里插入图片描述
猜测是隐藏在Nero的子主题下面,但是不知道是哪个以及哪一级,所以使用多级通配符#去通配Nero下的子主题,订阅Nero/#发现flag,实际上订阅Nero/YAMATO即可得到flag
在这里插入图片描述
得到flag:

hgame{mqtt_1s_p0w3r}

【何谓遗憾,不可再得之物,不可再遇之人,便是遗憾】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/162283.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【阶段三】Python机器学习29篇:机器学习项目实战:DBSCAN算法的基本原理与DBCSAN新闻聚类分群模型

本篇的思维导图: DBSCAN模型 DBSCAN(全称为Density-Based Spatial Clustering of Applications with Noise)是一种以密度为基础的空间聚类算法,可以用密度的概念剔除不属于任一类别的噪声点。该算法将簇定义为密度相连的点的最大集合,将具有足够密度的区域划分为…

rabbitmq命令大全

大家好&#xff0c;我是早九晚十二&#xff0c;目前是做运维相关的工作。写博客是为了积累&#xff0c;希望大家一起进步&#xff01; 我的主页&#xff1a;早九晚十二 文章目录服务管理启动服务后台启动查看状态用户管理新增账号删除用户所有用户:修改密码:清除密码角色管理设…

MinIO安装总结

概述 初学者安装MinIO还是会遇到很多坑的&#xff0c;这里做个总结&#xff0c;希望能够大家可以快速的搭建MinIO环境&#xff0c;可以更好的快速入门。 linux下手动安装(不推荐) cd /opt/testMinIO wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod x…

spark Shuffle

Spark Shuffle的演进及SortShuffle的基本思想 1. 演进 HashShuffle -> HashShuffle 的Consolidate机制 -> SortBasedShuffle -> Tungsten-sort Based Shuffle 2. 各种 Shuffle的介绍 2.1 HashShuffle Spark 之所以一开始就提供基于 Hash 的 Shuffle 实现机制&…

高级驾驶辅助系统(ADAS)——自适应巡航控制系统

一、定速巡航——L1级别 定速巡航系统&#xff08;CCS&#xff1a;Cruise Control&#xff09;&#xff1a;驾驶员设定目标车速&#xff08;手动加速或减速&#xff09;&#xff0c;不能根据实际路况对车辆的行驶状态进行调节或者给予必要的预警提示&#xff0c;缺乏对环境的应…

【信管8.2】建设与管理项目团队

建设与管理项目团队在经过制定人力资源管理计划之后&#xff0c;我们就有了人力资源计划文档&#xff0c;然后通过组建团队也让团队有了正式的成员&#xff0c;接下来要干什么呢&#xff1f;当然就是在项目的开发过程中不断地建设团队和管理团队了。这两个部分的内容也是我们项…

斜方向三消查找算法的原理和实现

本文首发于微信公众号&#xff1a; 小蚂蚁教你做游戏。欢迎关注领取更多学习做游戏的原创教程资料&#xff0c;每天学点儿游戏开发知识。嗨&#xff01;大家好&#xff0c;我是小蚂蚁。上篇文章中我们讲了三消查找算法的原理和实现&#xff0c;在宝石方块中&#xff0c;除了水平…

雅思经验(2)

写作技巧&#xff1a;雅思写作忌讳的就是一边倒&#xff0c;辩论的精华在于驳斥&#xff0c;能够找出对方的漏洞&#xff0c;证明对方的观点和论据是没有道理的&#xff0c;这个点很重要。考官评价&#xff1a;“it does not address all parts of the question,so it loses ma…

【JVM系列】字符串常量池

字符串常量池 概念 字符串常量池是一个大小固定的HashTable&#xff0c;默认长度是1009。java6存放在永久代&#xff0c;java7和java8存放到java堆中。 常见面试题 用双引号定义的字符串是直接存储到常量池&#xff0c;用new String创建的是存放在堆中。 String s1 "1…

BI技巧丨计算Topn品名

BOSS&#xff1a;白茶&#xff0c;问你个事&#xff0c;能不能动态的根据我们的销量&#xff0c;告诉我销量前三的商品有哪些&#xff1f;这样便于我针对商品进行调控。 白茶&#xff1a;Topn问题&#xff1f; BOSS&#xff1a;什么套不套的&#xff0c;我不懂&#xff0c;你就…

深入理解数据结构 —— 并查集

什么是并查集 并查集是一种数据结构&#xff0c;主要能够高效地实现以下两个功能 给出图中任意两点a&#xff0c;b&#xff1a; union(a,b) &#xff1a;将a&#xff0c;b所在的集合合并起来isConnected(a,b) &#xff1a;问这a&#xff0c;b两点能否通过任意路径连接起来 …

防治新冠病毒感染,儿童如何居家备药?

随着新冠疫情防控的优化&#xff0c;如何为家里的孩子准备药物&#xff1f;这是家长们关心的问题。下面由小熊药师一一解惑。儿童新冠病毒感染主要表现为发热.流涕.咳嗽可能伴有呕吐&#xff0c;可能伴有呕吐.腹泻和其他胃肠道反应。症状一般持续2~5天&#xff0c;其中发热一般…

Map和Set的介绍

目录 1、Map 和 Set 的概念 2、模型 3、Map 的学习 3.1 关于 Map.Entry 3.2 Map 的常用方法 4、Set 的常用方法 5、 Map 和 Set 的注意点 1、Map 和 Set 的概念 Java 提供了 Map 和 Set 的接口&#xff0c;是一种专门用来进行搜索的容器或数据结构&#xff0c;而他搜索…

1.3、操作系统的发展和分类

整体框架 1、手工操作阶段 1.1、主要缺点 用户独占全机、人机速度矛盾导致资源利用率极低 一个用户把自己的程序放入纸带机&#xff0c;等待计算机执行完后&#xff0c;用户再取走自己的数据。 这时候&#xff0c;下一个用户才可以继续接着使用该计算机系统 在一个时间段内只…

1.4、操作系统的运行机制和体系结构

整体框架 1、运行机制 1.1、什么是指令 简单来说&#xff0c;“指令” 就是处理器&#xff08;CPU&#xff09;能识别、执行的最基本命令 比如&#xff1a;加法指令就是让 CPU 进行加法运算 1.2、特权指令&非特权指令 新的问题: 有的指令 “人畜无害” 。 比如&#xf…

【NI Multisim 14.0操作实例——最小系统电路】

目录 序言 &#x1f95d;1.设置工作环境 &#x1f95d; 2.设置原理图图纸 &#x1f95d; 3.设置图纸的标题栏 &#x1f95d; 4.增加元件 &#x1f95d; 5.放置电阻 &#x1f95d; 6.放置无极性电容 &#x1f95d; 7. 放置可变电容 &#x1f95d; 8. 放置电感 &#x…

概论_第3章_两个随机变量的函数的分布__卷积公式

前面&#xff0c; 我详细介绍了 一个随机变量函数的概率分布 &#xff0c;本文开始介绍 两个随机变量的函数。注意&#xff0c; 不能写成 两个随机变量函数&#xff0c; 那就会误认为 两个函数&#xff0c;本文主要介绍两个连续型随机变量的函数&#xff0c; 至于离散型&#x…

网络通信原理——数据传输、OSI模型与TCP/IP、3种数据交换技术

数据传输过程 参考&#xff1a;https://blog.csdn.net/qq_37954088/article/details/80355000、https://baike.baidu.com/item/ARP/609343?fraladdin 基本概念 网络通信的协议体系模型&#xff1a;理想模型OSI(Open System Interconnection)&#xff1b;常用模型TCP/IP OS…

C/C++ 字符指针指向字符串的几种方法

字符指针指向字符串的方法 由于字符串在内存中连续存储的特点&#xff0c;可以使用指针进行操作&#xff0c;并且指针必须是字符型的。通常将指针指向字符串的首地址&#xff0c;利用指针的后移可以指向后续字符。 字符指针指向字符串一般有三种的方法&#xff1a; &#xff0…

【MySQL进阶】多版本并发控制——MVCC

【MySQL进阶】多版本并发控制——MVCC 文章目录【MySQL进阶】多版本并发控制——MVCC一&#xff1a;MVCC 原理1&#xff1a;版本链2&#xff1a;ReadView 简介3&#xff1a;访问记录的规则4&#xff1a;READ COMMITTED —— 每次读取数据前都生成一个 ReadView5&#xff1a;REP…