[wooyun-2010-080723] 绕过全局变量防御导致代码执行
文章旨在记录个人收获以及知识分享,十分欢迎各位大佬纠正和补充
1.漏洞介绍
如果已经开启了 regeister_globals
配置,且在php5.3.x版本中 request_order
配置默认为GP
,导致Discuz!7.x/6.x版本可以绕过全局变量防御
regeister_globals
决定是否将EGPCS
(即 Environment,Get,Post,Cookie,Server
)变量注册为全局变量
request_order
该设置描述PHP解析变量顺序,解析顺序从左到右,后解析新值覆盖旧值
开启后,由于request_order
默认为GP
(即 Get
和 Post
并不包括 Cookie
),所以可以在Cookie中添加带有恶意代码的 GLOBALS变量
来覆盖 服务器上的GLOABALES变量
,从而造成代码执行漏洞
2.搭建环境
此处利用vulhub靶场(基于docker和docker-compose)
可去官网安装:https://vulhub.org
在 配有vulhub
的靶机使用 docker-compose up -d
拉起环境
通过浏览器访问,安装Discuz
进入主页,搭建成功
3.复现过程
任意打开一篇帖子
使用burp suite抓包
将数据包发送到repeater模块
先查看原始数据包返回的网页,正常
加入再Cookie中加入payload之后的数据包返回的网页
;GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo();
注意Cookie数据间使用;隔开
代码已被成功执行,漏洞复现成功
4.修复方案
1.不开启regeister_globals
(默认为off关闭),并且使用Get,Post,Cookie方式接受参数而非request
2.可以将request_order
配置为CPG,将Cookie包括进入
3.升级discuz的版本