2026数字中国创新大赛初赛wp之大批量文件处理

admin 2026-05-02 06:26:40 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文档介绍了2026数字中国创新大赛初赛中一个涉及大批量Word文档处理的CTF题目解法。作者通过Python脚本自动化解压.docx文件并利用正则表达式匹配隐藏的身份证号码,强调实际比赛中需平衡准确性与效率。文章指出数安题目正趋向通过数据量增加难度,更贴近现实场景,并提供了可复用的代码示例。 综合评分: 85 文章分类: CTF,数据安全,解决方案,安全工具,技术标准


cover_image

2026数字中国创新大赛初赛wp之大批量文件处理

原创

一只岸上的鱼 一只岸上的鱼

一只岸上的鱼

2026年4月30日 09:13 江苏

在小说阅读器读本章

去阅读

缘起

其实这题目蛮简单的,就是在word中藏了信息,新格式的word(.docx)已经基于xml和zip了,其实没什么可藏的,唯一的难点是数量。

题目

附件我放在了网盘:

https://cloud.189.cn/t/imamemJ3yuqi(访问码:b09i)

思路

解压文件看看,其实很简单,就是word而已,202个,每个打开看看:

  1. 一全选看看是不是字体颜色白色隐藏

  1. 打开word的隐藏选项

然后,重复202次…

很明显,这是不可能的,这题还没做完,比赛就结束了,只能靠脚本。

老规矩,上代码:

import reimport zipfilefrom pathlib import Pathfrom xml.etree import ElementTree as ET
# 1def extract_text_from_docx(docx_path):    text = ""    try:        with zipfile.ZipFile(docx_path) as docx_zip:            with docx_zip.open('word/document.xml') as document_xml:                tree = ET.parse(document_xml)                root = tree.getroot()                for elem in root.iter():                    if elem.tag.endswith('}t'):                        text += elem.text + ' '    except Exception as e:        print(f"Error processing {docx_path}: {e}")    return text.strip()
# 2def find_idcards(text: str) -> list:    results = []    pattern_18 = r'\b(\d{17}[\dXx])\b'
    for match in re.finditer(pattern_18, text):        id_num = match.group(1)        if id_num not in results:            results.append(id_num)    return results
if __name__ == '__main__':    all_results = []    docx_files = list(Path("./docs").rglob('*.docx'))    total = len(docx_files)    print(f"找到 {total} 个 Word 文档")    idcard = []    for i, filepath in enumerate(docx_files, 1):        text = extract_text_from_docx(filepath)        idcards = find_idcards(text)        if len(idcards) > 0:            print(f"[{i}/{total}] 扫描: {filepath.name} - 发现 {len(idcards)} 个身份证号")

跑一下结果:

简单解释:

  1. 这是一个简单的抽取word纯文本的简单方式

  2. 这个是一个最简单的判断身份证的方式:

    其实这里注意2点:

    1、身份证分老旧(15位、18位)

    2、表现格式:就是一串连续的数字,还是分段存储的(可能是空格、短横等等)

不过比赛么,为了节省时间,就不用写那么全年的脚本,一个一个试就好了,先试18位的,一次就中了

小结

自动CTF比赛分裂成网安和数安以来,数安越来越有自己的特色了,越来越多的题目都是靠量来增加难度的,这其实也更贴实际使用。

推荐阅读

本次比赛其他题目:

2026数字中国创新大赛初赛wp之图片隐写一

2026数字中国创新大赛初赛wp之俩签到题

2026数字中国创新大赛数字安全赛道writeup之web题目一


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:一只岸上的鱼 一只岸上的鱼 一只岸上的鱼《2026数字中国创新大赛初赛wp之大批量文件处理》

评论:0   参与:  0