如何在Burp Suite请求中添加两个Referer头完成CTF挑战?
强制Burp发送独立的多同名头:
Burp Suite默认可能会自动合并同名HTTP头(比如把两个Referer合并成一个逗号分隔的头)。解决方法是切换到Repeater的Raw标签,手动输入两个独立的Referer行,确保每行末尾用标准的CRLF(\r\n)分隔。同时检查Burp的设置:在Settings -> HTTP -> Message Editing中,关闭“Merge duplicate headers”选项,避免Burp自动合并你的头。尝试单头多值格式:
有些服务器的验证逻辑可能没有严格遵循RFC的多同名头规则,而是期望把两个值放在同一个Referer头里,用逗号分隔。可以试试构造:Referer: https://internal/admin.letmepass.com, THE_HUNTERS_ARE_AWAKE_SO_PLEASE_HELP_ME说不定服务器的检查逻辑只是验证头中包含这两个字符串,不管是不是多头发送。
验证换行符的正确性:
确保两个Referer头之间的换行是标准的HTTP换行(\r\n),有些服务器对仅用\n的LF换行不兼容,会导致第二个头被解析错误。在Burp的Raw模式下,直接按Enter输入换行即可,Burp默认会生成正确的CRLF。用自定义脚本/扩展绕过Burp的合并逻辑:
如果上述方法都无效,可以写一个简单的Burp扩展(比如用Python的Burp Extender API),在请求发送前手动插入两个Referer头。核心逻辑是在请求的头列表中添加两个独立的Referer条目,绕过Burp的自动合并机制。排除其他头的干扰:
暂时移除请求中无关的HTTP头(比如Referrer-Policy、非必要的自定义头),只保留目标要求的两个Referer和基础请求头,避免其他头影响服务器对多Referer的解析。
内容的提问来源于stack exchange,提问作者Hassan AL-Zubeiry

