HTTPoxy漏洞(CVE-2016-5385)复现记录
时间:2019-08-19
本文章向大家介绍HTTPoxy漏洞(CVE-2016-5385)复现记录,主要包括HTTPoxy漏洞(CVE-2016-5385)复现记录使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
漏洞介绍:
- httpoxy是cgi中的一个环境变量;而服务器和CGI程序之间通信,一般是通过进程的环境变量和管道。
- CGI介绍
- CGI 目前由 NCSA 维护,NCSA 定义 CGI 如下:CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP 服务器,提供同客户端 HTML 页面的接口。
- CGI 程序可以是 Python 脚本,PERL 脚本,SHELL 脚本,C 或者 C++ 程序等。
- CGI是比较原始的开发动态网站的方式。
- 工作原理:
- 客户浏览器访问url,向web服务器发出请求;
- 服务器接收到后解析request包,并将数据包中的各个参数写进进程的环境变量,服务器调用CGI程序处理请求;
- CGI程序生成动态内容,交给服务器,服务区返回response包给浏览器。
查阅资料:https://www.zhihu.com/question/19998865 ;https://www.runoob.com/python/python-cgi.html ; https://httpoxy.org/
漏洞产生的原理:
- 有了以上的铺垫,可以大概猜想,如果cgi处理解析后的环境变量时,没有进行安全检查,可能会被黑阔恶意利用。而httpoxy,恰是本次漏洞的切入点。
- 在CGI(RFC 3875)的模式的时候, 会把http头部, 加上HTTP_ 前缀, 注册为环境变量。 如果在Header中发送一个Proxy:xxxxxx, 那么PHP就会把他注册为HTTP_PROXY环境变量,篡改着就可以在该代理服务器上监听这些请求。
影响版本:
PHP5.6.24版本修复了该漏洞,不会再将Proxy
放入环境变量中。本环境使用PHP 5.6.23为例。但该漏洞不止影响PHP,所有以CGI或FastCGI的运行的程序理论上都受到影响。
漏洞复现:
这里涉及一个简单设置代理服务器,请跳转至该blog:
- 正常访问页面时,返回包如下,origin是本局域网的公网ip。
- 加入proxy:http://192.168.183.129:8888字段后,可以看到origin字段变化,返回的信息是公网的ip+目标服务器的ip,这个似乎和官方复现的结果不一样,按照预期,应该返回代理服务器的ip。
- 这里找了一些帖子,好像也没有达到官方的复现效果,在线等一个大佬回答QAQ,在查看squid服务日志时,却可以看到代理成功了,
可以看到是服务器ip去请求http://httpbin.org/get,且数据的格式是json。
- 思考:为什么返回了多个ip?它们分别代表什么?这和局域网有关吗?具体是怎么影响的?如果各位有闲情逸致且有私人的服务器,可以复现一下此漏洞,指点下本菜鸟~多谢哈哈哈
原文地址:https://www.cnblogs.com/foe0/p/11364567.html
- Oracle 12c里的几点补充(一)(r11笔记第7天)
- Oracle备库的PDB无法连接的问题(r11笔记第6天)
- Golang语言社区--模板的使用
- Golang语言写Web 应用程序
- 强制wordpress后台HTTPS
- Golang语言 Cookie的使用
- Golang 语言调用动态库实现OpenGL及windows的API编程
- MySQL中的Online DDL(第一篇)(r11笔记第3天)
- 转--quick-cocos做客户端,golang做服务端,实现HTTP通信
- Nginx配置SSL证书
- Golang语言RPC Authorization进行简单ip安全验证的方法
- 深入理解Oracle中的DBCA
- Golang语言goto语句
- 转--Golang语言语法汇总
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法