web

1. Are you from Europe? [100]

血统检测 签到题,在网页脚本的 getCard 函数内 var SR = 0.15 处下断点

web_1_1.png

点击召唤按钮,在控制台将变量 SSR 的值修改为 1

web_1_2.png

恢复运行即可一次抽到 SSR,从而得到 flag

web_1_3.png

Flag: hgame{Th3_Ch0seN_0nE!}

2. special number [100]

分析给出的 PHP 代码,可知需要利用 PHP 弱类型特点

其中 json_decode 函数在处理以 0e 开头的字符串时会将其解释为浮点型 0

php > var_dump(json_decode('0e1111111'));
float(0)

之后在使用 == 比较 flag 字符串变量 $lock$b 时会先进行类型转换再行比较,导致结果为真,从而得到 flag

php > var_dump('test' == json_decode('0e1111111'));
bool(true)

web_2_1.png

Flag: hgame{pHp_w34k_typing_s000_e4sy}

3. can u find me? [50]

根据提示,像搜索引擎爬虫机器人一样访问 /robots.txt,可以看到禁止了 /f1aaaaaaaag.php 页面的爬取

web_3_1.png

访问 /f1aaaaaaaag.php,根据提示,将 Cookie 中 user 的值修改为 admin 再行访问,即可获得 flag

web_3_2.png

Flag: hgame{78e01ee77a39ef4e}

4. tell me what you want [100]

根据每步所给提示,需要通过 POST 方式提交参数 want,并设置 HTTP 请求头 X-Forwarded-For: 127.0.0.1User-Agent: aaa Icefox/57.0 aaaReferer: www.google.comCookie: user=admin,即可获得 flag

web_4_1.png

Flag: hgame{For9e_hTTp_iS_N0T_HArd}

5. 我们不一样 [50]

分析给出的 PHP 代码,可知需要利用 PHP 弱类型特点

提交参数 str1str2[] (str2 后加上表示数组的一对中括号),即可使 strcmp 函数返回 NULL,使之后的判断结果为真

web_5_1.png

Flag: hgame{g3t_f14g_is_so0000_ez}

re

1. re0 [50]

签到题,使用 IDA 载入程序,搜索关键词即可获得 flag

re_1_1.png

Flag: hctf{F1r5t_St5p_Ls_Ea5y}

pwn

施工中

misc

1. 白菜1 [50]

签到题,在 Stegsolve 中打开图片,使用 Analyse -> Data Extract 功能,选取 Bit Planes 中 Red、Green、Blue 的第 0 位,Bit Order 选择 LSB First,即可看到提取出的数据中存在压缩文件的 50 4B 文件头,点击 Save Bin 按钮可将数据导出

misc_1_1.png

将导出的数据文件解压即可获得 flag

misc_1_2.png

Flag: hgame{4246a2158c280cdd1e8c18c57e96095f}

2. 白菜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

misc_2_1.png

Flag: hgame{af2ab981a021e3def22646407cee7bdc}

3. pacp1 [50]

基本的流量分析,使用 Fiddler 或 WireShark 载入数据包,即可找到访问 /flag.php 的数据,从而获得 flag

misc_3_1.png

Flag: hgame{bfebcf95972871907c89893aa3096ec6}

crypto

1. 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

crpto_1_1.png

Flag: hgame{The_qu1ck_br0wn_4x_jUmps_ovEr_a_La2y_dOg}

2. Polybius [50]

Polybius 密码,据表编写 Python 脚本即可获得 flag

crpto_2_1.png

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}

3. 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}

4. confusion [100]

多重加密,首先可以看出密文是 摩斯电码,解码后得到

MRLTK6KXNVZXQWBSNA2FSU2GGBSW45BSLAZFU6SVJBNDAZSRHU6Q====

进行 base32 解码,得到

dW5yWmsxX2h4YSF0ent2X2ZzUHZ0fQ==

进行 base64 解码,得到

unrZk1_hxa!tz{v_fsPvt}

进行 栅栏 解码,查找结果中类似 flag 格式的密文

utnzr{Zvk_1f_shPxvat!}

进行 凯撒 解码,即可获得 flag

Flag: hgame{Mix_1s_fuCking!}

5. 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

分类: CTF信息安全

发表评论

电子邮件地址不会被公开。 必填项已用*标注