找到
725
篇与
阿贵
相关的结果
- 第 4 页
-
2023 宁波天一永安杯 Crypto - secret 题解:RSA 隐式指数与高次根求解实战 2023 宁波天一永安杯 Crypto - secret 题解:RSA 隐式指数与高次根求解实战 一、题目背景 赛事:宁波天一·永安杯 2023 题目类型:Crypto(RSA 加密破解) 核心线索:给定大素数 p、q,密文 c,公钥指数 e=28,但实际解密需修正指数并通过高次根求解 目标:还原明文 Flag,格式为 flag{} mo1e4qmg.png图片 二、解题思路与核心分析 1. 题目核心特征 本题是典型的 RSA 加密逆向题目,但存在两个关键陷阱: 给定的公钥指数 e=28 并非实际解密指数,需通过数学推导还原真实加密/解密逻辑 解密后得到的明文并非直接字符串,而是经过 4 次幂运算后的数值,需对大数进行精确高次根求解 2. 关键数学原理 RSA 加密核心公式: 加密:$c = m^e \pmod{n}$ 解密:$m = c^d \pmod{n}$(其中 $d = e^{-1} \pmod{\phi(n)}$,$\phi(n) = (p-1)(q-1)$) 本题特殊点: 计算发现使用 e=28 求解的 d 无法直接得到明文,实际加密指数为 7(脚本中验证的关键参数) 明文 m 经过 $m = \text{flag}^4$ 运算后再进行 RSA 加密,因此解密后需对结果求 4 次根还原 Flag 3. 解题脚本解析 我们使用 Python 结合 gmpy2 库完成大数运算与高次根求解,核心步骤如下: 步骤 1:导入依赖库 gmpy2 是处理大数运算的核心库,提供了模逆运算、高次根求解等高效函数: from gmpy2 import invert, iroot步骤 2:定义已知参数 将题目给出的 p、q、n、c 及修正后的指数 e=7 代入: # 已知大素数 p, q p = 134261118796789547851478407090640074022214132682000430136383795981942884853000826171189906102866323044078348933419038543719361923320694974970600426450755845839235949167391987970330836004768360774676424958554946699767582105556239177450470656065560178592346659948800891455240736405480828554486592172443394370831 q = 147847444534152128997546931602292266094740889347154192420554904651813340915744328104100065373294346723964356736436709934871741161328286944150242733445542228293036404657556168844723521815836689387184856871091025434896710605688594847400051686361372872763001355411405782508020591933546964183881743133374126947753 # 模数 n n = 19850163314401552502654477751795889962324360064924594948231168092741951675262933573691070993863763290962945190372400262526595224437463969238332927564085237271719298626877917792595603744433881409963046292095205686879015029586659384866719514948181682427744555313382838805740723664050846950001916332631397606277703888492927635867870538709596993987439225247816137975156657119509372023083507772730332482775258444611462771095896380644997011341265021719189098262072756342069189262188127428079017418048118345180074280858160934483114966968365184788420091050939327341754449300121493187658865378182447547202838325648863844192743 # 密文 c c = 13913396366755010607043477552577268277928241319101215381662331498046080625902831202486646020767568921881185124894960242867254162927605416228460108399087406989258037017639619195506711090012877454131383568832750606102901110782045529267940504471322847364808094790662696785470594892244716137203781890284216874035486302506042263453255580475380742959201314003788553692977914357996982118328587119124144181290753389394149235381045389696841471483947310663329993873046123134587149661347999774958105091103806375702387084149309542351541021140111048408248121408401601979108510758891595550054699719801708646232427198902271953673874 # 修正后的加密指数 e e = 7步骤 3:计算私钥 d 通过模逆运算计算 $d = e^{-1} \pmod{\phi(n)}$,其中 $\phi(n) = (p-1)(q-1)$: # 计算欧拉函数 phi(n) phi = (p - 1) * (q - 1) # 计算私钥 d d = invert(e, phi)步骤 4:解密得到中间值 m 通过模幂运算还原 $m = c^d \pmod{n}$: # 解密得到 m = flag^4 m = pow(c, d, n)步骤 5:高次根求解还原 Flag 由于 $m = \text{flag}^4$,需使用 iroot 函数对 m 求精确 4 次根: # 对 m 开 4 次方根,exact 表示是否为精确根 flag_num, exact = iroot(m, 4) if exact: # 将数字转换为字节流再解码为 UTF-8 字符串 try: # 计算字节长度并转换为大端序字节 flag_bytes = flag_num.to_bytes((flag_num.bit_length() + 7) // 8, 'big') flag = flag_bytes.decode('utf-8') print(f"Flag: {flag}") except Exception as ex: print(f"解码失败: {ex}") print(f"Flag 数值: {flag_num}") else: print("未找到精确的 4 次根。") print(f"m = {m}") print(f"iroot(m, 4) = {iroot(m, 4)}")三、解题结果 脚本运行后,成功求解出精确 4 次根,最终得到 Flag: Flag: flag{cfc48290383943a2cbf3c2d70db44690}四、核心知识点总结 1. RSA 解密关键避坑 指数修正:题目给出的 e=28 为干扰项,需通过数学验证确定真实加密指数(本题为 7) 大数运算:处理超过 Python 原生整数范围的大数时,必须使用 gmpy2 库,避免运算溢出或效率低下 2. 高次根求解原理 当明文经过 $k$ 次幂运算后再加密,解密后需对结果求 $k$ 次根 gmpy2.iroot(x, n) 函数返回元组 (root, exact),其中 exact 为布尔值表示是否为精确根,必须验证精确性,否则会得到错误结果 3. 数字转字符串规范 使用 int.to_bytes(length, byteorder, signed=False) 将大数转换为字节流 固定使用 byteorder='big'(大端序),符合 CTF 题目通用编码规范 解码时需捕获 UnicodeDecodeError,避免因编码格式错误导致脚本崩溃 五、完整运行脚本 from gmpy2 import invert, iroot # 已知参数 p = 134261118796789547851478407090640074022214132682000430136383795981942884853000826171189906102866323044078348933419038543719361923320694974970600426450755845839235949167391987970330836004768360774676424958554946699767582105556239177450470656065560178592346659948800891455240736405480828554486592172443394370831 q = 147847444534152128997546931602292266094740889347154192420554904651813340915744328104100065373294346723964356736436709934871741161328286944150242733445542228293036404657556168844723521815836689387184856871091025434896710605688594847400051686361372872763001355411405782508020591933546964183881743133374126947753 n = 19850163314401552502654477751795889962324360064924594948231168092741951675262933573691070993863763290962945190372400262526595224437463969238332927564085237271719298626877917792595603744433881409963046292095205686879015029586659384866719514948181682427744555313382838805740723664050846950001916332631397606277703888492927635867870538709596993987439225247816137975156657119509372023083507772730332482775258444611462771095896380644997011341265021719189098262072756342069189262188127428079017418048118345180074280858160934483114966968365184788420091050939327341754449300121493187658865378182447547202838325648863844192743 c = 13913396366755010607043477552577268277928241319101215381662331498046080625902831202486646020767568921881185124894960242867254162927605416228460108399087406989258037017639619195506711090012877454131383568832750606102901110782045529267940504471322847364808094790662696785470594892244716137203781890284216874035486302506042263453255580475380742959201314003788553692977914357996982118328587119124144181290753389394149235381045389696841471483947310663329993873046123134587149661347999774958105091103806375702387084149309542351541021140111048408248121408401601979108510758891595550054699719801708646232427198902271953673874 # 使用 e = 7(不是 28!) e = 7 # 计算私钥 d phi = (p - 1) * (q - 1) d = invert(e, phi) # 解密得到 m = flag^4 m = pow(c, d, n) # 对 m 开 4 次方根得到 flag flag_num, exact = iroot(m, 4) if exact: # 将数字转换为字符串 try: flag_bytes = flag_num.to_bytes((flag_num.bit_length() + 7) // 8, 'big') flag = flag_bytes.decode('utf-8') print(f"Flag: {flag}") except Exception as ex: print(f"Decoding failed: {ex}") print(f"Flag number: {flag_num}") else: print("Failed to find exact 4th root.") print(f"m = {m}") print(f"iroot(m, 4) = {iroot(m, 4)}") --- -
2023 宁波天一永安杯 MISC 进阶题解:PDF 隐写与 binwalk 分析实战 2023 宁波天一永安杯 MISC 进阶题解:PDF 隐写与 binwalk 分析实战 一、题目背景 赛事:宁波天一·永安杯 2023 题目类型:MISC(隐写术·PDF 隐写) 核心线索:图片文件 image.png 包含隐藏 PDF 数据 目标:从图片中提取隐写的 PDF 信息,解码得到 Flag 二、解题思路与核心分析 1. 初步检测:binwalk 挖掘隐藏数据 面对未知格式的图片文件,首先使用 binwalk 工具进行深度扫描,它能识别文件中隐藏的其他文件格式、压缩包或数据段,是隐写分析的第一步核心工具。 执行扫描命令: binwalk image.pngmo1d6wkz.png图片 扫描结果关键信息如下: 十进制(DECIMAL)十六进制(HEXADECIMAL)描述(DESCRIPTION)00x0PNG image, 1200 x 1200, 8-bit/color RGBA, non-interlaced1190x77Zlib compressed data, best compression666080x10430PDF document, version: "1.3"关键结论: 扫描结果明确显示,图片文件中隐藏了一个 版本为 1.3 的 PDF 文档,其起始偏移量为十六进制 0x10430(十进制 66608)。这说明 Flag 并非直接隐藏在图片 LSB 中,而是以 PDF 格式封装在图片尾部,属于复合格式隐写。 2. 数据提取:foremost 分离隐写文件 确定存在隐藏 PDF 后,使用 foremost 工具按文件格式分离数据。foremost 会根据扫描到的文件头/尾,自动提取独立的文件并保存。 执行提取命令: foremost image.png执行完成后,会在当前目录生成 output/ 文件夹,其中包含分离出的 PDF 文件(通常位于 output/pdf/ 目录下)。 3. 隐写验证:提取 PDF 为空白的原因分析 直接打开提取出的 PDF 文件,会发现显示为空白。这是 CTF 隐写题的常见套路: PDF 本身存在,但内容被加密/编码,或仅包含隐藏数据段 常规 PDF 阅读器无法直接读取其中的隐写信息,需要通过在线转换工具或专业脚本解码 4. 核心解码:PDF 转 TXT 提取 Flag 针对空白 PDF 的隐写场景,使用专业的 PDF 转 TXT 工具提取隐藏文本。这里选择在线工具 PDF24 Tools(https://tools.pdf24.org/zh/pdf-to-txt),操作流程如下: 打开上述在线工具,上传提取到的 PDF 文件 选择「PDF 转 TXT」功能,执行转换 下载转换后的 TXT 文件,打开即可看到隐藏的 Flag 解码结果: flag{625d7f13d1646c3ab86be95a6ee05dd9}三、核心技术知识点总结 1. 复合隐写的检测与处理 binwalk:万能文件格式分析工具,支持扫描图片/音频/视频中隐藏的任意格式文件(PDF/ZIP/EXE 等) foremost:文件分离工具,配合 binwalk 结果,可批量提取隐藏文件 适用场景:图片中隐藏文档、文档中隐藏图片、音频中隐藏压缩包等复合隐写场景 2. PDF 隐写的常见类型与解决方法 隐写类型特征解决方法空白 PDF 含隐写文本打开 PDF 无内容,仅含隐藏数据使用 PDF 转 TXT 工具提取文本PDF 加密打开提示输入密码尝试字典爆破(John the Ripper)、弱口令破解PDF 标签隐写文档正常,但元数据含 Flag查看 PDF 属性(元数据/注释)PDF 图层隐写仅底层可见,表层空白使用 Photoshop 等工具查看图层3. 常用隐写工具组合 工具类型工具名称适用场景扫描工具binwalk检测文件中隐藏的任意格式数据提取工具foremost按格式分离文件中的隐藏数据解码工具zsteg检测 PNG/BMP 图片的 LSB 隐写在线工具PDF24处理 PDF 隐写、格式转换四、完整解题命令与操作流程 1. 环境准备(Kali Linux) # 安装必要工具(若未安装) apt install binwalk foremost -y2. 核心操作步骤 # 1. 扫描图片中的隐藏数据 binwalk image.png # 2. 分离提取隐藏的 PDF 文件 foremost image.png # 3. 进入输出目录查看提取结果 cd output/pdf/ ls # 查看提取出的 PDF 文件(如 00000001.pdf)3. 在线解码操作 访问:https://tools.pdf24.org/zh/pdf-to-txt 上传 output/pdf/ 目录下的 PDF 文件 执行转换并下载 TXT 文件 打开 TXT 文件,复制其中的 Flag 五、最终 Flag flag{625d7f13d1646c3ab86be95a6ee05dd9}六、拓展与避坑指南 1. 避坑要点 若 foremost 提取的 PDF 仍为空,可尝试使用 binwalk -D 'pdf:application/pdf' image.png -O extracted_pdf/ 命令,精准提取 PDF 数据 在线工具解码失败时,可使用本地工具(如 pdftotext 命令)转换:pdftotext extracted_pdf/00000001.pdf output.txt,再查看 output.txt 2. 拓展学习 学习 binwalk 的高级用法:binwalk -E image.png 可视化文件结构、binwalk -dd "pdf" image.png 仅提取 PDF 了解其他隐写类型:图片 Steg 隐写、音频 LSB 隐写、文档元数据隐写等 -
2023 宁波天一永安杯 MISC - zip 题解:二进制字典爆破 ZIP 密码全流程 2023 宁波天一永安杯 MISC - zip 题解:二进制字典爆破 ZIP 密码全流程 一、题目背景 赛事:宁波天一·永安杯 2023 题目类型:MISC(压缩包爆破) 题目描述:flag{} 目标:破解加密 ZIP 压缩包密码,提取隐藏的 Flag 二、解题思路与过程 1. 题目分析 这是一道典型的 ZIP 压缩包密码爆破题。题目仅提供了一个加密的 ZIP 文件,没有任何额外提示。根据以往的 CTF 出题习惯,这类无提示的密码爆破题,密码大概率是短数字串、纯字母串,或是本题这种二进制(0/1)字符串。 2. 第一步:生成自定义二进制字典 我们推测密码是由 0 和 1 组成的二进制字符串,且长度不会太长。为了覆盖所有可能性,我们编写了一个 Python 脚本,生成长度从 1 到 9 的所有二进制组合,作为爆破字典。 import itertools def generate_binary_dict(max_length=9): """ 生成所有长度为1到max_length的二进制字符串 :param max_length: 二进制字符串的最大长度 :return: 包含所有组合的列表 """ dictionary = [] for length in range(1, max_length + 1): for combo in itertools.product(['0', '1'], repeat=length): dictionary.append(''.join(combo)) return dictionary def save_to_file(dictionary, filename='binary_dict.txt'): """ 将生成的字典保存到文件 :param dictionary: 二进制字符串列表 :param filename: 输出文件名 """ with open(filename, 'w') as f: for item in dictionary: f.write(f"{item}\n") print(f"字典已保存到 {filename}") if __name__ == "__main__": # 生成最大长度为9的二进制字典 binary_dict = generate_binary_dict(max_length=9) # 保存到文件 save_to_file(binary_dict)执行脚本后,会生成一个名为 binary_dict.txt 的字典文件,包含了从 0、1 到 111111111 的所有二进制组合。 3. 第二步:提取 ZIP 哈希值 在 Kali 环境中,我们使用 zip2john 工具从加密的 ZIP 文件中提取密码哈希值,以便后续使用 John the Ripper 进行爆破。 zip2john "/root/Desktop/zippwd.zip" > hash.txt执行后,哈希值被保存到了 hash.txt 文件中。 4. 第三步:使用 John the Ripper 爆破密码 John the Ripper 是一款强大的密码破解工具,我们使用它配合刚才生成的二进制字典进行爆破。 john --wordlist=/root/Desktop/binary_dict.txt hash.txt工具很快就成功破解出了密码,再次执行 john --show 查看结果: john --show hash.txt输出结果如下: zippwd.zip/flag.txt:01001100:flag.txt:zippwd.zip:/root/Desktop/zippwd.zipmo1d1wht.png图片 可以看到,ZIP 包内 flag.txt 文件的密码为 01001100。 5. 第四步:解压文件获取 Flag 使用破解出的密码解压 ZIP 文件,即可得到 flag.txt,里面就是最终的 Flag。 三、知识点总结 ZIP 爆破工具链 zip2john:提取 ZIP 文件的密码哈希。 john:基于字典的密码爆破工具,支持多种哈希算法。 fcrackzip:另一款常用的 ZIP 爆破工具,命令为 fcrackzip -D -p binary_dict.txt -u zippwd.zip,可作为备选方案。 自定义字典生成技巧 当题目提示很少时,优先尝试简单规则字典:纯数字、纯字母、二进制、键盘顺序、生日格式等。 Python 的 itertools.product 是生成全组合字典的神器,可根据题目需求灵活修改字符集和长度。 常见爆破失败原因排查 字典文件格式问题:确保字典每行只有一个密码,无多余空格或换行符。 路径问题:爆破时需确保 ZIP 文件和字典文件路径正确,避免 No such file or directory 错误。 密码长度:如果爆破失败,可以尝试增加字典的最大长度,比如将 max_length 设为 10 或 12。 四、完整解题命令集合 # 1. 生成二进制字典(执行上面的Python脚本) python3 binary_dict.py # 2. 提取ZIP哈希 zip2john zippwd.zip > hash.txt # 3. 使用john进行爆破 john --wordlist=binary_dict.txt hash.txt # 4. 查看爆破结果 john --show hash.txt # 5. 解压文件(使用破解出的密码) unzip -P 01001100 zippwd.zip五、最终 Flag (解压后即可得到题目要求的 flag{} 格式 Flag) -
永安杯MISC类型题目BeautifulImage 2023年宁波天一永安杯MISC类型题目BeautifulImage 解题全过程 一、题目背景 赛事:宁波天一·永安杯 2023 题目类型:MISC(隐写术) 题目描述:Cool Mountain flag{} 目标:从图片中提取隐藏的 Flag 二、解题思路与过程 1. 工具选择:Zsteg Zsteg 是一款专门针对 PNG/BMP 格式图片的隐写检测工具,能快速提取 LSB(最低有效位)隐写、通道数据等信息,是这类题目的首选工具。 2. 第一步:Zsteg 扫描图片 将下载的图片命名为 alps.png,在 Kali 环境中执行扫描: zsteg /root/Desktop/alps.png输出结果: b1,r,lsb,xy .. text: "Xv59 VX^D~\\99" b1,rgb,lsb,xy .. text: "ZmxhZ3syNGVkZDc2ZTQ2YzIyYzY1Y2M1YmRkZDNjNmU0ZjZmM30=" b1,bgr,lsb,xy .. /var/lib/gems/3.1.0/gems/zsteg-0.2.13/lib/zsteg/checker/wbstego.rb:41:in `to_s': stack level too deep (SystemStackError) from /var/lib/gems/3.1.0/gems/iostruct-0.5.0/lib/iostruct.rb:180:in `inspect' ... 10066 levels...这里我们重点关注 b1,rgb,lsb,xy 通道的输出,它是一段标准的 Base64 编码字符串: ZmxhZ3syNGVkZDc2ZTQ2YzIyYzY1Y2M1YmRkZDNjNmU0ZjZmM30= 补充说明:b1,bgr,lsb,xy 报错是 Zsteg 的一个常见问题,不影响我们获取有效信息,可以直接忽略。 mo1cor45.png图片3. 第二步:Base64 解码获取 Flag 使用 base64 -d 命令对字符串进行解码: echo "ZmxhZ3syNGVkZDc2ZTQ2YzIyYzY1Y2M1YmRkZDNjNmU0ZjZmM30=" | base64 -d解码结果: flag{24edd76e46c22c65cc5bddd3c6e4f6f3}和题目描述中的 Cool Mountain flag{} 格式完全匹配,解题完成。 三、知识点总结 Zsteg 工具核心用法 基础扫描:zsteg 图片名.png 查看指定通道数据:zsteg -a 图片名.png -v 提取特定通道数据:zsteg -E b1,rgb,lsb,xy 图片名.png > output.txt 常见隐写编码格式 很多隐写题目会将 Flag 用 Base64/URL/HEX 等方式编码后隐藏在图片中,遇到乱码类的字符串,优先尝试 Base64 解码。 Zsteg 报错处理 stack level too deep 这类错误一般是工具内部的 wbstego 模块栈溢出导致,和图片本身无关,不影响其他通道的扫描结果,直接跳过即可。 四、完整解题命令集合 # 1. 扫描图片隐写信息 zsteg /root/Desktop/alps.png # 2. 提取指定通道数据(可选,当输出过长时使用) zsteg -E b1,rgb,lsb,xy alps.png > base64_flag.txt # 3. Base64 解码 cat base64_flag.txt | base64 -d # 或直接解码字符串 echo "ZmxhZ3syNGVkZDc2ZTQ2YzIyYzY1Y2M1YmRkZDNjNmU0ZjZmM30=" | base64 -d五、最终 Flag flag{24edd76e46c22c65cc5bddd3c6e4f6f3} -
GinCdn内容分发系统V1.1.0版本更新内容 GinCdn内容分发系统 GinCdn是一款基于Go语言Gin框架自研的轻量高效内容分发系统,专为中小型企业/个人搭建CDN打造,采用主控+边缘节点分布式架构,实现智能调度、高效缓存、精准监控的一体化解决方案。 无需复杂命令行,小白也能轻松上手。 mo06wxqr.png图片 mo06x0uf.png图片 mo06x5c4.png图片 版本更新日志 V1.1.0(2026.04.12) 新增CC规则组功能设置 新增CC过滤器功能设置 新增CC匹配器功能设置 新增站点CC防护功能设置 支持站点自定义CC子规则设置 修复部分节点SSL回源502问题 新增主控跨域全开放中间件 新增Redis连接同步配置 V1.0.9(2026.03.31) 支持接入站监听多端口 新增套餐记录删除功能 修复节点管理界面获取 V1.0.8(2026.03.29) 完善节点删除逻辑 完善线路组删除逻辑 完善节点区域删除逻辑 修复多域名显示问题 修复SSL证书获取问题 美化多个界面显示样式 V1.0.7(2026.03.28) 新增支付宝实名配置界面 用户新增实名认证界面 新增网站配置xss过滤 V1.0.6(2026.03.26) 新增qrcode二维码生成 修复当面付余额充值转码 修复当面付套餐购买转码 修复当面付套餐续费转码 V1.0.5(2026.03.26) 新增用户注册动态配置功能 完善用户注册页动态调节 完善用户密码找回页 完善用户密码修改页 完善管理员密码修改页 修复邮箱配置功能 V1.0.4(2026.03.21) 新增端口四层转发功能 V1.0.3(2026.03.19) 新增错误页配置美化并同步 修复手机界面控制台菜单栏 V1.0.2(2026.03.16) 新增节点监控日志 新增节点监控配置 新增节点实时状态 新增节点通知配置 V1.0.1(2026.03.15) 新增离线节点差量同步 新增节点日志记录表 新增线路节点异步同步 新增当前在线节点获取 V1.0.0(2026.03.06) 支持阿里云DNS 支持多节点部署 支持彩虹易支付 支持套餐分类 支持套餐设置 支持邮箱发信 支持全局防火墙配置 支持全局Nginx配置 缓存、默认页、错误页配置 支持角色折扣功能 支持证书上传 支持区域线路解析 支持站点接入 支持同步配置 官方网站:www.gincdn.cn 正版授权官网:auth.shuha.cn