Skip to content

CUCCS/ctf-wps

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CTF 刷题 Wiki

如何刷题

网上流行的关于 CTF 入门指南的在线资源有很多,比如 CTF WikiCTF Field GuideHello CTF 等等。这些资源都是非常好的入门指南,但是对于一些初学者来说,可能会有一些困惑,比如如何选择合适自己的题目来刷、刷题时如何平衡投入解题思考与行动的时间和写 WP 的时间长度、比赛用途的 WP 和日常训练的 WP 有什么区别等等。

个人推荐的在线刷题平台是 nssctf,这个平台相比于其他在线平台的主要优势在于题目检索可以按照 题目考点 进行检索,这对于初学者来说是非常有帮助的。可以对照主流 CTF Wiki 类平台或教材,按照考点进行刷题,这样可以更好的理解知识点,检验自己的举一反三能力,了解命题者如何将一个考点通过 改变对抗条件增减考点改变考点考察顺序 等方式实现 新瓶装旧酒

日常刷题时,建议根据题目的难度等级(可以参考平台上公示的题目完成度)选择合适的题目,不要一味追求难度,要根据自己的实际情况选择合适的题目。刷题时,可以先尝试自己解题,如果遇到困难,可以查看 WP,但是不要直接看答案,要先思考一下,并且在 刷题 WP记录自己在没有借助 WP 的情况下,想到了哪些解题思路 。做完这个解题思路记录之后,再看答案,这样一方面可以更好的理解题目的解法,另一方面,可以直观对比出自己已有的解题思路距离可行解题思路之间存在多大差距。通过这样的 挫折对比 ,在大脑里留下更深的印象。更重要的是,通过记录 解题思路 ,也是在锻炼自己的 书面表达能力 。因此,在刷题时间预算有限的情况下,可以适当减少刷题时间,保证写 WP 的时间。

特别需要注意的是,日常训练 WP 首先是为了方便自己阅读、日后比赛时方便查找、方便自己利用本地 AI 大模型训练你自己本地的 RAG 而书写的。比赛用途 WP 首先是为了满足比赛要求,证明是自己独立完成的,其次是为了方便他人阅读,因此在写比赛用途的 WP 时,要注意 排版格式语言 等等,要尽量做到 简洁清晰易懂。在写比赛用途的 WP 时,应优先按照赛事主办方的要求进行排版和内容组织。如果没有要求,注意做到关键操作步骤有截图、关键操作步骤有文字描述和思路解释即可。

同时,既然 日常训练 WP 首先是为了 满足自己 的需求,那么对于简单题、熟练题,甚至可以不写 WP,或只需要记录 值得记录 的内容即可。例如,开阔了自己眼界的新思路、新工具、新技巧等。对于这种类型的 WP,建议可以将系列题目的 WP 以合集的形式合并在一个文件里,减少不必要的文件数量和冗余的题目基本信息。

刷题时,可以尝试使用不同的解题方法,比如使用不同的工具、不同的编程语言等等,这样可以更好的提高自己的解题能力。要特别重视 如何在没有互联网访问的条件下 解题,这样可以更好地适应线下比赛的实际环境。在刷题时,要抱着 打造自己专属的 CTF OS 的心态,不断积累自己的工具库、脚本库、技术库等等。在 全民 AI 的时代,你的工具库里一定得有几个本地部署、离线可用的大模型工具,特别是 Code CopilotRAG 要不断完善更新,刷题时要多用多熟悉。这样可以更好的提高自己的解题效率,也可以更好的提高自己的解题体验。

最后,参加 CTF 是手段,不是目的。

