一、题面
提示只能本地访问。
二、分析
抓包:
提示:只能本地访问,可能是对请求来源进行了限制。
尝试用referer字段/x-forward-for字段。
- 添加Referer字段
Referer: http://localhost
Referer: http://127.0.0.1
没用。
- 添加X-Forwarded-For
X-Forwarded-For: 127.0.0.1
没用。
三、X-Real-IP
X-Real-IP
是一个 HTTP 请求头字段,它用于在通过代理或负载均衡器转发请求时,保留原始请求的客户端 IP 地址信息。这个字段通常只在反向代理服务器中使用,用于表示原始请求的客户端 IP 地址。当请求经过反向代理服务器时,该服务器会将客户端的 IP 地址设置到 X-Real-IP
字段中,这样后端服务器可以通过读取 X-Real-IP
字段来获取原始请求的客户端 IP 地址。
X-Real-IP
VS X-Forwarded-For
:
X-Real-IP
与 X-Forwarded-For
不同,X-Forwarded-For
是一个标准的 HTTP 请求头字段,用于记录代理链中的每个代理服务器的 IP 地址,而 X-Real-IP
通常只包含一个 IP 地址,这个地址应该反映了发起请求的客户端的真实 IP。X-Real-IP
并不是标准的 HTTP 请求头字段,而是由某些特定的反向代理服务器(如 Nginx)引入的,因此,它的通用性和兼容性可能不如 X-Forwarded-For
。
需要注意的是,由于 X-Real-IP
可以被伪造,因此在验证其真实性时,也需注意可能存在的 IP 伪造问题。在实际应用中,开发者需要了解如何正确配置和使用这些头部字段,并注意隐私问题,在使用客户端 IP 信息时要遵守隐私法规,不要在未经授权的情况下收集或存储敏感信息。
四、解题
添加x-real-ip
:
x-real-ip: 127.0.0.1
注意:经过实际测试,可以忽略大小写:X-Real-IP也可以。
可以看到返回一个登录页面,包含一个form表单。
点击登录按钮,抓取POST数据包:
直接提交仍然会提示:只能本地访问。
添加X-Real-IP:127.0.0.1之后提交POST数据:
成功获得flag。
- 测试POST数据包的最简形式:
经过测试,如果想要手动构造POST数据包的话,最简形式如下:
POST / HTTP/1.1
Host: node5.buuoj.cn:26861
Content-Type: application/x-www-form-urlencoded
X-Real-IP: 127.0.0.1
username=admin&password=wwoj2wio2jw93ey43eiuwdjnewkndjlwe
除了Host字段、解题必须的X-Real-IP字段外,保留Content-Type字段即可。
flag:
flag{c5766d2f-15bc-4ad2-b99f-4b4a2638717b}
总结
本题目主要考察使用BP等代理工具修改请求包的方法,核心考点:
1)修改/添加
X-Real-IP=127.0.0.1
,绕过本地访问限制。2)yakit/BP修改数据包。