1.前言
自从学会了根据漏洞利用编写POC批量验证脚本(基于python3)。我越来越明白代码的重要性。Are you kown,my English is pool and so is my code. 特别是在2021HW之后,我发现要回归原始,回归代码。 所以,便有了这个小项目—ZBG,就像Wgpsec团队成员写的TIG一样,尝试去写自己的小工具。虽然github上有不少基于zoomeye资产搜集的脚本,可以拿来用。但是,你不去写,可能永远不会写。github上的脚本,基本都是在一个文件里,包括TIG脚本。确实没有面对对象编程的思维。大学里学过编程课程的朋友都知道,面对对象编程的三个特征:封装、继承和多态。如果你不是做开发的,可能你永远无法理解!
2.ZBG介绍
ZBG(zoomeye batch gather),即:zoomeye批量搜集脚本(工具)。该脚本由afei00123(本人)编写,基于python3编写。
github地址:github.com/ltfafei/ZBG
小项目结构:
│ ├── checkToken.py #检查token是否存在,不存在则登录获取
│ ├── config.py #配置zoomeye邮箱和密码
│ ├── getToken.py #登录获取token
│ └── zoomeyeQuery.py #zoomeye查询批量获取资产
实现逻辑: 首先登录获取token,如果token文件已存在就用该token直接查询;如果token失效就删除该文件重新登录获取token,再用新的token进行查询。其实功能很简单。
3.学习别人的项目
在自己写这个工具的时候,单纯看zoomeye的API接口文档有点不懂,也是第一次写。俗话说:万事开头难。可以从别人的项目中进行学习,但不能照搬。
zoomeye github地址:github.com/knownsec/Zo…
zoomeye API接口文档:www.zoomeye.org/doc
4.API学习
2021年,最值得学习5项技能中就包括了python和API,学会根据API接口获取想要的数据。有了这个项目的学习,对于API的渗透也有了更好的理解。在渗透测试过程中,你有没有遇到过API接口?是不是束手无策,无从下手。看着Freebuf等博客大佬的文章,你还是不知所以然。
4.1 zoomeye API参数
查询参数:
以上参数说明不懂,如何验证,可借助Burp抓包添加参数验证。比如:page参数是翻页参数,但这说的是起始页还是翻页范围呢?starnightcyber/ZoomEye的项目中看源代码是代表起始页的意思。到底是不是,就需要验证了。当然也可以在项目代码中直接跑。通过改变page页数获取IP数量都是默认的20个IP,所以这里的翻页参数就是起始页。
根据API文档中的响应结果,明白需要取什么数据。
4.2 zoomeyeQuery.py主要代码
def query(self, query, page, num, facet, file):
gettoken = check_Token()
random_ua = get_token()
headers = {
'Authorization': "JWT " +gettoken.check_token(),
"User-Agent": random_ua.random_useragent()
}
api = "https://api.zoomeye.org/host/search"
index = 0
while True:
try:
#如果index=设置的最大页数,则跳出循环
if index == num:
break
print(f"\033[31m[+] 正在获取第{page}页结果:")
page += 1
index += 1
query_res = requests.get(api, headers=headers, params={"query": query, "page": page, "facets": facet}).text
# 转化为json,方便提取字段
json_res = json.loads(query_res)["matches"]
count = 1
for i in json_res:
print(f"[{count}] " + i['ip'] + ":" + str(i['portinfo']['port']))
res = i['ip'] + ":" + str(i['portinfo']['port'])
with open(file, "a") as fw:
fw.writelines(res + "\n")
count += 1
except Exception as e:
print("[-] 请确认是否达到最大查询次数!")
5.缺点及未来优化
钟馗之眼(Zoomeye)的API查询时获取的端口默认是第一个,所以查询时最好添加统计项参数。钟馗之眼的查询分两种:基于登录token查询和基于APIkey查询。进一步优化:
(1)添加基于APIkey的查询;
(2)添加基于python爬虫获取资产,导出到excel。