HTTPoxy原理及CGI环境变量转换疑问:自定义Proxy头是否转为HTTP_PROXY?
关于HTTPoxy漏洞中自定义Proxy请求头的疑问解答
嘿,我刚好对HTTPoxy漏洞这块挺熟悉的,来给你捋清楚这个问题!
首先得说,你对CGI程序处理HTTP请求头的理解完全正确——CGI规范里确实会把请求头转换成带HTTP_前缀的环境变量,比如请求头里的PATH,就会被转成HTTP_PATH环境变量,这个逻辑没毛病。
至于你问的核心问题:**非标准请求头Proxy会不会被转换为HTTP_PROXY环境变量?**答案是肯定的,这正是HTTPoxy漏洞的核心触发点!
CGI的转换规则其实很直白:
- 不管是标准还是非标准的合法请求头名称(由字母、数字、连字符组成),都会先转成大写
- 把请求头里的连字符替换成下划线
- 最后加上
HTTP_前缀作为环境变量名
所以当请求里带Proxy: 攻击者指定地址这个请求头时,CGI程序会直接把它转换成HTTP_PROXY环境变量,并且把请求头的值赋值给这个变量。
而问题就出在很多编程语言的HTTP客户端库上——比如Python早期的urllib、部分PHP的HTTP工具,会默认读取系统的HTTP_PROXY环境变量作为请求代理。如果你的后端CGI代码刚好在用这类库发起请求,就会乖乖把请求转发到攻击者指定的代理地址,导致请求被劫持、数据泄露,这就是HTTPoxy漏洞的完整触发链。
内容的提问来源于stack exchange,提问作者KESHAV K
相关产品推荐
相关产品推荐

