news 2026/10/1 9:26:10

零基础CTF入门指南:从环境搭建到拿下第一个flag的三个月路线

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
零基础CTF入门指南:从环境搭建到拿下第一个flag的三个月路线

先说结论:CTF 不是只有天才才能玩的竞赛,它更像是一场“拆解游戏”的思维训练。哪怕你现在连 HTTP 协议是什么都不知道,只要愿意花三个月时间照着路线走,也能在 ctf练习网站 上拿到自己的第一个 flag。这个教程不给你灌鸡汤,我会把前面这些年带新人踩过的坑、试错过的路径、用顺手的 ctf工具 全部摊开来讲,尽量做到看完就能动手。

我一直觉得,CTF 入门最大的门槛不是技术,而是“不知道从哪里开始”。网上教程不少,但要么太散,要么默认你什么都会。这篇文章就是针对纯小白的:从 CTF 是什么、有哪些题型讲起,到怎么搭环境、怎么选练习平台、怎么做第一道题,最后再聊聊你大概率会碰到的几个坑。适合所有刚接触 ctf入门、想参加 ctf数据安全赛真题 或者单纯想找点有趣挑战的朋友。

1. 先搞清楚 CTF 到底是个什么东西:夺旗赛的玩法与含金量

CTF 全称 Capture The Flag,中文叫夺旗赛,最早是黑客圈子里互相切磋技术的游戏,现在发展成了网络安全领域最主流的竞赛形式。比赛的目标很简单:在指定的题目环境中找到一个特定的字符串,也就是 flag,提交给平台换取分数。flag 的格式一般是flag{this_is_a_flag}或者ctf{...},你就把它理解成“闯关成功”的凭证就行。

CTF 不是那种看谁打字快、比谁拼手速的游戏,它考验的是你对计算机底层原理、网络协议、编程能力、逻辑思维的综合运用。我做过的题目里,有的只需要一眼识别出编码格式,有的要你从一张 PNG 图片的像素里挖出隐藏信息,还有的要你分析一段恶意流量包还原出攻击过程。每一种题型都在逼你用不同的视角去理解计算机世界,这也是它的魅力所在。

1.1 三种赛制:解题赛、攻防赛与混合赛

先讲赛制,因为你报名一个比赛之前,得先搞清楚它大概怎么玩,不然很容易跟错方向。

第一种是解题赛(Jeopardy),也是绝大多数新手首先接触的赛制。平台会把题目按类别和难度排列在面板上,有点像赌博游戏里的答题板,你点击题目就能拿到描述和附件,解出后提交 flag 得分。现在大量线上赛、入门公开赛用的都是这种模式,优势很明显:节奏自由、覆盖知识广、适合个人训练。

第二种是攻防赛(Attack-Defense),分两个阶段。防御阶段要加固自家服务器,防止对手攻破;进攻阶段要尝试打穿对面的服务,拿到对手的 flag。这个赛制非常刺激,但也非常考验综合实战能力,新手先看看直播录像感受一下就行,不建议直接报名正赛,容易被打到怀疑人生。

第三种是混合赛,前半段解题筛选、后半段进入攻防,通常是国内高校赛和厂商赛的主流形式。对新手友好的点在于:解题赛部分能拿到的分数占比不小,哪怕攻防不给力,靠前面解题也能积累经验。

1.2 五大常规题型:你将来要面对的所有对手

不管赛制怎么变,题目类型基本固定在这五个方向:Web、Pwn(二进制利用)、Reverse(逆向工程)、Crypto(密码学)、Misc(杂项)。

  • Web:针对网站应用的漏洞攻击,比如 SQL 注入、命令执行、文件上传漏洞、源码泄露。这个方向对新手最友好,因为原理贴近实际,做起来很有成就感,ctf web解题 搜出来的热门内容也基本是这个方向。
  • Crypto:考察密码学知识,从小学奥数级别的凯撒密码,到让你用数论知识去分解 RSA 的公钥,跨度很大。后续热词里出现频率极高的 ctf密码学,对应的就是这个方向。
  • Misc:杂项,题材最自由,包括图片隐写、流量分析、压缩包破解、编码转换、甚至社工题。门槛相对低,但陷阱最多,非常考验耐心和敏锐度,很多人第一个 flag 都是从 ctf杂项题目 里拿到的。
  • Reverse:逆向分析一段可执行文件,读懂它的算法逻辑,还原出加密前的明文。需要 C 语言、汇编基础和逆向工具链,属于进阶路线。
  • Pwn:最硬核的方向,利用程序漏洞(比如栈溢出)实现远程代码执行,需要扎实的系统底层功底,也是攻防赛里的主力得分点。

