前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >php获取客户端ip以及ip伪造

php获取客户端ip以及ip伪造

作者头像
天方
发布2022-09-14 11:25:49
5.3K0
发布2022-09-14 11:25:49
举报
文章被收录于专栏:tianfangtianfang

#php获取客户端ip以及伪造ip伪造

获取ip使用场景比较多,如投票、获取发言者的发言所在省份、对用户ip做登记等.本文主要介绍三个php超全局变量获取客户端ip的方法以及存在的问题.

声明:因为使用了cdn之后无法正常的获取客户端ip,则做此次记录,仅供学习交流,请不要用于非法用途,由此教程产生的法律问题均与本人无关!

##0x01

直接上代码

代码语言:txt
复制
<?php
代码语言:txt
复制
//获取客户端ip,但是如果使用了代理,则获取到的是代理之后的ip
代码语言:txt
复制
echo '1-'.getenv("REMOTE_ADDR").'</br>';
代码语言:txt
复制
//获取的是客户端访问时header头部带的ip,可任意伪造
代码语言:txt
复制
echo '2-'.getenv("HTTP_CLIENT_IP").'</br>';
代码语言:txt
复制
//客户端真实 IP ,但是如果没有使用代理就不返回真实ip
代码语言:txt
复制
echo '3-'.getenv("HTTP_X_FORWARDED_FOR").'</br>';

##0x02

1、如果客户端使用了透明代理,则getenv("REMOTE_ADDR")返回的是最后一个代理服务器 IP.getenv("HTTP_X_FORWARDED_FOR")返回的是客户端代理之前的ip地址,即客户端真实ip,又浏览器head头部发送.

2、若用户使用普通匿名代理服务器

则getenv("REMOTE_ADDR") = 最后一个代理服务器 IP

getenv("HTTP_X_FORWARDED_FOR")= 代理服务器 IP

3、用户使用欺骗性代理服务器,

getenv("REMOTE_ADDR") = 代理服务器 IP

getenv("HTTP_X_FORWARDED_FOR") = 随机IP

4、用户使用高匿名代理

getenv("REMOTE_ADDR") = 代理服务器 IP

getenv("HTTP_X_FORWARDED_FOR") 返回空或unkown

由于getenv("HTTP_X_FORWARDED_FOR")和getenv("HTTP_CLIENT_IP")获取的IP是由浏览器传过来的,所以可以不使用代理直接进行伪造.代码如下

代码语言:txt
复制
<?php
代码语言:txt
复制
//使用curl伪造head信息发送欺骗服务器。随机生成
代码语言:txt
复制
$ip = mt_rand(1,254).mt_rand(0,254).mt_rand(0,254).mt_rand(0,254);
代码语言:txt
复制
$header = array(
代码语言:txt
复制
'CLIENT-IP:'.$ip,
代码语言:txt
复制
'X-FORWARDED-FOR:'.$ip,
代码语言:txt
复制
);
代码语言:txt
复制
//伪造浏览器信息
代码语言:txt
复制
$info =array('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; InfoPath.2; AskTbPTV/5.17.0.25589; Alexa Toolbar)','Mozilla/5.0 (Windows NT 5.1; rv:22.0) Gecko/20100101 Firefox/22.0','Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET4.0C; Alexa Toolbar)','Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.1; SV1)');
代码语言:txt
复制
 $ch = curl_init();//创建一个curl句柄
代码语言:txt
复制
 curl_setopt ($ch, CURLOPT_URL, 'http://www.baidu.com/');//列如欺骗百度
代码语言:txt
复制
 curl_setopt ($ch, CURLOPT_HTTPHEADER, $header);//发送header信息
代码语言:txt
复制
 curl_setopt ($ch, CURLOPT_REFERER, "http://www.baidu.com/");//可任意伪造来源
代码语言:txt
复制
 curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
代码语言:txt
复制
 curl_setopt ($ch, CURLOPT_USERAGENT, "$info");//伪造浏览器信息
代码语言:txt
复制
 curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 3); 
代码语言:txt
复制
 $contents = curl_exec($ch); //执行句柄
代码语言:txt
复制
 curl_close($ch);//结束
代码语言:txt
复制
 var_dump($contents);//打印变量结构

只针对getenv("HTTP_X_FORWARDED_FOR")getenv("HTTP_CLIENT_IP")函数有效.getenv("REMOTE_ADDR")获取的是客户端ip,若使用代理则为代理ip。

##0x03

若网站使用了cdn,则getenv("REMOTE_ADDR")返回的是提供cdn商的ip地址。则使用cdn商提供的方法进行获取。

使用了cdn之后获取到的ip

undefined

##0x04

作用:例如 1、 以前的很多投票是通过ip来判断人数的,所以可以达到刷票,如果通过getenv("REMOTE_ADDR")获取ip地址,则可以http代理欺骗,关于http代理,百度一下就有很多提供的。

2、有的网站是通过getenv("HTTP_X_FORWARDED_FOR")获取ip进行记录用户ip地址并且在后台输出,则可通过将ip地址改为自己构建的js代码,通过xss攻击,可以获取到管理员的cookie,实现无密码登录后台,然后getshell 拿到服务器。当然不是说说这么简单,中间还有很多防火墙.

3、...还有很多场景我就不一一列出,就提供一个大概的思路和方法

undefined

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档