首页 存档 技术 查看内容

ZoomEye Seebug二进制恶魔果实的神奇力量初探与思考

2018-3-30 13:00 |来自: 互联网 368 0

摘要: 转载之前说几句: 1、最近 ZoomEye 正在如火如荼组建 ZoomEye Pirate Team(钟馗之眼海盗团队,简称 ZPT),这篇文章是 ZPT 成员 k0shl 之作; 2、ZPT 会让 ZoomEye 更开放更强大,会让整个网络空间攻防对抗更有力量 ...

转载之前说几句:

1、最近 ZoomEye 正在如火如荼组建 ZoomEye Pirate Team(钟馗之眼海盗团队,简称 ZPT),这篇文章是 ZPT 成员 k0shl 之作;

2、ZPT 会让 ZoomEye 更开放更强大,会让整个网络空间攻防对抗更有力量;

3、感谢在努力成为海盗的你们,我代表 ZoomEye 会给你们应有的荣耀与收益!



作者 k0shl,首发在「i春秋社区」,并授权懒人在思考发布。

0x01 启航写在前面

大家好,我是菜鸟 k0shl,今天给大家带来的是关于 ZoomEye 和 Seebug 二进制恶魔果实的神奇力量初探与思考。

近期,ZoomEye 开放了 API,也加大了我们与这款强大的搜索引擎的融合度,在使用过程中,我慢慢探索了一些关于 ZoomEye Seebug 这个强大的恶魔果实的力量,但个人水平有限,而网络空间的暗物质十分丰富,ZoomEye 探测到的 banner 也相当庞大,更多精彩更酷的内容,有待海盗们继续深入探索。

0x02 打开新世界的大门ZoomEye API

要想早日踏上伟大航路,需要打造属于我们的“梅莉号”!对于 ZoomEye 的架构,每个人都有不同的设计思路,在这里分享一下我的设计思路,架构分为四个模块。

1、登录模块:

用于根据用户名密码获取 access_token;

2、基础信息获取模块:

用于获取基本探测信息,比如返回的主机数量,Web 服务器数量等等;

3、主机探测模块:

用于利用 banner 探测目标主机;

4、Web 服务器探测模块:

用于利用组件等信息探测 Web 服务器。

下面对模块信息进行简要讲解。

首先是登陆部分,需要用账号密码登录获取服务器返回的 token,之前碰到了服务器的 bug,刚开始我以为是密码编码的问题,后来改成了简单的弱口令仍然不行,最后和 yoyo 反映后,联调发现是服务器的一个 bug,这样就能顺利返回 access_token 了:

def ZoomEye_Login(g_strUsername,g_strPasswd):
m_strZoomEyeLoginUrl = 'http://api.zoomeye.org/user/login'
m_strfPostData = {"username":g_strUsername,"password":g_strPasswd}
m_strjData = json.dumps(m_strfPostData) # Post JSON 格式
req = urllib2.Request(url = m_strZoomEyeLoginUrl,data = m_strjData)
#req.add_header('User-agent','Mozilla 5.10')
m_strResultData = urllib2.urlopen(req).read()
return m_strResultData

另外 API 交互是用 JSON 格式,这样在获取返回信息的时候也很方便,就用 json.dump 和 json.loads 来读取 JSON 格式。


这个 token 是和 ZoomEye API 交互的关键部分,接下来请求中需要用到这个 token,在 Authorization 字段中需要加入这个 token,根据官方文档,需要在 access_token 前加上 JWT:

g_strLoginToken = "JWT “ m_strLogintoken

然后进一步利用 ZoomEye 的时候主要有3种方法,其实 ZoomEye 的利用非常简单,主要就是通过 get 包和 post 包实现,但真正对暗物质的探索,还是在搜索部分。ZoomEye 对 banner 的识别非常强大,这里我只是抛砖引玉。

对主机和 Web 服务器基本信息情况进行一个简单的探测:

m_strZoomEyeSearchUrl = 'http://api.zoomeye.org/resources-info'
req = urllib2.Request(url = m_strZoomEyeSearchUrl)
req.add_header("Authorization",g_strLoginToken)
m_strResultData = urllib2.urlopen(req).read()

可以返回一部分主机和 Web 信息,ZoomEye 对普通用户开放的扫描权限相对有限,但每天都会更新一部分主机和 Web 服务器信息,因此对于我们此次的初探来说已经够用了。


可以看到可以搜索到的信息相对有限,但是这并不妨碍我们的探测。接下来,针对 url:/host/search 和 /web/search,提供了两种搜索方法,根据官方文档,其主要区别还是在于 JSON 元素的不同,针对主机和 Web 服务搜索的元素不同。打个简单的比方,对于主机可以通过搜索 app、version、device 等搜索主机信息;而对于 Web,可以通过搜索 header、title、keywords 等搜索 Web 服务器信息。

今天我要做的是二进制方面的探索,那么就从 Host Search 开始,其实 Web Search 大同小异,有待各位表哥进一步发掘:

m_strZoomEyeSearchUrl = 'http://api.zoomeye.org/host/search?query=' g_strReqData '

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部