我的建议是:入门阶段不要碰 Pwn 和 Reverse,先把 Web、Misc、Crypto 这三个方向的基础套路练熟,拿到稳定分数、建立正反馈再说。后面我会把这三个方向的核心考点逐个拆开讲。

2. 零基础入门的 2026 版路线规划:从装环境到第一次拿 flag

很多人问“零基础学 CTF 要多久才能入门”,我的回答是:认真准备两周就能入门,三个月能形成稳定解题能力。关键在于路线别走偏,环境别卡壳,否则绝大部分时间都耗在了“装环境失败”上。下面这条路线是我带新人复盘过很多次之后固定下来的,照着走能少走一半弯路。

2.1 工具环境搭建:虚拟机、Python 与抓包工具

我见过太多人在这一步就被劝退了:不是电脑太老带不动虚拟机,就是装系统时分区弄错。这里给一套容错率最高的方案。

第一件事,装一个虚拟机软件。我用的是 VMware Workstation Player,免费版就够用。不建议直接在物理机上装渗透测试系统,因为你要做很多可疑操作,隔离在虚拟环境里安全感强很多,出了问题一键恢复快照就行。装完虚拟机后,在里面装一个 Kali Linux,这是做安全测试最顺手的 Linux 发行版,自带几百个安全工具,省去了手动配置的麻烦。

第二件事,在你的本机装好 Python 环境。CTF 里大量题目需要写脚本穷举、解密、分析数据,Python 是绝对主力语言。我建议直接装 Anaconda,里面的 Python 自带几百个常用库,省得后面为了一个库反复折腾环境变量。写脚本的时候注意保存成.py文件,别老在交互式环境里敲,因为真正比赛时要快速反复改代码。

第三件事,Web 方向必备的抓包工具 Burp Suite。简单说,它就是给你浏览器和服务器之间的通讯做的“显微镜”,能看到每个 HTTP 请求的完整内容,还能手动改包后重发。社区版免费,功能足够用到打国赛了。工具不在多,学会这几个已经能覆盖 80% 的入门场景:Wireshark 看流量包、010 Editor 看十六进制、Stegsolve 看图片隐写层。

2.2 知识地基:编码、协议与 Linux 基础

工具只是手,真正的脑子是知识体系。入门阶段,我的建议是先啃三块硬骨头:编码、协议、Linux 命令。

编码这块要先认识 Base64、十六进制、URL 编码、摩斯电码、凯撒密码这几种最常见的格式。判断标准也很简单:结尾是=的八成是 Base64;全是\x开头或%开头的是十六进制或 URL 编码;由点和横线组成的是摩斯电码;字母整体偏移了 n 位的是凯撒。很多 ctf杂项题目 其实考的就是编码识别能力和工具灵活度,你只要能认出编码类型,后面解密基本是水到渠成。

协议这块重点学 HTTP。你要知道一个 HTTP 请求由请求行、请求头、请求体组成,知道 GET 和 POST 的区别,知道 Cookie 和 Session 是干嘛的。Web 题里大量的漏洞利用都要手工构造 HTTP 请求,不懂协议细节连题面都看不明白。我推荐的做法是装一个浏览器插件,比如 HackBar,可以直接在浏览器里反复构造请求测试。

Linux 命令这块,先把ls、cd、cat、grep、find、tar、strings、file这八个命令练到肌肉记忆。做 Misc 题时经常要解压一堆文件、检查文件类型、在可疑文件里搜字符串,这些操作在 Kali 的终端里都是一行命令的事。

2.3 三个月入门节奏:新手可复制的刷题计划

我帮几个零基础新人做过这样的计划,执行效果都还不错。第一个月,只看基础理论和做简单题,目标是把 Web 和 Misc 的基础题型过一遍,每天保证做三道题,不会就看 writeup,然后理解后重新做一遍。第二个月,开始接触 ctf密码学 和 Web 的中等难度题,同时学会写简单的 Python 解密脚本。第三个月,参加线上公开赛,限定自己在四小时内尽量多解题,赛后花两天时间刷所有题目的 writeup 搞懂思路。

这里面有个很关键的认知:CTF 的题目难度是“指数增长”的,入门期的简单题可能只需要一个知识点,进阶题却要把多个知识点串联起来。所以头三个月不要贪多,把一种题型的套路吃透,比泛泛地看着二十种解法要强得多。

3. 核心方向逐个拆解:Web、杂项与密码学的常见考点

现在把入门阶段最重要的三个方向展开讲讲。我要讲的不只是知识点列表,而是每个考点背后的解题思路和实战经验,因为这些才是你上了赛场真正用得上的东西。

