BUGKU-Do you know HTTP
本文介绍了HTTP协议相关知识点,包括常见请求方法(GET/POST)、状态码(200/302/404等)和头部信息的作用。重点分析了User-Agent(UA)头伪造漏洞,演示了如何通过修改UA头绕过浏览器检测。文章还对比了GET和POST请求的区别,并通过一道CTF题目实例,展示了如何通过修改请求方法(改为HS)、添加X-Forwarded-For头、设置Referer和伪造UA头来获取fla
一、知识点
此题考察了HTTP的知识点。
1.1 HTTP常见的请求方法
- GET:通常用于直接获取服务器上的资源;
- POST:一般用于向服务器发送数据,常用于更新资源信息。
1.2 HTTP请求状态码
- 200:请求成功;
- 302:临时跳转,会跳转到Location头所指向的地址;
- 304:访问缓存;
- 404:所请求资源不存在;
- 405:方法不被允许;
- 500:服务器内部错误。
1.3 UA头伪造漏洞的概念及利用方法
UA头,全称User-Agent。每个HTTP请求中都会携带UA头。这个头会包含我们所使用的操作系统版本、CPU、浏览器类型等;利用BP抓包。
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36
对其进行说明:
- Windows NT 10.0;Win64;X64:表示Win10 64位操作系统。
- Chrome/139.0.0.0:谷歌浏览器版本号
在Web开发中,一般会根据UA头来判断客户端使用什么设备或者什么浏览器访问来进行页面适配,或者说禁止某些浏览器访问。
1.4 返回头分析方法
GET HTTP/1.1 200 OK
Host: www.baidu.com
Cookie: BAIDUID_BFESS=D2865BCB81FE5F26218794ED0568EC52:FG=1; BIDUPSID=D2865BCB81FE5F26218794ED0568EC52; PSTM=1757660226; ZFY=:B9iz2jk568VV3YiqJfaF5b47DJfAVL4art:Bshg74tMk:C; H_WISE_SIDS=63325_63948_64450_64649_64746_64701_64814_64817_64850_64872_64876_64833_64901_64914_64934_64968_64974_65007_65018_65075_65085_65127_65141_65139_65137_65187_65204_65219_65248_65144_65258; baikeVisitId=dea83034-96de-4e32-8543-1cad289fc0d1; H_PS_PSSID=63325_64746_64814_64817_64872_64833_64901_64914_64968_64974_65007_65018_65127_65139_65187_65204_65219_65248_65258_65269_65368_65374_65177_65416_65465_65457; BD_HOME=1; BD_UPN=12314753
Sec-Ch-Ua-Platform: "Windows"
Ps-Dataurlconfigqid: 0xe692b1fa00274a15
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36
Accept: application/json, text/javascript, */*; q=0.01
Sec-Ch-Ua: "Not;A=Brand";v="99", "Google Chrome";v="139", "Chromium";v="139"
Sec-Ch-Ua-Mobile: ?0
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://www.baidu.com/
从这个百度抓的包可以看见几个比较重要的信息:
- HTTP状态码:具体可参考1.2
- Cookie值:可以修改cookie的值,或许会有越权之类的漏洞
- Referer:Referer头会告诉服务器用户是从哪个页面来,
这些在爬虫中也可以进行一些反爬的操作,但与本文无关,不过多解释。
1.5 POST与GET的区别
1.5.1 对于GET
GET /name.php?name=benben HTTP/1.1
HOST:172.250.250.4
要注意的是HTTP/1.1 不代表这是HTTP协议
要注意的是请求头后面要有一个请求换行,后面紧跟请求体(请求体可以为空)
1.5.2 对于POST
POST /pages/search.isp
Host:127.0.0.1
Content-Type:application/x-www-form-urlencoded
Coontent-length:6
wk=SQL
要注意的是Content-Type的类型为MIME类型(可以参考此网站:https://www.runoob.com/http/mime-types.html),同时Content-length的长度与请求体的内容长度相同。
二、题目
打开题目我们发现,题目提示用HS请求试试,所以此时我们可以通过抓包,进行更改包,即更改图中位置(这里最好发送到重放器)
将请求方式改为HS后,发送,提示用本地地址才可以,此时需要添加X-Forwarded-For板块(这类可以参考文章:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Reference/Headers/X-Forwarded-For)
得到提示是从www.ltyyds.com得来的,所以此时,需要用到Referer
得到新的提示,只有LT为官方的浏览器,此时,只需要将User-Agent进行更改即可
于是乎成功得到了flag
更多推荐
所有评论(0)