发现Webpack中泄露的api

已在先知社区发表,转载请注明出处

1 - 安装 reverse-sourcemap

需要配置好npm环境 (runoob教程)

使用命令(需要代理) npm install --global reverse-sourcemap 进行安装

2 - 寻找xxx.js.map

如果有sourcemap的话,在js最后会有注释:

//# sourceMappingURL=xxxxxxx.js.map

比如这里我要下载MarketSearch.js.mapMarketSearch.js是与站点同名的js,应该是主要的js文件)

  • 在开发者工具中搜索.js.map (位置1)
  • 找到MarketSearch.js.map所在的js (位置2)
  • 找到对应的链URL (位置3)
    • 一般来说,静态文件会挂载在当前域名下,但不排除其他站点挂载的情况,所以需要找到对应的URL,比如这里就不同站
    • 这里MarketSearch.jsURL记为http://xxx.xxx/mulu/MarketSearch.js

3 - 下载xxx.js.map并获取所有webpack打包文件

使用curl -O http://xxx.xxx/mulu/MarketSearch.js.map

或者直接访问http://xxx.xxx/mulu/MarketSearch.js.map 下载MarketSearch.js.map

使用命令reverse-sourcemap --output-dir ./MarketSearch MarketSearch.js.map即可获取所有webpack打包文件

4 - 使用IDE/其他编辑器寻找接口

我这里使用的是vs code

直接使用全局搜索 左边侧边栏的搜索图标,或者ctrl+shift+f

4-1 搜索接口

搜索接口有两个方法:

一个是借鉴先验请求的url,这种情况需要我们可以访问到某些接口,比如非SSO的登录

另一个是直接搜索,这种情况大多是我们没法访问到当前站点的接口

4-1-1 借鉴先验请求的url

比如我们访问的站点xxx.xxx存在登录接口,通过尝试,发现会调用/MarketSearch/api/login接口

那么我们可以通过不断删减来搜索接口/MarketSearch/api/login,/api/login,/login

可以看到,当我们删减到/api/login的时候,就可以找到接口对应的代码

这个接口是可以调用的,但是发现其定义的接口与实际访问的接口不同(第五部分解释,这里使用了动态定义的接口)

4-1-2 直接搜索

直接搜索有两种方法,根据请求方法,或者猜测命名规则进行搜索

4-1-2-1 根据请求方法搜索接口

接口大多是通过get/post方法进行访问的,所以这是一个很好的关键词

通过请求方法,可以搜索到动态定义的接口(第五部分),避免找不到接口的问题。

而且,如果存在请求方法重写的代码,通过请求方法搜索可以发现这些代码的定义。

post

get

4-1-2-1 根据猜测命名规则搜索接口

一般来说,admin,superadmin,manage之类的关键词比较常见

此外,还可以根据站点名,可调用api命名规则,js命名规则进行搜索。这个站点没有这样的接口,就不举例了。

5 - 寻找动态定义的接口

刚好这个站点存在动态定义的接口(直接明文写在js代码中的静态接口相反):MarketSearch/api/login ,上面我们通过搜索,只发现了/MarketSearch/api/user/login接口,这里介绍一下如何寻找该接口。

首先搜索login,可以看到在index.ts中对登录进行了定义

查看index.ts,可以看到这里定义了用到的视图,继续跟踪Login视图,命名为Login_1,路径在./Login

打开Login.tsx,可以看到根据vse_client_1.defaultMainView.Login视图,创建了对应的元素,vse_client_1定义为vse-client

打开vse-client目录,寻找defaultMainView视图的定义

跟踪Login视图,可以看到api_1路径在./api,且Login视图定义了游客登录用户登录两个登录方式,这里跟踪用户登录登录方法

用户登录使用了LoginModal模态框

跟踪LoginModal模态框,可以看到登录的行为通过yield api_1.api.login(input)来实现