3.1 Web 方向:报错注入、命令执行与源码泄露

Web 方向本质上是“揣测开发者的失误”。新手最容易接触到的几个考点,我按出现频率排一下。

第一个是 SQL 注入,特别是报错注入。这类题的典型交互是页面上有一个查询框,号称“输入 id 即可查询到信息”,你输入1能正常返回,输入1'报错,再输入1' and '1'='1又能正常返回。这种“报错很奇怪”的感觉,恰恰说明数据库在和你“对话”。入门阶段你只要掌握三种方式就行:用1' order by n--判断字段数,用1' union select 1,2,3--找回显位置,然后用database()、version()等函数把数据库信息套出来。很多新手在这里卡住,是因为把 SQL 语句拼到了字符串里而没注意引号闭合规则,我建议在本地用靶场环境自己构造几条语句试试,比看一百篇教程都有效。

第二个高频考点是命令执行,热词里提到的passthru就是典型代表。这类题的常见形态是一个输入框,提示你输入 IP 地址来 ping,但开发者直接把输入拼到了系统命令里,导致你可以输入127.0.0.1; cat /flag或127.0.0.1 | ls之类的内容来执行额外命令。做这类题的关键是先确认注入点用的是;、&&、|中的哪种分隔符,再看目标机器是 Linux 还是 Windows,最后才是想命令。我踩过的坑是:使用;时前面的命令如果执行失败,后面的命令也可能不会执行,所以优先用|或者换行符%0a来尝试。

第三个考点是源码泄露,其中最常见的是 git 泄露。很多开发者把网站在线部署的时候,没有把.git目录一起屏蔽掉,导致你可以直接访问https://target/.git/暴露的版本库文件。利用方式也很无脑:下载.git目录,然后用git log看历史提交记录,用git stash list看藏着的东西,用git checkout恢复被删掉的源码文件,在历史版本里往往能找到被注释掉的密码、接口地址甚至直接的 flag。顺便说一句,这里用到的工具是 GitHacker 或者 GitDumper,Kali 里配一下就能用。

3.2 杂项方向:隐写、编码与流量分析的实战思路

Misc 是五花八门的大杂烩,很多新手第一次拿 flag 就是在这里。我把近两年高频出现的题型分成三类。

第一类是图片隐写。你可能拿到一张看起来非常普通的 PNG 或 JPG,其实 flag 就藏在图片的最低有效位、EXIF 信息或者附加数据里。入门阶段的操作流程很固定:先用strings在图片里搜可读字符串,再用binwalk检查是否拼接了隐藏文件,接着用 Stegsolve 逐层查看图片的 RGB 通道,最后用zsteg做更精细的隐写提取。以前我做过一道 ctf二维码 变种题,flag 用白字写在了二维码的码眼区域,肉眼几乎看不出来,但是用 Stegsolve 把灰度拉高就清清楚楚。

第二类是流量分析。给一个.pcap抓包文件,让你从里面找关键信息。新手最容易上手的是用 Wireshark 打开,先看统计里的协议分层,再用过滤表达式定位 HTTP 或者 DNS 流量,然后右键追踪 TCP 流或者 HTTP 流,很多登录凭证、文件传输内容就直接出现在流里了。经验之谈:比赛给的流量包一般都不大,超过 99% 的情况是有明确指向性的,所以看到流量包先别慌,过滤到可疑协议再看内容。

第三类是编码转换与文件处理。从 base64、十六进制、各种编码混用的字符串,到被修改了文件头的压缩包,再到嵌套多层压缩包,全是这一类。套题千变万化,解题心法只一条:永远先file看文件真实类型,别被后缀名骗了。我见过太多人拿着一个明明是 zip 的文件,硬按 DEX 格式去解,折腾半小时才发现文件头被改了。这类题用到的 ctf工具 也不复杂,一个十六进制编辑器改文件头,一个随波逐流之类的一键解码工具箱解编码,一个 7-Zip 暴力解压脚本,基本就够。

3.3 密码学方向:从古典密码到 RSA 的上升之路

ctf密码学 在热词里的热度一直很高,因为它有一个天然优势:题目边界清晰,只要数学和编码基础到位,很多题就是套模板。

新手阶段先从古典密码学起。凯撒密码是最基础的,特点是字母表整体平移,适合用 Python 写个循环穷举 26 个偏移量,输出看到可读的英文就停。维吉尼亚密码是它的加强版,用密钥逐位决定偏移量,识别特征是有周期性重复的偏移规律。摩斯密码前面说过,由点和横线组成,解码直接查表就行。到这一步,你手头应该已经慢慢积累了自己的“编码识别笔记”,遇到特征能快速往正确方向靠。