端正自己的 CTF 目的

  1. 拿奖 。这是最直接的目的,但是不是唯一的目的。拿奖是一种荣誉,但是荣誉是虚幻的,不要为了荣誉而荣誉,要为了自己的成长而成长。当然,高水平竞赛的奖状是可以根据学校、学院的政策获得诸如综测加分、保研加分等实际收益的。同时,简历上有一些高水平比赛的奖状也是可以为你的简历加分的。
  2. 成长 。思维的成长、技术的成长、团队协作的成长、人际交往的成长等等。这些成长是实实在在的,是可以带给你持续收益和长期价值的。
  3. 对抗性思维 。有人命题的比赛,意味着命题人会设置各种各样的障碍,比如使用各种 黑名单 方式阻止你使用现成的 payload,你需要学习各种数据编码技巧、代码混淆技术、通信行为特征伪装技术等。比如你能使用的开源解题工具,命题人在 验题 阶段也会使用这些自动化工具来检验自己的命题是否会被自动做出来答案。对于所谓 简单题 ,你如果熟悉相关自动化工具的使用,你就可能在赛场上用最短时间、最低成本完成 Capture the FLAG 。一些高难度题目往往是一系列 考点 的有规律排列组合,善用自动化工具完成 考点信息自动化收集 可以更快进入命题人设置的进阶关卡。所以,你需要通过对抗性思维来解决这些障碍,去揣摩命题人的考点、推测和验证命题人设置的各种对抗技巧。这种对抗性思维是非常有价值的,不仅对于入门网安专业、进入网安行业有帮助,对于其他行业来说,很多时候这就是降维打击的思维方式。
  4. 工具化思维 。初学者先从习得选择工具的方法、使用工具解决问题上手,然后逐渐深入了解工具的原理,最后能够自己编写工具解决问题。这种工具化思维是非常有价值的,不仅对于入门网安专业、进入网安行业有帮助,对于其他行业来说,很多时候这就是提高工作效率的思维方式。 Don't Repeat Yourself ,不仅是码农的座右铭,也是网安人的指南针。
  5. 技术价值观 。技术不是仅仅通过先进性来衡量和评价的,能解决问题才是王道。 先完成,再完美。 比赛时,争分夺秒、可以牺牲代码规范性、可以不求理解原理,但是日常训练时,要追求代码规范性、要力求理解原理。
  6. 团队协作 。大部分的网安学科竞赛都是以团队方式进行的,团队协作是非常重要的。团队协作不仅仅是分工合作,更重要的是 互相信任互相尊重互相支持。团队协作是一种非常重要的软技能,是你在未来工作中必不可少的技能。当然,团队协作不是喊口号,而是要在实际行动中体现出来。比如,个人 WP 的维护和 团队 WP 的维护如何统筹?小组要不要搞 内部私享 WP 仓库 ?你是否担心你花海量时间刷题、精心编写的 WP 被别人直接 拿走 了?别人为什么要给你无偿分享他们的 WP ?别人为什么愿意给 TA 耐心答疑讲解,为什么对你总是没有耐心?这些问题都是团队协作中需要解决的非常具体的问题,也是未来大家在真实工作中总要面对的问题。只要你坚持参加 CTF 的训练、坚持参加 CTF 的比赛,你就会在这些问题上有独属于自己的收获。
  7. 人际交往 。生活不是只有学习,学习也不是只有 CTF 。在 CTF 训练和比赛经历中结识的队友、教练,未来你们可能是同门、可能是同事、可能是创业合伙人、可能是甲方与乙方。因 CTF 而奋战过的日子,是你们未来人生中的一段美好回忆,这就是未来你们 团队协作 的信任基石。

遇到看了 WP 也不会做的题目怎么办

记录下来,写成 WP 。并且在 WP 中记录下自己在没有借助 WP 的情况下,想到了哪些解题思路。除此之外,查阅了哪些 WP 、有哪些疑问、有哪些不理解的地方,都可以记录下来。目的是为了向他人求助时,能够更好的描述自己的问题,也是为了更好的记录自己的成长历程。当得到他人帮助后,也要及时更新 WP ,记录下他人的解题思路,以及自己的理解、验证过程、验证结果和感悟。

注意,对于有积分功能的刷题平台,没必要在不明所以的情况下,为了积分而刷题。完成的题目一定是自己真的理解原理、以后在遇到同类问题时可以独立解决的题目。

已有 WP 简要说明

本地学习训练环境

关于“考点”

  • ctf_tags.json 是从 NSSCTF 平台导出的所有考点标签,可以作为 WP 撰写时参考。

统一术语名词,有利于后续的知识点整理和手动查找。

# 以下查询需要依赖 Linux 平台上的 jq 工具
# sudo apt update && sudo apt install jq

# 查询 WEB 考点下 SQL注入相关考点
cat stats/ctf_tags.json| jq '.[] | select(.value == "WEB") |.children[] | select(.value == "SQL注入") |.children[].value' | tr -d '"'
# POST注入
# 布尔盲注
# 时间盲注
# 报错注入
# 宽字节注入
# 堆叠注入
# Insert注入
# Update注入
# Cookie注入
# 关键字绕过
# 空格绕过
# 字符绕过
# 二次注入
# 无列名注入
# quine注入
# unique注入
# nosql盲注

# 查询 MISC 考点下所有考点
cat stats/ctf_tags.json| jq '.[] | select(.value == "MISC") |.children[].value' | tr -d '"'
# 图片隐写
# 音视频隐写
# 编码分析
# 压缩包分析
# 文档隐写
# 流量分析
# 电子取证
# 工业控制
# JAIL
# 其他

WP 仓库

About

CTF WPs Collections

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages