Contents
web
Are you from Europe? [100]
血统检测 签到题,在网页脚本的 getCard
函数内 var SR = 0.15
处下断点
点击召唤按钮,在控制台将变量 SSR
的值修改为 1
恢复运行即可一次抽到 SSR,从而得到 flag
Flag: hgame{Th3_Ch0seN_0nE!}
special number [100]
分析给出的 php 代码,可知需要利用 php 弱类型特点
其中 json_decode
函数在处理以 0e
开头的字符串时会将其解释为浮点型 0
$ php -r "var_dump(json_decode('0e1111111'));"
float(0)
之后在使用 ==
比较 flag 字符串变量 $lock 与 $b 时会先进行类型转换再行比较,导致结果为真,从而得到 flag
$ php -r "var_dump('test' == json_decode('0e1111111'));"
bool(true)
Flag: hgame{pHp_w34k_typing_s000_e4sy}
can u find me? [50]
根据提示,像搜索引擎爬虫机器人一样访问 robots.txt
,可以看到禁止了 f1aaaaaaaag.php
页面的爬取
访问 f1aaaaaaaag.php
,根据提示,将 Cookie 中 user
的值修改为 admin
再行访问,即可获得 flag
Flag: hgame{78e01ee77a39ef4e}
tell me what you want [100]
根据每步所给提示,需要通过 POST
方式提交参数 want,并设置 HTTP 请求头 X-Forwarded-For: 127.0.0.1
,User-Agent: aaa Icefox/57.0 aaa
,Referer: www.google.com
,Cookie: user=admin
,即可获得 flag
Flag: hgame{For9e_hTTp_iS_N0T_HArd}
我们不一样 [50]
分析给出的 php 代码,可知需要利用 php 弱类型特点
提交参数 str1
与 str2[]
(str2 后加上表示数组的一对中括号),即可使 strcmp
函数返回 NULL,使之后的判断结果为真
Flag: hgame{g3t_f14g_is_so0000_ez}
reverse
re0 [50]
签到题,使用 IDA 载入程序,搜索关键词即可获得 flag
Flag: hctf{F1r5t_St5p_Ls_Ea5y}
misc
白菜1 [50]
签到题,在 Stegsolve
中打开图片,使用 Analyse -> Data Extract 功能,选取 Bit Planes 中 Red、Green、Blue 的第 0 位,Bit Order 选择 LSB First,即可看到提取出的数据中存在压缩文件的 50 4B
文件头,点击 Save Bin 按钮可将数据导出
将导出的数据文件解压即可获得 flag
Flag: hgame{4246a2158c280cdd1e8c18c57e96095f}
白菜2 [50]
还是签到题,使用 binwalk
即可提取隐写的文件,获得 flag
$ binwalk -e misc2.jpg
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 JPEG image data, JFIF standard 1.01
1037199 0xFD38F Zip archive data, at least v2.0 to extract, compressed size: 41, uncompressed size: 39, name: flag.txt
1037368 0xFD438 End of Zip archive
Flag: hgame{af2ab981a021e3def22646407cee7bdc}
pacp1 [50]
基本的流量分析,使用 Fiddler 或 WireShark 载入数据包,即可找到访问 /flag.php
的数据,从而获得 flag
Flag: hgame{bfebcf95972871907c89893aa3096ec6}
crypto
easy Caesar [50]
签到题,包含数字的 凯撒加密
,python 脚本如下
def change(byte, key):
if byte >= 'A' and byte <= 'Z':
byte = chr(ord('A') + (ord(byte) - ord('A') + key) % 26)
elif byte >= 'a' and byte <= 'z':
byte = chr(ord('a') + (ord(byte) - ord('a') + key) % 26)
elif byte >= '0' and byte <= '9':
byte = chr(ord('0') + (ord(byte) - ord('0') + key) % 10)
return byte
def decrypt(cipherText):
results = list()
for i in range(10):
for j in range(26):
plainText = ''
for byte in cipherText:
if byte.isalpha():
plainText += change(byte, j)
elif byte.isnumeric():
plainText += change(byte, i)
else:
plainText += byte
results.append(plainText)
return results
cipherText = 'vuoas{Hvs_ei8qy_pf7kb_1l_xIadg_cjSf_o_Zo9m_rCu}'
possibleFlags = list(filter(lambda string: string.startswith('hgame{'), decrypt(cipherText)))
for possibleFlag in possibleFlags:
print(possibleFlag)
在结果中查找有意义项,即得 flag
Flag: hgame{The_qu1ck_br0wn_4x_jUmps_ovEr_a_La2y_dOg}
Polybius [50]
Polybius 密码
,据表编写 python 脚本即可解出 flag
def decrypt(cipherText, key, letters):
plainText = ''
for i in range(0, len(cipherText), 2):
keyIndex = letters.index(cipherText[i]) * 5 + letters.index(cipherText[i + 1])
if (keyIndex >= 0): plainText += key[keyIndex]
return plainText
cipherText = 'FDXDGDADDGFXXFAAXFAGGDFXFFXFFXADXFDAGDAD'
key = 'btalpdhozkqfvsngicuxmrewy'
letters = 'ADFGX'
print(decrypt(cipherText, key, letters))
Flag: hgame{fritz_nebel_invented_it}
Hill [50]
Hill 密码
,编写 python 脚本即可获得 flag
def decrypt(cipherText, keys):
for i in range(4): keys[i] = keys[i] % 26
det = keys[0] * keys[3] - keys[1] * keys[2]
det = ((det % 26) + 26) % 26
di = 0
for i in range(26):
if ((det * i) % 26 == 1): di = i
if (di == 0):
return 'keys error'
ikeys = [0] * 4
ikeys[0] = (di * keys[3]) % 26
ikeys[1] = (-1 * di * keys[1]) % 26
ikeys[2] = (-1 * di * keys[2]) % 26
ikeys[3] = di * keys[0]
for i in range(4):
if (ikeys[i] < 0): ikeys[i] += 26
plainText = ''
for i in range(0, len(cipherText), 2):
plainText += chr((ikeys[0] * (ord(cipherText[i]) - 97) + ikeys[1] * (ord(cipherText[i + 1]) - 97)) % 26 + 97)
plainText += chr((ikeys[2] * (ord(cipherText[i]) - 97) + ikeys[3] * (ord(cipherText[i + 1]) - 97)) % 26 + 97)
return plainText
cipherText = 'phnfetzhzzwz'
keys = [9, 17, 6, 5]
print(decrypt(cipherText, keys))
Flag: hgame{overthehillx}
confusion [100]
多重加密,首先可以看出密文是 摩斯电码
,解码后得到 MRLTK6KXNVZXQWBSNA2FSU2GGBSW45BSLAZFU6SVJBNDAZSRHU6Q====
进行 base32 解码,得到 dW5yWmsxX2h4YSF0ent2X2ZzUHZ0fQ==
进行 base64 解码,得到 unrZk1_hxa!tz{v_fsPvt}
进行栅栏解码,查找结果中类似 flag 格式的密文 utnzr{Zvk_1f_shPxvat!}
进行凯撒解码,即得 flag
Flag: hgame{Mix_1s_fuCking!}
baby step [66]
利用 BSGS (baby-step giant-step) 算法
,编写 python 脚本即可解出 flag
from math import ceil, sqrt
import string
def bsgs(g, h, p):
# Source: https://gist.github.com/0xTowel/b4e7233fc86d8bb49698e4f1318a5a73
results = []
N = ceil(sqrt(p - 1))
tbl = {pow(g, i, p): i for i in range(N)}
c = pow(g, N * (p - 2), p)
for j in range(N):
y = (h * pow(c, j, p)) % p
if y in tbl:
results.append(j * N + tbl[y])
return results
def isPrintable(byte):
return byte.isprintable()
results = bsgs(0x1111111111, 0x7ac21f64ed, 0x976693344d)
printableBytes = list()
for result in results:
try:
printableBytes = list(filter(isPrintable, result.to_bytes(10, byteorder='big'))
except UnicodeDecodeError as error:
continue
if len(printableBytes) == 5: print('possible flag: ' + ''.join(printableBytes))
Flag: x1337
0 Comments