再往上走,就要碰 RSA 了。RSA 是公钥加密算法的代表,入门题目几乎全是同一套模式:给n、e、c,让你求m。原理层面的东西现在先不展开,实操层面你只需要知道两点:第一,n是两个大素数p和q的乘积,如果n很小或者能被分解,题目就简单了;第二,解密需要求d = e^{-1} mod φ(n),可以用 Python 的gmpy2库算模逆,再对密文做模幂运算。写 RSA 解密脚本是我强烈建议新手自己动手写的第一个“正儿八经”的 Crypto 脚本,因为代码量不大,但覆盖了选库、数学运算、格式处理一整条链路。

3.4 逆向与 Pwn:进阶方向的一个客观定位

我必须给新手一个客观的忠告:别一上来就钻 Pwn 和 Reverse。倒不是说这两个方向不重要,而是它们的学习曲线实在太陡峭。Pwn 要懂系统调用、栈结构、CPU 寄存器;Reverse 要懂汇编指令、软件脱壳、反混淆。这些知识在零基础的情况下,可能要花一到两个月才能建立起初步体感,远不如 Web 和 Misc 能带给你“每做一道题就有新东西”的正反馈。

我的建议是:入门阶段把这两个方向放一放,但保持关注即可。等你 Web 和 Crypto 相关题目能稳定打到中等难度,再回头尝试 Reverse 也不迟,而且到时候你 Python 和 Linux 的底子已经能反过来支撑逆向工具的使用。攻防赛里 Pwn 是核心得分点,但现在想这个问题还太早。

4. 练习平台与高频题目关键词解析:去哪里刷题

学习 CTF 最忌讳的就是只在书上看概念、不上手做题。那去哪里练手呢?我根据自己的实测体验,把国内几个免费平台的好坏处都写出来,你再按需求选。

4.1 国内免费平台实测体验

先说明一点,我一直主张新手优先用国内平台。倒不完全是稳定性的问题,而是国内平台的中文题面、题型分布和解题氛围更贴近你的学习场景,社区里配套的 writeup 也更全。下面这几个是我实际用过、且还在持续更新的。

  • CTFShow:新手村氛围最浓的平台之一。它的题目按难度分得很细,技能树循序渐进,几乎每个题都有社区配套解题分享,而且平台稳定性不错。我推荐它作为你的第一个长期训练平台。
  • 攻防世界:老牌平台,和高校教学绑定较深,题库中题目质量较高,里面有不少历年真题。适合你刷完新手题之后踏步进阶。
  • Bugku:题目类型覆盖 Web、Misc、Crypto,有些题目创意很好,适合拿来开拓思路。
  • NSSCTF:题目分类清晰,网站速度快,很多校内赛会用它当线上赛平台。
  • 青少年 CTF 平台:字面意思,面向学生群体,题面友好,新手从零开始不会感到被碾压,非常适合作为第一站。

顺带说下,热词里出现的 Polar CTF,也是一个偏新手的综合平台,题目风格偏趣味化,像什么“签个到叭”“神秘组织”这类题,说白了就是用轻松的题面降低你的心理压力。我都建议你注册几个,反正都免费。

4.2 从热搜词看新手群体的真实需求

如果把近期搜得比较多的 CTF 关键词拉出来看,会很有意思。比如ctf what is the keyword?这类题,本质就是新手签到时卡在第一步——不知道该提交什么格式的 flag;git泄露、命令执行 passthru、报错感觉好奇怪这些,全都是 Web 方向新手绕不开的坎;keyboard2.0这种题名则对应的是键盘九宫格类的密码题型;随波逐流 ctf 编码工具说明大家已经意识到解码快捷键的重要性。这些热词就是一张现成的入门地图:先学编码识别、再练 Web 注入和命令执行、接着接触源码泄露类题型。

还有一点值得注意:数据安全赛真题这类词出现的频率在变高。这说明 CTF 不只是竞赛玩家的小众游戏,它已经延伸到了数据安全能力验证、企业红队评估等场景。学 CTF 不再单纯为了比赛排名,也真的能提高你在真实业务场景里发现问题和解决问题的能力。

4.3 一套完整的入门解题实操演示

光讲框架不够,我带你把一道典型入门题完整做一遍,这样你就能把前面说的所有环节串起来。

假设你在某个平台拿到一个压缩包附件,下载下来名字叫misc1.zip,提示是“找找隐藏的线索”。第一步,先在终端跑file misc1.zip,确认它确实是 zip 格式而不是改后缀的假货。第二步,用binwalk misc1.zip看一眼有没有拼接附加数据,结果发现末尾藏了一张 PNG 图片。第三步,用dd命令把图片从压缩包里分离出来:

