跳转至

WEB 安全

Tips:当你遇到什么问题的时候,为什么不先来看看 wiki 呢?

这是什么?

什么是 Web?经典的 Web 学习文档 MDN 是这样回答的:Web 是建立在互联网之上的许多应用程序之一

作为 CTF 中最为经典的方向,Web 在我们日常的网络生活中相当常见,当你电脑打开浏览器访问视频网站、手机打开小程序点餐,背后都离不开互联网与 Web。而 Web 安全(Web Security)就与之息息相关

横向对比其他方向

为什么说 web 好入门,我们先看看其它方向相较于 web 难在了哪里。首先是犯下了怠惰之罪的...

相较于 pwn 和 re,web 在入门之初不需要掌握系统底层的知识

相较于 crypto 和一些 misc 问题,web 不需要具有特别强大的编程与算法能力

但是同样的,既然是 CTF 中最为经典的方向,就意味着相较于其他方向,Web 的学习者是最多的,学习的广度与深度都有较高的要求,如果想要在比赛中大放异彩,则需要付出比其他方向更多的努力

与渗透的关系

渗透和 web 安全算是有着一个比较大的交集

在 CTF 中,web 考察更多的是对于某个或某些漏洞的深度理解与研究,其靶机可以视作是对真实环境某一部分的抽象;而渗透需要集中的点则是一个完整的攻击链路,从最开始的信息收集,再到具体目标的识别与漏洞匹配,然后是更深一步的内网渗透。

笔者个人评价的话,Web 偏研究,渗透偏商务(

当然,要学渗透的话 web 安全的学习仍然是必不可少的,只是不需要钻研的过深。

快速入门

⚠️ 如果在此之前您对计算机接触较少,那么我建议可以先看看《计算机教育中缺失的一课》(搜索引擎自行搜索,从这一刻开始您需要养成使用搜索引擎获取资料的习惯)或者看看暨南大学 Xp0int 战队编写的入门文档

⚠️ 如果在此之前您尚未学习过任何一门编程语言,那么请先学习一门编程语言以获取基础的语法思维,Web 会接触到各种各样的编程语言,我们需要一个通用的语法思维以应对各种语言的审计。

方法论

大多数情况下需要你自学学习大部分知识,且与中学传统先教后做的学习方式相反,笔者推崇先有需求后有学习的学习方式。

对于 CTF 的日常训练,当你拿到一道题时,在完全不了解这题可能的思路的情况下,直接查看该题的 WriteUp(题解)是最优解,从这一题的 WriteUp 出发,你需要解决 WriteUp 中不明白的所有部分,以及反推出为何是如此思考的

对于前者,比如说欠缺编程基础看不懂题目源码,那么就可以去翻阅对应语言对应函数的相关文档(注意,此时你的首要任务是解决这道题,为此我们不需要进行过多的编程语言练习,此阶段对于编程基础的掌握请点到即止)。Web 方向在日后的学习中会遇到各种各样的编程语言搭建的 Web 服务器,如 PHP、Python、Nodejs、Java、Golang、Rust、Ruby 等等,对于解题而言我们不可能投入大量时间在每一种语言上,为此大多数情况的学习要求只需要具有该语言基础的 Web 开发能力即可。

对于后者,通俗的讲就是你能够自己理清楚一条完整的解题链路,并活用于之后遇到的类似题型。

常见问题

方法论讲完了,接下来讲讲萌新阶段可能遇到的问题,可能和 QUICK START FAQ 部分有所重叠:

  • ⚠️ “零基础能不能打新生赛?”:为什么新生赛叫新生赛,如果你想打,即使是零基础为什么不踏出第一步试试呢?
  • ⚠️ “入门推荐什么方向?”:既然你都在 Web 版块下了那还用说吗(不是),每个方向其实都可以试一试,萌新阶段试错的机会还是挺多的
  • ⚠️ “为什么我把这道题问 AI 它回答不出来”:首先检查一下你询问 AI 的方式,有没有表述清楚自己的需求;其次 AI 不是万能的,尤其是在网络安全这部分,部分 AI 甚至会因为道德审查拒绝回答,此时你需要做的是重新开启一个对话,然后分块讲述的你的需求,比如:这个函数是如何执行的,这部分的原理是什么,我如果想 xxx 的话可以尝试怎么做
  • ⚠️ “学长学长为什么我这个出不来?”:请先阅读 《提问的智慧》,确保你已经完成了能做的事情,然后提供尽可能完整的相关信息给你要提问的人。

萌新必做

请先保证阅读并了解了上面的内容再继续下面的内容

  • 新生赛:每年的 8 月份开始就会陆陆续续有组织举办 CTF 新生赛,这是入门的最佳选择,请务必参加,如 MoeCTF,NewStarCTF 等等
  • 刷题:基础的学习与题量的支撑缺一不可,具体的刷题平台会在下面给出
  • 博客记录:Web 安全要学习的知识量繁多且复杂,强烈建议搭建一个自己的博客(CSDN、博客园、GitHub Pages 等等)用于记录平时的刷题、知识学习。作为一个 Web 手,拥有一个自己风格的 Web 博客并且能够修改前端主题是一件值得享受的事 😋
  • 能力需求:基础编程能力、活用搜索引擎、正确的提问姿势、合理的 AI 运用

平台与工具与比赛信息

部分工具可能没给链接或者安装有问题或者没做详细说明,请活用搜索引擎(

刷题平台:

好用的工具:

  • PHP 环境搭建:Windows 下推荐 PHPStudy 小皮工具箱,MacOS 下推荐 FlyEnv
  • Docker:建议学习,然后就能快速部署 Hello-CTF Labs 进行系统 web 学习
  • 编解码工具 Cyberchef:https://cyberchef.org
  • 抓包:BurpSuite、Yakit
  • 浏览器扩展:Hackbar、SwitchyOmega
  • 工具/脚本还有很多,需要自行在日后的学习中不断收集

比赛信息:

其它:

  • 很多好用的 Payload:https://github.com/swisskyrepo/PayloadsAllTheThings
  • 各个技术社区&大佬的博客都是学习的好地方
  • 以及你上网搜到的任何结果

学习路线

施工中

心态

  • 前面说过,web 的知识点十分广,比赛时遇到的东西可能和你已经学了的只有很小交集甚至没有,这个时候就需要现搜现学现用,不要畏惧困难,一步步跟着已有信息学习与解题,万一能做出来呢?最后做不出来也没关系,赛后复现的时候再学明白就行
  • 脚踏实地的刷题学习,重点在质不在量
  • 不必急于求成,每天坚持学习一点也是进步
  • 行动 > 胡思乱想

最后,请享受 CTF 学习与比赛的过程吧 😋