api_1 = ./apiinput则是ItemKey生成的表单中用户填写的数据(username & password

跟踪api_1.api.login

大致说一下这里的逻辑:

  • key是键值,比如这里调用的是api.login,则key === login

  • 对于每一个vse_share_1.Api定义的接口

  • 如果传入的key与其中一个接口相同,且不为constructor(通过prototype原型读取,所以需要排除构造函数),则向下继续

  • login传入__awaiter_

  • 通过axios_1.default.post(`/${NAMESPACE}/${vse_share_1.ShareConfig.apiPrefix}/${key}`, args)发起请求

    • ${NAMESPACE} === MarketSearch

      • 查看命名空间的定义

      • 跟踪../share

    • ${vse_share_1.ShareConfig.apiPrefix} === api

      • 跟踪vse-share,寻找ShareConfig

    • ${key} === login

    • args === input,即,由ItemKey生成的json{username:"xxx",password:"xxx"}

这种情况下,通过拼接预定义参数和传入的api名称,动态生成url路径,避免了静态存储api路径,使得寻找api接口需要花费的精力大大提升。(web安全狗流泪)

发现Webpack中泄露的api的更多相关文章

  1. 记一次Hvv中遇到的API接口泄露而引起的一系列漏洞

    引言 最近朋友跟我一起把之前废弃的公众号做起来了,更名为鹿鸣安全团队,后面陆续会更新个人笔记,有趣的渗透经历,内网渗透相关话题等,欢迎大家关注 前言 Hvv中的一个很有趣的漏洞挖掘过程,从一个简单的A ...

  2. 利用Instrument Leak来发现App中的内存泄露

    XCode提供了一组用于检测内存,调试动画,布局等的工具.对于调试一些性能问题,内存问题非常方便.这里我们使用Leak来发现代码中的内存泄露. 在Leak中启动我们的应用开始监控: 注意,在监控的时候 ...

  3. webpack中插件 prerender-spa-plugin 来进行SEO优化(二十四)

    vue.react对于开发单页应用来说带来了很好的用户的体验,但是同样有缺点,比如首页加载慢,白屏或SEO等问题的产生.为什么会出现这种情况呢?我们之前开发单页应用是这样开发的,比如首页 index. ...

  4. Entity Framework 实体框架的形成之旅--Code First模式中使用 Fluent API 配置(6)

    在前面的随笔<Entity Framework 实体框架的形成之旅--Code First的框架设计(5)>里介绍了基于Code First模式的实体框架的经验,这种方式自动处理出来的模式 ...

  5. ASP.NET MVC4中调用WEB API的四个方法

    http://tech.it168.com/a2012/0606/1357/000001357231_all.shtml [IT168技术]当今的软件开发中,设计软件的服务并将其通过网络对外发布,让各 ...

  6. Native Application 开发详解(直接在程序中调用 ntdll.dll 中的 Native API,有内存小、速度快、安全、API丰富等8大优点)

    文章目录:                   1. 引子: 2. Native Application Demo 展示: 3. Native Application 简介: 4. Native Ap ...

  7. Mvc 6 中创建 Web Api

    如何在Mvc 6 中创建 Web Api以及如何脱离IIS实现自我托管 微软推出的Asp.net vNext(asp.net 5.0)的其中的一个目标就是统一mvc 和web api 的框架.接下来我 ...

  8. C#中调用Outlook API 发起会议

    原文:C#中调用Outlook API 发起会议 在我上一篇博文中曾提到了 SharePoint 中调用传出电子邮件中的邮件服务器及地址发送邮件 但是,里面的方法只能用于发送普通电子邮件.如果要发起会 ...

  9. webpack中利用require.ensure()实现按需加载

    webpack中的require.ensure()可以实现按需加载资源包括js,css等,它会给里面require的文件单独打包,不和主文件打包在一起,webpack会自动配置名字,如0.js,1.j ...

随机推荐

  1. Python开发环境从零搭建-02-代码编辑器Sublime

    想要从零开始搭建一个Python的开发环境说容易也容易 说难也能难倒一片开发人员,在接下来的一系列视频中,会详细的讲解如何一步步搭建python的开发环境 本文章是搭建环境的第2篇 讲解的内容是:安装 ...

  2. P3387 【模板】缩点 题解 (Tarjan)

    题目链接 P3387 [模板]缩点 解题思路 这几天搞图论,好有趣hhh,多写几篇博客. 上次学\(Tarjan\)求割点,这次缩点. 思路大概是多一个栈和染色的步骤,每次\(Tarjan\)的时候把 ...

  3. Vue.js 学习笔记之七:使用现有组件

    5.3 使用现有组件 在之前的五个实验中,我们所演示的基本都是如何构建自定义组件的方法,但在具体开发实践中,并非项目中所有的组件都是需要程序员们自己动手来创建的.毕竟在程序设计领域,"不要重 ...

  4. 基于开源的GOCW和Directshow.net,实现摄像头预览、采集、录像等操作

    本文基于开源的GOCW和Directshow.net,实现图像采集等操作.最为关键的部分在于可以实现摄像头的控制,同时关于视频采集进行了实现. 具体的内容请关注首发于51CTO的课程<基于Csh ...

  5. var=value?export前后差在哪?-- Shell十三问<第五问>

    var=value?export前后差在哪?-- Shell十三问<第五问> 这次让我们暂时丢开 command line ,先来了解一下 bash 变量(variable)吧.所谓的 变 ...

  6. [树形DP]没有上司的晚会

    没 有 上 司 的 晚 会 没有上司的晚会 没有上司的晚会 题目描述 Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.每个职 ...

  7. [源码解析] 并行分布式任务队列 Celery 之 多进程模型

    [源码解析] 并行分布式任务队列 Celery 之 多进程模型 目录 [源码解析] 并行分布式任务队列 Celery 之 多进程模型 0x00 摘要 0x01 Consumer 组件 Pool boo ...

  8. 采用QT技术,开发OFD电子文档阅读器

    前言 ofd作为板式文档规范,相当于国产化的pdf.由于pdf标准制定的较早,相关生态也比较完备,市面上的pdf阅读器种类繁多.国内ofd阅读器寥寥无几,作者此前采用wpf开发了一款阅读器,但该阅读器 ...

  9. 消息中间件rabbitMQ

    1 为什么使用消息队列啊? 其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么 面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这 ...

  10. pandas(1):Pandas文件读取——read_excel()

    目录 一.函数原型 二.功能说明 三.常用参数说明 四.总结 一.函数原型 pd.read_excel(io, sheet_name=0, header=0, names=None, index_co ...