在进行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 | 客户端(浏览器) 服务器 |
点击页面里的“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 | 客户端(你) 服务器 |
- 用户名和密码:用冒号连接(
username:password) - 编码方式:Base64 编码(不是加密!)
- 传输位置:放在请求头的
Authorization字段
然后放到请求头里,大概就是这样了:
1 | GET /admin |
题目解析
首先点击链接,弹出登录页面,这就是基本认证:

同时,还有一个附件需要下载。里面列出了最常见的弱密码,看来是想让我们去做一个爆破。
那我直接按照admin进行尝试,终于,在尝试到qwerty的时候登录进来了,直接获取到了flag。
不过虽然这个题目很简单,但是我们还是值得看一看基础认证长什么样的。
这个是一个认证失败的请求:

可以看到,在请求头中有一个Authorization,这个就是我们基本认证的发送方式。
而响应中,也给了一些提示:Do u know admin?这提示了我们用户名需要是admin。realm一个指示要使用的用户名/密码的字符串。至少应该包括主机名,但是可能指示具有访问权限的用户或组。
然后按照密码本去爆破,终于得到了200 OK的包,验证通过了:

所以这就是基本认证的基础题目。
响应包源代码
打开题目是一个贪吃蛇小游戏。不管他,打开F12,答案直接出来了。

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