BUUCTF WEB 极客大挑战 2019 Http

题目:

        访问靶机:http://node4.buuoj.cn:27543/    

 解题:

1:查看网页源代码

        浏览页面,没有发现有用信息,查看源代码发现:Secret.php

2:尝试访问/Secret.php

        It doesn't come from 'https://www.Sycsecret.com',即提示要增加Referer值为'https://www.Sycsecret.com'。

HTTP Referer

        Http Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。

        Referer作用:

        (1)防盗链:比如某个网站的图片是保存在图片服务器或者云端,假如地址为:http://static.yun.com/img.jpg,我们可以在此图片服务器检查referer的值是否为http://example.com/,是就通过,不是就拒绝访问。这样子的话,只有从http://example.com/中链接过来的请求才可以访问此图片。

     (2)访问统计:比如www.hao123.com中有好多门户官网的链接;当我们点击“京东”的时候,京东的服务端就可以发现当前该用户请求是从www.hao123.com中链接过来的,就可以很方便的统计到用户来源。

        一般以下几种情况是不会发送Referer:1、用户手动输入网址或是从收藏夹/书签中访问。2、页面从Https跳转到Http。

3:增加Referer

        利用Burp Suite抓取http://node4.buuoj.cn:29928/Secret.php链接请求信息,并增加Referer:https://www.Sycsecret.com,点击Send。

        发现响应信息提示:Please use "Syclover" browser,即需要增加User-Agent。

HTTP User-Agent

        User-Agent会告诉网站服务器,访问者是通过什么工具来请求的,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

        通用格式:Mozilla/5.0 (平台) 引擎版本 浏览器版

        例       如:User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.36

        Mozilla/5.0:由于历史上的浏览器大战,当时想获得图文并茂的网页,就必须宣称自己是 Mozilla 浏览器。导致如今User-Agent里通常都带有Mozilla字样。

        平台:可由多个字符串组成,用分号分开。Windows NT 10.0是指我使用的操作系统的版本为win10,Win64; x64是指我的操作系统是64位的。

        引擎版本:AppleWebKit/537.36 (KHTML, like Gecko),浏览器使用的主流渲染引擎有:Gecko、WebKit、KHTML、Presto、Trident、Tasman等。

        浏览器版本:Chrome/60.0.3100.0 Safari/537.36,显示浏览器的真实版本信息,格式为:浏览器/版本信息。       

4:增加User-Agent

        增加:User-Agent:Syclover

        发现提示信息:“No!!! you can only read this locally!!!”,即需要增加X-Forwarded-For:127.0.0.1。

HTTP X-Forwarded-For

        X-Forwarded-For 是一个 HTTP 扩展头部,用来表示 HTTP 请求端真实 IP。与之相关的有X-Real-IP、 $remote_addr。

        X-Real-IP 是一个自定义头。X-Real-Ip 通常被 HTTP 代理用来表示与它产生 TCP 连接的设备 IP,这个设备可能是其他代理,也可能是真正的请求端。需要注意的是,X-Real-Ip 目前并不属于任何标准,代理和 Web 应用之间可以约定用任何自定义头来传递这个信息。

        $remote_addr 是nginx与客户端进行TCP连接过程中,获得的客户端真实地址。Remote Address 无法伪造,因为建立 TCP 连接需要三次握手,如果伪造了源 IP,无法建立 TCP 连接,更不会有后面的 HTTP 请求。

        格式:X-Forwarded-For: client, proxy1, proxy2  (client是离服务端最远的设备 IP,proxy1,proxy2是每一级代理设备的 IP。)

        例如:如果一个 HTTP 请求到达服务器之前,经过了三个代理 Proxy1、Proxy2、Proxy3,IP 分别为 IP1、IP2、IP3,用户真实 IP 为 IP0,那么按照 XFF 标准,服务端最终会收到以下信息:X-Forwarded-For: IP0, IP1, IP2。

        流程:(1)用户IP0---> 代理Proxy1(IP1),Proxy1记录用户IP0,并将请求转发个Proxy2时,带上一个Http Header,X-Forwarded-For:IP0

                  (2)Proxy2收到请求后读取到请求有 X-Forwarded-For:IP0,然后proxy2 继续把链接上来的proxy1 ip追加到 X-Forwarded-For 上面,构造出X-Forwarded-For:IP0, IP1,继续转发请求给Proxy 3。

                  (3)同理,Proxy3 按照第二部构造出 X-Forwarded-For:IP0, IP1, IP2,转发给真正的服务器,比如NGINX,nginx收到了http请求,里面就是 X-Forwarded-For: IP0, IP1, IP2 。所以Proxy 3 的IP3,不会出现在这里。

                 (4)nginx 获取proxy3的IP 能通过remote_address就是真正建立TCP链接的IP,这个不能伪造,是直接产生链接的IP。$remote_address 无法伪造,因为建立 TCP 连接需要三次握手,如果伪造了源 IP,无法建立 TCP 连接,更不会有后面的 HTTP 请求。

5:增加X-Forwarded-For

        增加:X-Forwarded-For:127.0.0.1

        得到flag。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值