CTF中的HTTP基础-Writeup


在进行Web攻防之前,有必要对HTTP的基础进行巩固,掌握必备的基础技能,为面对更多更复杂的问题打下基础。

题目列表

题目均来自于CTF Hub,在技能树->Web->Web前置技能->HTTP协议中即可获取到本题单。

  • Cookie
  • 请求方式
  • 302跳转
  • 基础认证
  • 响应包源代码

Cookie

题目描述:Cookie欺骗、认证、伪造

本题点开页面,提示“只有管理员才能访问”,然后F12看发送的请求,里面有一个Cookie选项,其中内容是admin=0。那我们发送一个Cookie内容为admin=1的包即可解开本题。

请求方式

题目描述:HTTP 请求方法, HTTP/1.1协议中共定义了八种方法(也叫动作)来以不同方式操作指定的资源。

HTTP/1.1八种请求方法

我们先了解一下是哪几种请求方法。

方法 是否幂等 是否有请求体 是否有响应体 主要用途
GET 获取资源
POST 提交数据
PUT 上传文件
DELETE 删除资源
HEAD 获取元信息
OPTIONS 查询支持方法
TRACE 回显请求
CONNECT 建立隧道

题目解析

打开题目,显示的内容是需要使用CTFH**B方法进行请求页面,但是这个不好在HackBar或者POSTMAN里改。不过有一种办法,那就是用CURL命令。

直接就找到Flag了!所以像这种自定义访问方法的,可以直接考虑用CURL工具。

CURL工具

curl 是一个利用 URL 语法在命令行下工作的文件传输工具,支持 HTTP、HTTPS、FTP 等几十种协议。在 CTF 中,我们主要用它来发送自定义的 HTTP 请求

参数 作用 示例
-X 指定请求方法 curl -X PUT http://target.com/
-H 添加请求头 curl -H "Referer: google.com" http://target.com/
-d 发送 POST 数据 curl -d "key=val" http://target.com/
-b 发送 Cookie curl -b "name=value" http://target.com/
-c 保存 Cookie curl -c cookies.txt http://target.com/
-I 只显示响应头 curl -I http://target.com/
-i 显示完整响应信息 curl -i http://target.com/
-v 显示详细信息 curl -v http://target.com/
-o 保存到文件 curl -o output.txt http://target.com/
-L 跟随重定向 curl -L http://target.com/
-k 允许不安全的 SSL curl -k https://target.com/

302跳转

302重定向

当你在浏览器访问一个网址,服务器返回302状态码时,意味着:

“你请求的资源暂时在别的地方,请去这个新地址访问”

浏览器收到302响应后,会自动跳转到服务器在Location头中指定的新URL。

1
2
3
4
5
6
7
8
9
10
11
客户端(浏览器)               服务器
| |
|---- 请求 /old-page -----> |
| |
|<--- 302 Found ------------|
| Location: /new-page |
| |
|---- 请求 /new-page -----> |
| |
|<--- 200 OK ---------------|
| 返回新页面内容 |

点击页面里的“Give me Flag”,还会跳转到当前页面,而不能访问到index.php。我们打开F12看看:

说明这个请求被重定向到了index.html,于是index.php中隐藏的内容无法被显示。

但是,CURL是可以禁止重定向的,如果用CURL,直接秒了!

为什么会这样呢?因为浏览器和curl工具对于302行为的处理不同。

工具 对 302 重定向的默认行为 结果
浏览器 自动跟随重定向 你被转到 index.html,看不到 index.php 的内容
curl 不自动跟随重定向 直接显示 index.php 的原始响应(包含 Flag)

我们可以更进一步,展示完整的响应信息:

也就是说,标准的302响应信息不包括这个响应体,而是直接去告知浏览器做跳转,因此大家也都看不到这些包的内容,且浏览器也不会保留,F12也看不到。但是curl的话,这件事就会现原形了,所以我们就能得到藏在响应体里的flag。

基本认证

什么是基本认证

基本认证是 HTTP 协议中最简单、最原生的一种身份验证机制。它通过在 HTTP 请求头中携带用户名和密码,来证明客户端的身份。

当你访问一个需要基本认证的网站时,浏览器会弹出一个登录框,这就是 Basic Authentication 的典型表现。

请求流程也很简单:

1
2
3
4
5
6
7
8
9
10
11
12
13
客户端(你)                 服务器
| |
|---- 请求 /admin --------> |
| |
|<--- 401 Unauthorized -----|
| WWW-Authenticate: Basic|
| |
|---- 请求 /admin --------> |
| Authorization: Basic |
| (加密后的用户名:密码) |
| |
|<--- 200 OK ---------------|
| 返回/admin内容 |
  • 用户名和密码:用冒号连接(username:password
  • 编码方式:Base64 编码(不是加密!
  • 传输位置:放在请求头的 Authorization 字段

然后放到请求头里,大概就是这样了:

1
2
3
GET /admin HTTP/1.1
Host: target.com
Authorization: Basic YWRtaW46MTIzNDU2

题目解析

首先点击链接,弹出登录页面,这就是基本认证:

同时,还有一个附件需要下载。里面列出了最常见的弱密码,看来是想让我们去做一个爆破。

那我直接按照admin进行尝试,终于,在尝试到qwerty的时候登录进来了,直接获取到了flag。

不过虽然这个题目很简单,但是我们还是值得看一看基础认证长什么样的。

这个是一个认证失败的请求:

可以看到,在请求头中有一个Authorization,这个就是我们基本认证的发送方式。

而响应中,也给了一些提示:Do u know admin?这提示了我们用户名需要是admin。realm一个指示要使用的用户名/密码的字符串。至少应该包括主机名,但是可能指示具有访问权限的用户或组。

然后按照密码本去爆破,终于得到了200 OK的包,验证通过了:

所以这就是基本认证的基础题目。

响应包源代码

打开题目是一个贪吃蛇小游戏。不管他,打开F12,答案直接出来了。

image-20260304下午20044179

这是最简单的一种题目,直接打开F12查看页面源代码,就有答案了!

总结

这部分的内容相对来说比较简单,具备Web的基础即可轻松搞定。通过这几道题对Web尤其是HTTP的基础知识进行复习,可以为以后打下不错的基础。当前我的学习路线就是在题目中同步点亮技能树,例如不会专门去一次性搞定所有工具,而是根据某个题目的需要,如果我认为需要某个工具来帮我做一件事,那么我就会学习使用这个工具。我想这是一个比较能够长期发展的方案。


文章作者: Jack Zhang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jack Zhang !
  目录