简单理解,嵌入式浏览器框架就是嵌入在客户端软件中的浏览器控件,浏览器与宿主程序是隔离的,通过浏览器控件的丰富接口可以使浏览器与宿主程序进行交互实现丰富的功能。
说简单点就是用前端技术开发客户端界面
常见的嵌入式浏览器框架:
从市场占有率来看,CEF\Electron 两款占有率都很高,当然CEF占有率世界第一!!!
我们可以看下CEF框架开发的都有些什么特征,以微信、蓝信、有道云、蚁剑来进行举列子
从上面可以得出如果源码下带有libcef.dll的均为cef框架开发,如果源码下具有package.json均为electron
以下标注出来的为核心选项,其余的可以在electron或node中查询到
在Electron程序中,可以自己定义方法,就比如http、https之类的,官方文档中protocol API用来实现协议注册:
https://www.electronjs.org/docs/api/protocol#protocolregisterschemesasprivilegedcustomschemes
以蚁剑为例子,来看看他实现了哪些协议:
在程序开始就注册了以下几种协议:
当然注册完协议后还需要指定目录:
上面的代码就是将ant-static、ant-views、ant-src这三个自定义协议分别重定向到根目录中的static、views、source目录:
在electron框架中加载主界面的需要先创建一个浏览器对象,然后将页面载入进浏览器对象:
上面有一个元素叫nodeIntegration非常重要,因为开启了它才能加载node中的模块,如果此元素为false则需要使用他定义的js函数进行代码执行。
在挖掘漏洞之前,需要考虑两个事情:
首先解决第一个问题,核心模块位置,这个在蚁剑入口点已经告诉我们了:
在modules目录中,是否能进行远程交互这个是我们目前没有办法控制的。
传统的JS代码(chrome公司的V8引擎)能否对你电脑的文件进行操作?是没办法的,所以我们需要借助外部力量来执行代码了。electron是基于node.js来开发的,而node.js是可以操作文件,甚至可以执行命令的。所以前面提到的nodeIntegration属性的作用就凸显出来了,没有它的话,我们想要执行代码需要走很多的弯路,但是如果开启了nodeIntegration属性,就可以直接调用nodejs库来进行代码执行了。
既然是基于nodejs的,那么就必定是以JS进行驱动的。在渗透测试中,我们想要对一个页面进行修改或者操作就需要有一个XSS漏洞,嵌入式浏览器也是同理。
首先通过软件的功能我们可以知道蚁剑是一个webshell管理程序,那么他和远程通讯的地方也就固定死了。需要我们从被控端传回数据,然后呈现到用户面前,那些是服务端可控的?
无非就是上面那几个模块,有了思路我们就只需要对上面那几个模块所在的JS进行审计了。
通过功能JS以及其他的一些文件,和调试输出信息得到了上图中几个功能的具体实现目录:
app.js Line 64:
front/index.html Line 10:
load.entry.js Line 154:
app.entry.js Line 315:
通过分析得知具有以下两个函数:
这个函数是用来过滤服务端回传数据中的危险字符:
将被实体化的字符转化回危险字符。
source\modules\viewsite\index.js
因为目标开启了nodeIntegration所以可以直接使用nodejs的库:
假设o.php为黑客所留的后门:
因为蚁剑是获取cookie所以需要调用header函数:
使用浏览网站功能:
浏览网站:
成功注入JS代码并执行命令。
http://www.f4ckweb.top/index.php/archives/54/
https://developer.aliyun.com/article/594227
https://www.electronjs.org/docs/api
https://www.anquanke.com/post/id/194854
https://www.jianshu.com/p/b3a778262ee8
更多好文请关注公众号:夜暗心明
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课