最近看到各种论坛群里满天飞红包段子链接,比如这种:
- 穿山甲到底说了什么,打开“xxx”查看
- 支付宝被爆巨大漏洞,打开“xxx”查看~
- 腾讯会员1毛钱一个月,速速打开“xxx”领取~
点击链接,自动给你跳转到支付宝红包界面,好吧,又被人撸羊毛了~
作为一个安全学习者,怎么能不追求热点去学习一波这种神奇的操作是如何进行的呢~
特地去知乎搜了一波,果然有各路大佬在分享源码,特地弄了一个进行源码审计,学习学习~
<!DOCTYPE html>
<html lang="zh-cmn-hans">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge, chrome=1">
<title>正在打开支付宝,请稍候……</title>
</head>
<body>
<script>
var a = "https://qr.alipay.com/c1x09359aaxzejcv5cnzdc4";//替换你的红包链接
var b = "https://qr.alipay.com/c1x09359aaxzejcv5cnzdc4";//替换你的红包链接
function is_weixin() {
if (/MicroMessenger/i.test(navigator.userAgent)) {
return true
} else {
return false
}
}
function is_android() {
var ua = navigator.userAgent.toLowerCase();
if (ua.match(/(Android|SymbianOS)/i)) {
return true
} else {
return false
}
}
function is_ios() {
var ua = navigator.userAgent.toLowerCase();
if (/iphone|ipad|ipod/.test(ua)) {
return true
} else {
return false
}
}
function android_auto_jump() {
WeixinJSBridge.invoke("jumpToInstallUrl", {},function(e) {});
window.close();
WeixinJSBridge.call("closeWindow")
}
function ios_auto_jump() {
if (a != "") {
location.href = a
} else {
window.close();
WeixinJSBridge.call("closeWindow")
}
}
function onAutoinit() {
if (is_android()) {
android_auto_jump();
return false
}
if (is_ios()) {
ios_auto_jump();
return false
}
}
/*
1、来了解一下Navigator 对象,Navigator 对象包含有关浏览器的信息,
下面的userAgent 属性是一个只读的字符串,声明了浏览器用于 HTTP 请求的用户代理头的值。
所以我们可以通过判断navigator.useragent里面是否有某些值来判断。
简单来说,可以理解成http请求头读到的uesr-agent
2、举个例子
window.location.href = /Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent) ? "https://www.baidu.com/" : "http://news.baidu.com/";
利用了正则表达式和三目运算符,含义就是如果是移动端打开的话那就跳转到 "https:www.baidu.com/" ,如果不是就跳转到"http://new.baidu.com/",
实际上就是利用正则去判断 navigator.useragent 是否含有 Android/webOs/iphone 等字符串,并且利用修饰符 "i" 做了不区分大小写,然后用正则的方法 test 去判断是否满足
*/
if (is_weixin()){
if (typeof WeixinJSBridge == "undefined") {//判断WeixinJSBridge的类型
if (document.addEventListener) {//firefox等
document.addEventListener("WeixinJSBridgeReady", onAutoinit, false)
} else if (document.attachEvent) {//ie等
document.attachEvent("WeixinJSBridgeReady", onAutoinit);
document.attachEvent("onWeixinJSBridgeReady", onAutoinit)//WeixinJSBridgeReady查到是微信的一个官方接口,通过此唤醒浏览器
}//添加事件,考虑到浏览器兼容问题
} else {
onAutoinit()//主要逻辑,先判断是否微信,在判断ios或者安卓
}
} else {//如果不是,直接唤醒浏览器进行二次跳转
if (b != "") {
location.href = b
} else {
window.close()
}
}
</script>
</body>
</html>
这是一个比较火的源码,上面的注释是我的一些分析,其实思路真的是比较简单,分几步给大家介绍一下吧
- 从支付宝红包界面选择发红包->立即赚赏金->二维码,拿到一个这样的二维码!
2. 拿到二维码,使用各种免费的网站进行解析,分析出其中的文字链接,比如我的:
3. 将上述源码中开头的变量a,b进行替换,然后将网页丢入你自己的云服务器即可。为了增强别人的信任,还可利用新浪的短链接生成一个别人看不出来路短链接域名,配合上各种吸人眼球的段子就可以大量传播发红包了~
4. 代码思路分析:
- 其实就是利用了链接跳转
- 如果是知乎等app未设置拒绝浏览器唤醒,相当于进行了跳转到浏览器,再跳转到支付宝
- 如果是微信,会进一步针对安卓或者ios进行接口调用,唤醒浏览器进行二次跳转
- 归根结底,就是利用了浏览器做二次跳转~
- 截止到这篇博客发布前,实测:
- 微信已经无法利用此代码进行浏览器的唤醒操作。
- qq测试的结果是只能打开自带的内置qq浏览器然后不能唤醒支付宝~
- 其他如uc浏览器直接测试,或者知乎等都还是可以的;
- 总结下:其实如果针对这些不需要进行调用接口进行唤醒浏览器的app来说,直接可以将你得到的那个支付宝链接通过新浪短连接生成一个隐蔽的短连接去让别人点击即可~
你以为到这里就结束了?错了,作为一个安全学习者,怎么能不从安全的角度进行分析呢!
从安全角度分析,虽然这是一场流量大V的发红包狂欢,但不得不防有犯罪分子乘机构造各种恶意链接混在其中去获取的个人信息!
可能你点击的前一万个链接都是跳转支付宝的链接,你慢慢的就放松了警惕,忘记了爸爸妈妈所说的,新闻中报到的各种不明的链接不能乱点的警示案例~
下面我用通俗易懂的语言为大家剖析
CSRF攻击就是假装你去行骗
CSRF(Cross-site request forgery)
,它的中文名称是跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。
简单地说,CSRF就是利用了我们的登录状态或者授权状态,然后做一些损害我们自身利益的事情。
举个例子:
比如说你转账的链接的链接是www.yinghan.com/money.php?count=10&&id=xxxxxxxxxxx
,10代表的是金额,id
代表的是转账到的账号。
你可能说我没登录银行,我就点一下这个链接又能怎样。这个理解就错了。很多时候,绝大多人为了方便,你的一些账号你都点击了保存密码,免登录这个选项;这本来没问题,但是当你点击了不良链接的时候,你的身份(cookies)就会是你之前登录的身份,银行会默认这是你的操作,所以交易成功了!(当然,实际生活中银行的判断不是仅仅这样,这里这是举例子)
实际:
当黑客发现一个网站的csrf漏洞时,可能之前他没有什么好办法让你点击这个链接,但是,混在这个支付宝红包狂欢的时间,一个小小的链接,即可让你损失颇重~
关注下OWASP top10
2017年csrf依旧稳居前十~
一路前行,方便虽好,安全第一~