OIer 的 CTF Web 基础知识学习笔记
由于某些原因某 OIer 零基础学习 CTF 被打爆了 QWQ
本文一切例题均可在 CTFHub 找到。
HTTP 请求方式
HTTP 是一种协议,定义了客户端和服务端的请求规范。HTTP 默认使用 80 端口指向服务,而 HTTPS 协议的默认端口为 443。
HTTP 有下表中的八种方法:
方法 | 描述 |
---|---|
GET |
请求获取指定页面的实体数据 |
HEAD |
请求获取指定页面的头信息 |
POST |
向指定资源提交数据进行数据请求 |
PUT |
传输数据取代指定文档的内容 |
DELETE |
请求删除指定页面 |
OPTIONS |
允许查看服务器性能 |
TRACE |
返回服务器收到的请求 |
例题
题目地址:CTFHub -> 技能树 -> Web -> Web 前置技能 -> HTTP 协议 -> 请求方式
翻译一下题意。这道题指定了新的 HTTP 方法
CTFHUB
,要求我们使用 CTFHUB
方法获得
flag。
curl
介绍
该题可在终端中使用 curl
指令获取 flag。curl
是一个终端中请求 Web
服务器的工具。常用方法如下表(无参数时直接返回网页源码):
参数 | 描述 |
---|---|
-i |
额外获取头信息 |
-I |
仅获取头信息 |
-v |
获取更为详细的信息 |
-X <command> |
指定 <command> 命令 |
-L |
HTTP 请求跟随重定向(curl 默认不重定向) |
这道题使用 curl
情况如下:
1 | xenonwzh@XenonWZH-Surface:~$ curl -v -X CTFHUB http://challenge-XXX.sandbox.ctfhub.com:XXXXX/index.php |
于是我们就可以获取 flag 了。
HTTP 302 跳转(临时重定向)
当服务器无法处理收到的请求时,服务器会告诉浏览器跳转到一个可以处理该请求的 URL 上。重定向的返回码为 3XX。Location 相应首部包含了内容新地址或者优先地址的 URL。
返回码的意义如下表:
返回码 | 意义 |
---|---|
301 | 请求的 URL 已被移除时使用,Location 首部包含所在资源的 URL(永久性转移) |
302 | 该请求 URL 转移,将来的请求仍使用老的 URL,Location 首部给出 URL 临时定位资源(暂时性转移) |
例题
题目地址:CTFHub -> 技能树 -> Web -> Web 前置技能 -> HTTP 协议 -> 302 跳转
我们可以通过开发工具 -> 网络中找到状态为 302 的链接。
使用 curl
可以看到这个链接中因重定向而没看到的内容(curl
默认不跟随重定向)。
于是我们可以得到下列信息:
1 | xenonwzh@XenonWZH-Surface:~$ curl http://challenge-XXX.sandbox.ctfhub.com:XXXXX/index.php |
于是就获得了 flag。
Cookie
Cookie 是浏览器存储在本地的一种数据,可让服务器确定当前请求的用户的身份。Cookie 数据量一般不超过 4KB,所以 Cookie 只能存储少量数据。
例题
题目地址:CTFHub -> 技能树 -> Web -> Web 前置技能 -> HTTP 协议 -> Cookie
题意翻译一下即使用 admin 登录获取 flag。
brupsuite
brupsuite 是一个渗透测试工具,且 Kali Linux
自带。这个工具可以抓包改包。使用这个工具,我们首先需要在浏览器中设置
HTTP 代理为 127.0.0.1:8080
,开启工具后我们点击 Proxy ->
Intercept -> Intercept is on 即可拦截请求。该题网站的请求如下:
于是我们只需要修改 admin=1
,然后点击 Forward
完成改包,就修改了 Cookie 中的 admin
项了。于是我们就可以在网站上看到 flag 了(看不到刷新即可)。
HTTP 基本认证
在 HTTP 中,HTTP 基本认证是允许 HTTP 用户代理(如浏览器)在请求时,提供用户和密码的一种方式。
在认证时,请求的 HTTP 头字段会包含
Authorization: Basic <凭证>
的信息。凭证为用户名和密码组合的 base64 编码。
例题
题目地址:CTFHub -> 技能树 -> Web -> Web 前置技能 -> HTTP 协议 -> 基本认证
本题要求登录 admin 账户以获取 flag,且提供了可能的多种密码。
我们可以先用 brupsuit
抓个包,抓包方法同上一题。输入密码后我们可以看到
Authorization :Basic XXX
数据,且 XXX
为
base64 编码。我们将其解码可发现 admin:<密码>
的字样,这正是我们需要爆破的地方。我们可以点击 Action -> Send to
Intruder 将数据传至测试器。
于是我们可在测试器中选择要爆破的数据,选择数据后点击 Add,方法如下图:
接着我们点 Payloads 选择需要爆破的内容。在 Payload Options
可以添加爆破的字符串的字典,例如这里可能的密码。在 Paylod Processing
可添加爆破的过程,例如这里我们可以选择添加 admin:
前缀,将整个字符串使用 base64 加密。操作效果如下图:
最后点击 Start attack 即可爆破。爆破完成后状态码为 200 的请求即使用了正确的密码。于是我们选择状态 200 的请求,提取出其中被 base64 加密的密码,解密输入网站中即可获得 flag。获得的请求如下图:
HTTP 响应包源代码
没啥好讲的,浏览器直接按 F12 或右键 -> 查看网页源代码即可看到源代码。
例题
题目地址:CTFHub -> 技能树 -> Web -> Web 前置技能 -> HTTP 协议 -> 响应包源代码
直接在浏览器中按 F12 即可看到 flag。情况如下图: