首页 > 运维 > CURL HTTP构造请求Header实现伪造来源IP的说明
2021
11-24

CURL HTTP构造请求Header实现伪造来源IP的说明

CURL HTTP构造请求Header实现伪造来源IP的说明

伪造的只是X-FORWARDED-FOR和CLIENT-IP,REMOTE_ADDR伪造不了。

$_SERVER['REMOTE_ADDR']是由nginx传递给php的参数,就代表了与当前nginx直接通信的客户端的 IP(是不能伪造的)


PHP获取客户端IP,代理服务器IP,共有如下几类情况:

一、没有使用代理服务器的情况:

REMOTE_ADDR = 您的 IP

HTTP_VIA = 没数值或不显示

HTTP_X_FORWARDED_FOR = 没数值或不显示


二、使用透明代理服务器的情况:【Transparent Proxies】

REMOTE_ADDR = 最后一个代理服务器 IP

HTTP_VIA = 代理服务器 IP

HTTP_X_FORWARDED_FOR = 您的真实 IP ,经过多个代理服务器时,这个值类似如下:211.98.182.163, 211.98.182.163, 211.129.72.215。

透明代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。


三、使用普通匿名代理服务器的情况:Anonymous Proxies

REMOTE_ADDR = 最后一个代理服务器 IP

HTTP_VIA = 代理服务器 IP

HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:111.98.182.163, 211.129.72.215。

普通匿名代理服务器隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。


四、使用欺骗性代理服务器的情况:Distorting Proxies

REMOTE_ADDR = 代理服务器 IP

HTTP_VIA = 代理服务器 IP

HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:111.98.12.163, 111.98.12.163, 111.19.72.25。

欺骗性代理服务器告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。


五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)

REMOTE_ADDR = 代理服务器 IP

HTTP_VIA = 没数值或不显示

HTTP_X_FORWARDED_FOR = 没数值或不显示。

完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。这就是高度匿名的好处。


php伪造实战

<?php
$ch = curl_init();
 
$url = "http://localhost/target_ip.php";
 
$header = array(
'CLIENT-IP:58.68.44.61',
'X-FORWARDED-FOR:58.68.44.61',
);
 
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
 
$page_content = curl_exec($ch);
 
curl_close($ch);
 
echo $page_content;
 
?>

目标文件 target_ip.php

<?php
echo getenv('HTTP_CLIENT_IP');
echo getenv('HTTP_X_FORWARDED_FOR');
echo getenv('REMOTE_ADDR');
?>

结果:
58.68.44.61
58.68.44.61
127.0.0.1
也就是说只有REMOTE_ADDR的值没有被伪造

Remote Address 也无法伪造,因为建立TCP连接需要三次握手,如果伪造了源IP,无法建立TCP连接,更不会有后面的 HTTP请求。


X-Forwarded-For HTTP扩展头部

X-Forwarded-For 是一个 HTTP扩展头部,HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由 Squid缓存代理软件引入,用来表示 HTTP请求端真实IP。最终成为事实上的标准被写入 RFC 7239(Forwarded HTTP Extension)标准之中。

X-Forwarded-For: client, proxy1, proxy2

从标准格式可以看出,X-Forwarded-For头部信息可以有多个,中间使用逗号分隔,第一项为真实的客户端IP剩下的就是经过的代理或负载均衡的IP地址,经过几个就会出现几个。


需要特别说明的是XFF是可以伪造的,例如使用curl 发送一个带有"X-Forwarded-For:8.8.8.8"的头部信息。

curl -IL -H "X-Forwarded-For:8.8.8.8" https://www.test.com/static/09.png


本文》有 0 条评论

留下一个回复