游客发表

攻防世界xff referer

发帖时间:2026-10-17 04:55:52

打开攻防世界XFF Referer这道题,攻防页面就一行字:只允许本地用户访问。世界没别的攻防提示。很多人第一反应是世界改X-Forwarded-For头,这思路对,攻防但细节容易翻车。世界

我最初用Burp抓包,攻防把X-Forwarded-For: 127.0.0.1塞进去,世界重放,攻防页面纹丝不动。世界换X-Forwarded-For: localhost,攻防还是世界原样。当时就有点懵——这题到底在考什么?攻防后来翻HTTP头规范才意识到,后端判断“本地用户”可能不只看XFF,世界Referer头有时候才是攻防真正的钥匙。

这道题的设计逻辑其实挺直白。服务器端代码大概长这样:先检查$_SERVER['HTTP_X_FORWARDED_FOR']是否等于127.0.0.1,再检查$_SERVER['HTTP_REFERER']是否包含localhost或者127.0.0.1。两个条件同时满足才给flag。只改一个,另一个不匹配,门都进不去。

我试了组合拳:XFF设成127.0.0.1,Referer设成http://localhost/。发包,flag直接弹出来。就这么简单,但第一次做的时候卡了快二十分钟。

这里有个坑值得说。Referer头在浏览器里通常自动带当前页面地址,手动改的时候容易写成http://127.0.0.1/,有些后端用strpos匹配字符串,127.0.0.1和localhost是两码事。题目环境里到底认哪个,得试。我两个都试过,最后localhost生效。

XFF头也一样。有些服务器只认127.0.0.1,你写localhost它不认。反过来也有。这道题两个头配合使用,等于把两个常见绕过点绑在一起考。单独会一个不够,得同时想到。

从防御角度看,这种验证方式漏洞很明显。XFF和Referer都是客户端可控的请求头,攻击者想填什么填什么。真实业务里如果只靠这两个头判断“本地访问”,等于没判断。正确做法应该结合IP白名单、token验证或者服务端session。不过CTF题嘛,考的就是这个绕过思路。

我后来复盘,发现很多人卡住是因为只盯着XFF。看到“本地用户”四个字,条件反射就是XFF,忘了Referer也能伪造。两个头一起改,题目就过了。这种组合型考点在攻防世界挺常见,单点知识不够用,得串起来想。

操作上再补一句。Burp Repeater里改头的时候,注意别把原来的Referer行删了又加,直接改值就行。有时候手滑多打个空格,后端匹配失败,你还以为是思路错了。我习惯先清空再填,避免残留字符。

flag拿到之后,页面会显示一串字符。这道题难度不高,适合刚接触HTTP头绕过的练手。但别小看它,XFF和Referer的配合在真实渗透里也常用,比如绕过CDN取真实IP、伪造内网访问来源。练熟了,后面遇到类似场景反应会快很多。

最后说个观察。攻防世界这类题,页面越简洁,提示越少,往往考点越集中。这道题就一行字,反而逼着你去翻请求头。要是页面写一堆提示,可能还分散注意力。所以看到极简页面,先抓包看头,别急着在URL和参数上浪费时间。

    热门排行

    友情链接