新时代渗透思路!微服务下的信息收集Ⅱ
上次介绍了一个公司的站点可能由各个独立在不同服务器上的服务组成,所以我们需要想尽办法找到更多的域名。
为了更好的测试我们也需要找到更多的目录
和参数
。上次介绍可以从目标的微信小程序搜集域名,也介绍了一款可以帮助我们收集目标js
里子域名和url的工具JSFinder
。
这次我们继续介绍如何收集更多的资料,以下所有内容都是围绕同一个站点进行,目标域名abc.com
,但是因为一些原因,真实站点截图无法放出,部分截图为某公益src项目信息收集截图。
相关域名发现
1、备案查询
绝大多数网站都是有备案信息的,可以通过备案信息查询。如下图,通过备案查询,我们找到另一个站点xyz123.com
(该截图来自对某公益src站点的采集,并非原目标)。
2、证书透明度公开日志枚举 证书透明度(Certificate Transparency,CT)是证书授权机构(CA)的一个项目,证书授权机构CA会将他们发布的每个SSL/TLS证书发布到公共日志中。一个SSL/TLS证书通常包含域名、子域名和邮件地址,它们也经常成为攻击者非常希望获得的有用信息。
因为目标是个大型站点,用这种方法找到的几率比较大。
如下图,在https://crt.sh/
中查询
(该截图来自对某公益src站点的采集,并非原目标):
3、dns等
这里还有很多方法,太过繁琐,直接上工具,这次用的工具是oneforall
,功能很多,各位感兴趣可以自己研究。(该截图来自对某公益src站点的采集,并非原目标)
通过上面的收集,除了发现很多有意思的子域名,而且搜索到了如xyz123.com
和ddba.com
等和目标相关的域名。
服务划分
对上面找到的域名逐个访问,对得到的内容进行简单处理,发现目前搜集到的服务(能访问的域名)主要有展示站
,综合运营管理平台
和广告服务
。
找到他们所对应的服务器,发现每个服务都至少都包含2台服务器,如图:
在上面的所有域名和IP中,有两个挺有趣的,一个是office.abc.com
,一个是xxxxx.abc.com。
为什么有趣呢,一是因为名称office
听起来就像是办公服务,另一个是IP,其余的服务器IP都是11*.*.*.*
或者是14*.*.*.*
,就它俩特殊,所以这俩待会要重点关照。
在上篇文章中说过,微服务是由很多个独立的服务组合而成的,而上面收集到的服务看起来不像是所有的服务,毕竟上面是被动的信息收集,搜集的内容有限。假设上面搜集到的服务器是目标的大部分服务器,那么如果目标还有其它服务,我们该怎么办呢?答案是扫描端口。
端口扫描
在端口扫描时需要注意的是,因为一台服务器上可能有很多服务,所以这里在扫描的时候需要扫描全部端口,这里使用nmap -sC -T4 -p 1-65535
重点扫描了那两台服务器,发现了两个有意思的地方,如下:
第二个是一个很厉害的服务,估计是处于开发中,访问页面默认填充账户密码,所以这里不放图了(认怂保平安)。
隐私文件探测
在上一篇文章微服务的介绍途中,有一部分是通过git管理的。
于是随手在目标站输入个abc.com/.git
,得到403
的反馈。
于是继续随手输入abc.com/.git/config
再然后我又顺手输入了很多东西,得到了很多东西,甚至包括开发人员的姓名,邮箱,甚至是内网ip分布和git所在服务器的位置。
API探测
在上一篇文章中提出可以通过js
收集api
的相关信息,但是有些站点使用了webpack
:
本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。
当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。
webpack
会把所有的js
信息打包在一起,这样的好处是前后端分离。
但同样的,它也会把所有的api
暴露出来。如下图,直接查看目标源代码:
我们可以逐个点击每个.js
文件去探寻,这里找到一个source map
通过该source map
文件可以还原网站原始代码,有两种方法:
1、使用浏览器自带的解析功能(以火狐举例)
2、使用工具
npm install -g source-map-unpack
这样我们就可以在里面找到更多的信息。
微服务下的信息收集就是那么有意思,通过逐步探测,如同盲人摸象那样找到每一个服务,然后拼凑出一个整体。这次的站点是一个典型的由微服务构成的,但站点性质特殊,所以收集到的内容都是疯狂脱敏的,各位理解万岁。
- Vim魔法堂:认识快捷键绑定
- JavaScript入门
- netty-socketio 示例代码
- 树莓派:你是我的眼
- redis 学习笔记(7)-cluster 客户端(jedis)代码示例
- Python应用03 使用PyQT制作视频播放器
- struts2(三)之表单参数自动封装与参数类型自动转换
- mysql benchmark基准测试
- redis 学习笔记(6)-cluster集群搭建
- redis 学习笔记(6)-cluster集群搭建
- dubbox REST服务使用fastjson替换jackson
- JavaScript中removeEventListener()使用注意事项
- dubbox REST服务使用fastjson替换jackson
- struts2(二)之配置文件详解与结果视图
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 分享给您一个快速离职的 SHELL 脚本
- ASP.NET WebAPI 中的参数绑定
- Qt音视频开发7-ffmpeg音频播放
- 本地 Docker Registry 的安装与使用
- 安装 Docker 环境
- 为生产环境编译 Angular 2 应用
- 剑指offer 03:二维数组中的查找
- 《剑指offer》04:替换空格
- 《剑指offer》05: 从尾到头打印链表
- 《剑指offer》第六天:重建二叉树
- Android | 《看完不忘系列》之Glide
- Android | 资源冲突覆盖的一些思考
- 如何获取流式应用程序中checkpoint的最新offset
- Spark之离线统计热点城市信息
- 使用OpenCV实现图像增强