当前位置:   article > 正文

HTTPOXY 漏洞说明_http p'ro'x

http p'ro'x

这里有一个核心的背景是, 长久一来我们习惯了使用一个名为"http_proxy"的环境变量来设置我们的请求代理。

http_proxy=127.0.0.1:9999 wget http://www.laruence.com/
  • 1

如何形成

在CGI(RFC 3875)的模式的时候, 会把请求中的Header, 加上HTTP_ 前缀, 注册为环境变量, 所以如果你在Header中发送一个Proxy:xxxxxx, 那么PHP就会把他注册为HTTP_PROXY环境变量, 于是getenv(“HTTP_PROXY”)就变成可被控制的了. 那么如果你的所有类似的请求, 都会被代理到攻击者想要的地址,之后攻击者就可以伪造,监听,篡改你的请求了…
比如:

curl -H "Proxy:127.0.0.1:8000" http://host.com/httpoxy.php
  • 1

如何影响到你

  • 你的服务会对外请求资源
  • 你的服务使用了HTTP_PROXY(大写的)环境变量来代理你的请求(可能是你自己写,或是使用一些有缺陷的类库)
  • 你的服务跑在PHP的CGI模式下(cgi, php-fpm)

如果你没有满足上面的条件, 那么恭喜你,你不受此次漏洞影响。

如何解决

通过上面的原理的介绍,修复起来也很简单了, 以Nginx为例, 在配置中加入:

fastcgi_param HTTP_PROXY "";
  • 1

所以建议, 即使你不受此次漏洞影响, 也应该加入这个配置.
而如果你是一个类库的作者,或者你因为什么原因没有办法修改服务配置, 那么你就需要在代码中加入对sapi的判断, 除非是cli模式, 否则永远不要相信http_proxy环境变量

<?php
if (php_sapi_name() == 'cli' && getenv('HTTP_PROXY')) {
   //只有CLI模式下, HTTP_PROXY环境变量才是可控的
}
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/695824
推荐阅读
相关标签
  

闽ICP备14008679号