这些笔记来源于课程《CTF竞赛与创新实践》。该课程使用的教材为清华大学出版社出版的《CTF安全竞赛入门》。文中涉及的所有题目大多来自这本书。其余题目来源于课程。
前言
CTF是网络安全竞赛的一种常见形式。在这些笔记里,我们将着重介绍解题(Jeopardy)比赛的环节。具体而言,以解决网络安全技术挑战题目的分值和时间来排名。Web安全涉及的网络安全知识较为基础。门槛适中,易于上手,对初学者尤其友好。
本笔记使用的所有工具版本如下:
- Windows11 22621.3958
- Burpsuite V2024.9.1
- 御剑1.5
- Phpstudy V8.1
- 火狐浏览器 135.0.1 (64 位)
Web基础知识
WEB指的是万维网。最常见的形式就是网页。当然,现在的多数手机软件本质上也是以访问网页为基础的。这里不做过多阐述,相关资料参考:
Web请求的原理:见此;
HTTP请求的原理:见此;
Web 静态安全
Web安全类型题目的解题套路一般可以分为以下几步:
- 查看源码;
- 目录扫描;
- 拦截抓包;
我们在下面详细地介绍它们。
本地服务器配置
我们使用Phpstudy来配置本地服务器。这样就能更好的对题目本身进行研究与处理。
关于如何配置本地服务器的流程可以参考这里。
在 PHPStudy 所搭建的本地服务器环境里,“WWW” 文件夹默认被设置成网站的根目录。当在本地浏览器中输入类似 http://localhost
或者 http://127.0.0.1
这样的地址时,服务器会自动去 “WWW” 文件夹里寻找对应的文件资源。
1.“Where is the flag?”(查看源码)
先看第一道题:“Where is the flag?”
我们将题目源码放到WWW文件夹下(不用带着文件夹,为防止文件名重复,已将index.php替换为whereistheflag.php)。
访问localhost/whereistheflag.php
,能够看到这样的页面:
除此之外,我们看不到任何信息。
我们可以使用F12
来查看网页源代码。看到了这样的画面:
注意到里面出现了<!--flag:{This_is_s0_simpl3}-->
的字样,所以,flag就是flag:{This_is_s0_simpl3}
。
为什么我们在页面里看不到这行字?因为这行字是以注释的形式写在代码里的。如果我们正常的查看网站,就不会看到注释。因此,必须查看网页的源代码才能看到它。
2.“Where is the logo?”(目录扫描)
我们继续将第二题的题目源码粘贴到WWW文件夹里(同上,已将index.html替换为whereisthelogo.html)。访问localhost/whereisthelogo.html
,可以看到如下界面:
查看网络源代码,可以看到:
我们仍然没有发现线索。这时候,就要考虑使用目录扫描来解题了。目录扫描是一种渗透测试的技术。允许我们扫描到网站根目录的结构,进而发现敏感文件与线索。
目录扫描的原理是通过向目标服务器发送一系列预设的目录和文件名请求,然后分析服务器的响应来确定这些目录和文件是否存在。具体步骤如下:
我们使用的是御剑扫描工具。关于它的用法与介绍可以参考这里。
启动御剑1.5,选择“批量扫描后台”,在“作业数量”处新建并添加网址http://localhost
。,选择所有字典,随后启动扫描,得到了如下结果:
注意到这其中有一个不寻常的robots.txt
。我们访问http://localhost/robots.txt
,得到了这样的网页:
这是一个由字符@、+、;、.
等符号组成的图片,但我们也可以发现其中掺杂了一些特别的字符:
我们可以通过一个Python程序将其中的有效字符提取出来。这里举个例子:
#!/usr/bin/python
file=open('robots.txt')
char_set="{}abcdefghijklmnopqrstuvwxyz_0123456789-"
flag=""
for line in file:
for c in line:
if c in char_set:
flag=flag+c
print (flag)
运行结果如下:
所以,flag就是venusctf{haha_-_-}
。
拦截抓包属于Web动态安全的范围。将在之后再进行探讨。
附加: