Web安全 — CVE-2014-0166分析

摘要

近年来,利用 Web 应用存在的安全隐患(即所谓的“漏洞”)展开攻击的案例层出不穷,受害者也与日俱增。虽说只要消除安全隐患就能够杜绝这些攻击,但这就需要 Web 应用开发人员掌握正确的安全性方面的知识。

引言

课题背景

近年来,利用 Web 应用存在的安全隐患(即所谓的“漏洞”)展开攻击的案例层出不穷,受害者也与日俱增。虽说只要消除安全隐患就能够杜绝这些攻击,但这就需要 Web 应用开发人员掌握正确的安全性方面的知识。

本课题的研究

本文分析的是 WordPress 3.8.2 更新的Cookie伪造漏洞(CVE-2014-0166),并给出对应的POC和EXP。

根据描述 WordPress before 3.7.2 and 3.8.x before 3.8.2 都是受影响的。

漏洞知识分析的准备

PHP弱类型安全问题

弱类型转化问题

弱类型的语言对变量的数据类型没有限制,你可以在任何地时候将变量赋值给任意的其他类型的变量,同时变量也可以转换成任意地其他类型的数据。

类型转换是无法避免的问题。例如需要将GET或者是POST的参数转换为int类型,或者是两个变量不匹配的时候,PHP会自动地进行变量转换。但是PHP是一个弱类型的语言,导致在进行类型转换的时候会存在很多意想不到的问题。

比较操作符类型转换

b 的比较中

$a=null;$b=flase ;     //true $a='';$b=null;        //true

这样的例子还有很多,这种比较都是相等。

使用比较操作符的时候也存在类型转换的问题,如下:

0=='0'                //true 0 == 'abcdefg'        //true 0 === 'abcdefg'        //false 1 == '1abcdef'        //true

当不同类型的变量进行比较的时候就会存在变量转换的问题,在转换之后就有可能会存在问题。

Hash比较

除了以上的这种方式之外在进行hash比较的时候也会存在问题。如下:

"0e132456789"=="0e7124511451155"     //true3 "0e123456abc"=="0e1dddada"            //false "0e1abc"=="0"                         //true

在进行比较运算时,如果遇到了 0e/d+ 这种字符串,就会将这种字符串解析为科学计数法。所以上面例子中2个数的值都是0因而就相等了。如果不满足0e/d+这种模式就不会相等。

Firefox下查看Cookie

打开Firefox 附加组件,搜索Firebug并安装

tutututut

按F12,可以在浏览器的底部找到如下视图,从视图中可以找到Cookie,可以在其中新建、删除、编辑相应的Cookie。

Web安全 — CVE-2014-0166分析 Web安全 — CVE-2014-0166分析

实验环境搭建

虚拟机安装

启动VirtualBox,新建一个虚拟机。

Web安全 — CVE-2014-0166分析

选择vmdk格式

Web安全 — CVE-2014-0166分析

然后一路下一步。

新建好后,载入CentOS ISO文件,启动虚拟机,进入安装界面。把CentOS安装好。

Web安全 — CVE-2014-0166分析

安装好后,进行更新以及安装一些需要软件。

更新: yum update –y
Web安全 — CVE-2014-0166分析

nginx 软件源码安装

http://nginx.org/en/download.html 下载 nginx-1.10.1.tar.gz

使用命令 wget http://nginx.org/download/nginx-1.10.1.tar.gz

使用 tar –zxvf nginx-1.10.1.tar.gz 解压缩

Web安全 — CVE-2014-0166分析

之后进入nginx-1.10.1目录

./configure (使用默认的配置,程序汇报安装到/usr/local)

Web安全 — CVE-2014-0166分析

Make && make install
Web安全 — CVE-2014-0166分析

支持php

Web安全 — CVE-2014-0166分析

启动nginx

Web安全 — CVE-2014-0166分析