惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
S
Securelist
MyScale Blog
MyScale Blog
Jina AI
Jina AI
罗磊的独立博客
The Cloudflare Blog
美团技术团队
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
雷峰网
雷峰网
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
大猫的无限游戏
大猫的无限游戏
博客园 - Franky
博客园 - 聂微东
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
T
Tailwind CSS Blog
Attack and Defense Labs
Attack and Defense Labs
博客园_首页
Latest news
Latest news
Apple Machine Learning Research
Apple Machine Learning Research
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Hacker News
The Hacker News
G
GRAHAM CLULEY
Simon Willison's Weblog
Simon Willison's Weblog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
U
Unit 42
D
Docker
Webroot Blog
Webroot Blog
N
Netflix TechBlog - Medium
T
Tor Project blog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LINUX DO - 最新话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The Last Watchdog
The Last Watchdog
B
Blog
Recent Announcements
Recent Announcements
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
Security Latest
Security Latest
V2EX - 技术
V2EX - 技术
N
News | PayPal Newsroom
Microsoft Security Blog
Microsoft Security Blog

龙辉's Blog - 学习笔记

天方云签程序开源 - 龙辉's Blog CTFSHOW-菜狗杯(部分WP) - 龙辉's Blog 贵州师范大学抢课脚本-正方教务系统V8.0.0 - 龙辉's Blog 简单实现每日健康自动打卡 - 龙辉's Blog 弱类型与强类型语言“=”号的不同以及引发的安全问题 - 龙辉's Blog XSS经典漏洞复现-手撕某非法获取个人信息网站 - 龙辉's Blog php7.2中each()函数被弃用的替换办法 - 龙辉's Blog 云签网站问题反馈贴 - 龙辉's Blog 高三第一次考试总结 - 龙辉's Blog
php获取客户端ip以及ip伪造 - 龙辉's Blog
博主: Tinker-站长 · 2022-08-03 · via 龙辉's Blog - 学习笔记

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

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

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

0x01

直接上代码

<?php
//获取客户端ip,但是如果使用了代理,则获取到的是代理之后的ip
echo '1-'.getenv("REMOTE_ADDR").'</br>';
//获取的是客户端访问时header头部带的ip,可任意伪造
echo '2-'.getenv("HTTP_CLIENT_IP").'</br>';
//客户端真实 IP ,但是如果没有使用代理就不返回真实ip
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是由浏览器传过来的,所以可以不使用代理直接进行伪造.代码如下

<?php
//使用curl伪造head信息发送欺骗服务器。随机生成
$ip = mt_rand(1,254).mt_rand(0,254).mt_rand(0,254).mt_rand(0,254);
$header = array(
'CLIENT-IP:'.$ip,
'X-FORWARDED-FOR:'.$ip,
);
//伪造浏览器信息
$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)');


 $ch = curl_init();//创建一个curl句柄
 curl_setopt ($ch, CURLOPT_URL, 'http://www.baidu.com/');//列如欺骗百度
 curl_setopt ($ch, CURLOPT_HTTPHEADER, $header);//发送header信息
 curl_setopt ($ch, CURLOPT_REFERER, "http://www.baidu.com/");//可任意伪造来源
 curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt ($ch, CURLOPT_USERAGENT, "$info");//伪造浏览器信息
 curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 3); 
 $contents = curl_exec($ch); //执行句柄
 curl_close($ch);//结束
 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
cdn

0x04

作用:例如 1、 以前的很多投票是通过ip来判断人数的,所以可以达到刷票,如果通过getenv("REMOTE_ADDR")获取ip地址,则可以http代理欺骗,关于http代理,百度一下就有很多提供的。
2、有的网站是通过getenv("HTTP_X_FORWARDED_FOR")获取ip进行记录用户ip地址并且在后台输出,则可通过将ip地址改为自己构建的js代码,通过xss攻击,可以获取到管理员的cookie,实现无密码登录后台,然后getshell 拿到服务器。当然不是说说这么简单,中间还有很多防火墙.
3、...还有很多场景我就不一一列出,就提供一个大概的思路和方法


版权属于:龙辉博客

本文链接:https://blog.eirds.cn/391.html

如果没有特别声明则为本博原创。转载时须注明出处及本声明!

赞赏作者

如果觉得我的文章对你有用,请随意赞赏