binwalk -e misc1.zip

如果这条命令没自动解出来,你就手动算偏移量后用dd if=misc1.zip of=flag.png bs=1 skip=XXXXX来分离,XX 就是 binwalk 里显示的偏移地址。第四步,拿到flag.png之后先用strings flag.png | grep -i flag搜一下,如果没结果,再用 Stegsolve 打开逐层翻通道,终于在红色通道的最低几位里看到了一段 Base64。第五步,解码:

echo "ZmxhZ3traWxsX3lvdQ==" | base64 -d

输出flagkillyou一类的字符串,你按平台要求的格式包上flag{}提交,这道题就过了。中途如果卡在某一步,多半是工具没装全或者偏移量算错,用之前说的工具清单自查一遍就好。

5. 新手常见的坑点与工具使用心得

我最后写这部分,是因为太多人在同样的地方反复跌倒。下面是这几个坑的详细避雷指南,都是我亲眼见过、亲身体验过的,值得你收藏起来当自查表。

5.1 最容易犯的五个低级错误

第一个错误:不看文件名和后缀的真实格式。很多杂项题故意把文件后缀改掉,你直接双击发现打不开,就以为题目有问题。正确姿势是每条命令之前先跑file,让工具告诉你真实类型。

第二个错误:拿到题就冲,不做信息收集。这尤其体现在 Web 题上,题面还没读两遍就开始盲目尝试注入,结果全在做无用功。我建议每道题先动手收集三样信息:题目给的提示词、页面源码里的注释、URL 参数结构。80% 的新手题,答案就藏在这三个地方的某一个里。

第三个错误:忽略 flag 的格式校验。很多平台提交 flag 时不区分大小写,但你自己构造的答案却有大小写问题,导致明明解出了正确内容,提交却永远是错的。我的建议是先把平台规则看清楚,提交之前再检查一遍字符案例。

第四个错误:只抄 writeup 不复盘。看 writeup 是学习,但如果只是把答案抄下来,下次遇到同类题你还是不会。正确方式是先凭记忆写一遍自己的解题步骤,写不下去再回头翻 writeup,然后合上教程,独立重做一遍。

第五个错误:不建立自己的解题笔记。CTF 的考点是有限的,只要做过几百道题,你会发现万变不离其宗。如果不做笔记,你每次做题都得重新翻工具手册,效率极低。

5.2 工具配置与代码习惯的几条建议

工具这块,我有几条居家旅行的建议。首先,把编码转换工具装两个:一个在线版(比如 CyberChef),一个本地版(比如随波逐流系工具箱)。在线版适合临时查,本地版适合比赛时网络不稳定时兜底。其次,把常用 Python 库固定成一张懒人清单:gmpy2做数论运算、pycryptodome做常见加解密、PIL做图像处理、requests发 HTTP 请求、binascii做进制转换。老记不住库名没关系,把这张清单贴在桌面就行。

代码习惯上也提一句:写解密脚本尽量用函数拆分,比如“读文件”“解析格式”“核心解密”“输出结果”各写一个函数,因为比赛里经常需要改输入格式,不好拆的话当天手忙脚乱的就是你。

关于日常练手频率,我自己的经验是:保持每天至少完成一道题的节奏,周末再突破一道中等题。刷题平台多了之后,你会发现每个平台的出题口味不一样,这个阶段你就可以按需挑选了。长期坚持下来,你见过的题型越多,赛场上遇到陌生题时心里越不慌。

最后再分享一个小技巧:入门阶段,把每道题都当成“教案”而不是“任务”。你做完题之后,试着用三句话给别人讲明白这题的考点和解法,讲着讲着,你的思路就通透了。我从第一次做 Web 题看到 sqlmap 自动跑出结果时的一脸茫然,到现在能随手构造手工注入语句,靠的就是这套练习加复盘的方法。CTF 这条路没什么神秘可言,无非是见得多了、踩得多了、总结得多了而已。希望这篇教程能成为你起跑线上的一块垫脚石,咱们赛场上见。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 9:24:47

马德拉酒是什么?一文读懂加强酒的工艺、风格与陈年体系

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/1 9:24:40

KANO模型实战指南:识别用户真实需求优先级

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/1 9:24:32

Windows 10安装VMware Workstation Player 17:从零到跑通虚拟机的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/1 9:23:37

ADB安装与驱动配置全攻略:从USB调试到连接问题排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/1 9:23:04

博图卡顿根因与Win11兼容性优化全指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/1 9:22:24

Apache POI Excel流解析失败的根源与防御方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华