1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > [Web/IP]真实IP获取原理/客户端IP伪造测试

[Web/IP]真实IP获取原理/客户端IP伪造测试

时间:2021-11-18 03:01:49

相关推荐

[Web/IP]真实IP获取原理/客户端IP伪造测试

真实IP获取和客户端IP伪造

近期比赛又做到了用户IP伪造的题目,想来不如就总结一下。

为什么要确认IP?

在Web应用下,部分逻辑需要确认用户的客户端IP。如对大量频繁发送危险请求的IP进行封禁。

进行用户IP确认的方法有很多,但是部分方法降低了IP获取的难度,确牺牲了安全性,产生了IP可伪造的风险。

服务器是如何确定IP的?

REMOTE_ADDR

标识发出请求的主机IP地址,代表客户端IP。这个标识完全由服务器决定,除了路由之外无法伪造,通过TCP协议根据直接请求来源的远程主机确定,服务端根据请求TCP包的IP指定的,简单说就是,客户端和服务器握手时的IP。

代理服务器

上面介绍了REMOTE_ADDR,当客户端访问Web服务器时,请求经过了代理服务器,上述方法将无法获得最终客户端IP。

当客户端使用匿名代理(anonymous)时,本地发送的请求经由代理IP转发后到达目标服务器,因此,目标服务器会将直接和它交互的那个代理IP的REMOTE_ADDR当作客户端的IP,然而事实并非如此,但仍具有参考意义。

XFF头

自定专用消息头可通过’X-’ 前缀来添加,非规范类,标准头部实际为Forwarded。

在未被篡改、不考虑安全性的条件下,这个标识代表的是客户端的真实IP。如果一个请求经过了多个代理服务器,那么每一个代理服务器的IP地址都会被依次记录在内。

来源: 代理服务器。请求经过带有HTTP代理和负载均衡功能的服务器时,为了防止Web服务器无法获取客户端真实IP,代理服务器会添加XFF头来保存请求的最终来源。

Client-Ip

和XFF一样,同样是代理服务器发送的HTTP头,如果使用“超级匿名代理”,返回值为none

Host

指明了请求将要发送到的服务器主机名和端口号,非可控的参数,安全。

Referer

引导用户代理到当前页的前一页的地址,,可修改不可信。

PHP$_SERVER

PHP 服务器和执行环境信息

哪些可能会有伪造

Client-Ip: 127.0.0.1X-Forwarded-For: 127.0.0.1Referer:

测试

<?php$content = $_GET['txt'];........file_put_contents($dir_path."/request.txt",print_r($_SERVER,true));

通过向服务器上的此脚本发送使用Burp添加了下列内容的请求,

打开保存到文件的请求$_SERVER记录,可以看到

三项均被修改,而REMOTE_ADDR为握手客户端IP,此三项确实可以伪造。

另外,

注意到$_SERVER[‘SERVER_ADDR’]为一个局域网IP,开始感到很奇怪,查到以下内容

$_SERVER[‘SERVER_ADDR’] 是当前运行脚本所在的服务器的 IP 地址。继续查询,某位不知名大佬回答,“谁是调用 php 的服务器,就是谁”,带着疑问在服务器上ifcongfig,对比网卡etho0的IP值发现两者果然一致。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。