Chrome Extensions Spider & Downloader
可以先看一下n0r00t的文章的这一篇:https://www.n0tr00t.com/2017/01/09/Chrome-Extensions-Probe.html。
以及用chrome试用一下最后的成果POC:https://server.n0tr00t.com/chrome/ext_probe.html,可以探测Chrome中已安装的扩展,配合Chrome扩展的一些漏洞,说不定能达到定点攻击的效果。
和蘑菇同学一起弄的一个有趣的尝试。在此之上写的爬虫项目,主要以实现目的为主,不过有几个点挺有意思,稍微记录分享一下,留给后人用。主要的思路可以看上面的文章,简单来说就是:以script标签on事件的差异性,结合Chrome开发规范”version 2.0”的manifest.json中的web_accessible_resources
,探测客户端所存在的扩展。
我这里主要负责的工作就是前期的数据准备啦。主要目的:爬虫获取Chrome扩展的一些信息包括:扩展ID,扩展名,Star数量,用户数量、类别、插件商店URL等信息,然后根据ID下载扩展的.crx文件进行解压,提取其manifest.json,解析manifest.json中的web_accessible_resources
字段,生成一个json文件。
github地址:https://github.com/neargle/ChromeExtensionKnower
1 | $ python3 geknower.py --help master [b563839] modified untracked |
关于脚本如何使用,可以去看一下github上面的readme,这里主要先记录一下写程序时遇到的一些有趣的点,以备后人使用。看完这些可能更有助于你理解代码。
Q. Note
1. Chrome WebStore Api
主要用到三个API:
- 爬取chrome扩展信息:https://chrome.google.com/webstore/ajax/item?hl=zh-CN&gl=CN&pv=20161108&mce=atf,eed,pii,rtr,rlb,gtc,hcn,svp,wtd,c3d,ncr,ctm,ac,hot,euf,mac,fcf,rma,pot,evt,igb&requestedCounts=infiniteWall:{limit}:0:false&token=featured:[email protected]:7:false,mcol#top_picks_productivity:[email protected]:11:true,infiniteWall:[email protected]:{start}:false&category={category}&_reqid=3058318&rt=j
- 根据ID下载
.crx
文件:https://clients2.google.com/service/update2/crx?response=redirect&prodversion=49.0&x=id%3D{id}%26installsource%3Dondemand%26uc
下载crx文件是比较简单的,主要是爬取chrome扩展信息的那个API,费了我和蘑菇一点神。主要看url中,我{}出来的start和limit的位置是比较奇特的,不像正常的翻页请求,根据start,limit和category可以获取到全部的chrome扩展信息。扩展的分类有:
1 | category_list = [ |
其实还有一个’ext/15-by-google’分类,但是这个分类的扩展在其他分类中也存在,而且这个分类是不能用第一个Api爬去的,得使用https://chrome.google.com/webstore/ajax/item?pv=20161108&count=209&category=ext/15-by-google
这个API。API中存在的pv可能是需要更新的。
2. 拓展数据解析
一般这种ajax,返回的应该是正常的json格式,但是Chrome Webstore却不是,Chrome返回的的格式是这样的。
明显不是正常的json,经过测试之后,是可以根据这样json.loads(res.lstrip(")]}'\n"))
解析成一个复杂的list的。然后再根据位置进行提取可以获得到我们所需的信息。其中要注意,users的信息是千分位字符串1,000,000
,而且是有可能出现1,000,000+
的情况,在处理数据的时候需要考虑进来。处理方法看https://github.com/neargle/ChromeExtensionKnower/blob/master/lib/common.py#L8
。
3. 解析”web_accessible_resources”
我们需要web_accessible_resources
中可以访问的资源,原本直接使用web_accessible_resources
,但是发现web_accessible_resources
中是可以使用*
做通配符的,所以我们需要获取crx中的所有文件路径对通配符进行匹配。但是与linux通配符又有一定区别。/path/*
是可以匹配到path/zzz.png
的,所以如果要使用fnmatch
进行处理的话,多进行一个对路径和通配符的操作。
实际编写脚本的过程中,因为这些问题得爬取数据下来观察数据才能发现不对,所以重复爬了好几次。浪费了很多时间。
还有一些小细节,比较繁琐就不描述了,有需要的可以看看项目代码。
程序使用介绍
https://github.com/neargle/ChromeExtensionKnower/blob/master/README.md
最后
因为chrome插件开发者的质量层次不齐,不免还有很多未解决的问题。包括其最后的Poc的JavaScript中也留了一个很有趣的点,注意到并且对此有想法的人可以和我们交流呀。
Thx
Evi1m0 Phithon
本博客所有内容只用于安全研究,请勿用于恶意攻击。
本文URL: "https://blog.neargle.com/2017/01/09/chrome-ext-spider-for-probe/index.html"