实验吧--貌似有点难

题目中包含了PHP代码审计,那这里需要观察代码内容。

代码中包含了两个部分,一个是得到IP地址的GetIP函数,一个是通过GetIP函数获得的IP验证是否为1.1.1.1的主函数部分。

那么这题的思路应该非常的清晰,我们需要想方法使得代码中的GetIP函数获得的IP地址为1.1.1.1,我们就能得到flag。

好,那么现在我们再来查看这个函数,在这个函数中我们可以这样去进行理解,首先查看是否存在 S E R V E R [ " H T T P C L I E N T I P " ] , 如 果 存 在 I P 就 是 它 , 否 则 接 下 来 看 _SERVER["HTTP_CLIENT_IP"],如果存在IP就是它,否则接下来看 SERVER["HTTPCLIENTIP"]IP_SERVER[“HTTP_X_FORWARDED_FOR”],最后看$_SERVER[“REMOTE_ADDR”],如果以上三个变量都不存在的话则返回0.0.0.0。

了解完整个过程之后我们来讲讲这三个变量的含义,首先是 S E R V E R [ " H T T P C L I E N T I P " ] , 这 个 变 量 表 示 的 是 代 理 服 务 器 发 送 的 H T T P 头 , _SERVER["HTTP_CLIENT_IP"],这个变量表示的是代理服务器发送的HTTP头, SERVER["HTTPCLIENTIP"]HTTP_SERVER[“REMOTE_ADDR”]代表的是你的客户端和服务器握手时候的IP。

那么分析这两个变量,首先是$_SERVER[“HTTP_CLIENT_IP”]变量,头是有这个信息的,但是并未达成标准,并不是所有的服务器都实现了的,曾经12年有个豆瓣的帖子激烈的讨论过这个东西的存在性:https://www.douban.com/group/topic/27482290/

有网友甚至实际操作一万次都没有找到过结果,那么我们这里也就暂时当做没有这个变量的信息。我们再看看$_SERVER[“REMOTE_ADDR”]这个变量,这个变量代表的是你的客户端和服务器握手时候的IP,什么意思呢?假如我们的客户端使用了代理服务器时,这个结果就不会是我们的客户端的IP,只有服务器直接暴露在我们的客户端前面的时候,得到的值才为客户端的IP。

介绍完这两个我们再来看看刚刚一直没有提到的$_SERVER[“HTTP_X_FORWARDED_FOR”]。先来看看百度的结果:

X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。它不是RFC中定义的标准请求头信息,在squid缓存代理服务器开发文档中可以找到该项的详细介绍。标准格式如下:X-Forwarded-For: client1, proxy1, proxy2。

这个变量在实际应用中的意义我们这里先不谈,先来理解一下这个过程:当我们用代理服务器的时候,X-Forwarded-For这个值记录的是我们客户端原本的IP地址,而非代理服务的IP,简言之就是用来识别经过HTTP代理后的客户端IP地址。X-Forwarded-For是可以进行伪造的,我们这里的思路就是去伪造X-Forwarded-For。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值