Discuz 6.x 7.x 全局过滤机制绕过漏洞
更新时间:
许可信息: 本文采用 自由转载-非商用-非衍生-保持署名 许可协议,作者alpha1e0,转载请注明作者或出处链接。
本文分析Discuz 6.x 7.x 全局过滤机制绕过漏洞
1 discuz 6.x 7.x 的全局过滤机制
@include/common.inc.php #L29
@include/common.inc.php #L40:
2 绕过全局过滤机制方法1
可以看到如果直接使用$_GET/$_POST/$_COOKIE
作为参数,则绕过了全局过滤daddslashes
3 绕过全局过滤机制方法2
当register_global=On
且request_order = "GP"
,在cookie中提交参数则可以绕过了GLOBALS限制,且绕过了全局过滤
例如:
Cookie: GLOBALS[key]=aaa'
则,在register_globals的作用下,会立刻执行$GLOBALS[‘key’]=aaa’,从而生成了参数$key=aaa’
而在之后的伪全局中会执行$GLOBALS=array(‘key’=>’aaa'’),这种情况下是不会创建变量$key的,因为
- $GLOBALS=xxx,不会解压参数
- $GLOBALS[‘key’]=xxx,会解压参数
因此,最后生成了$key=aaa'
和$GLOBALS['key']=aaa\'