全球网站都是由各种组件组成,比如用的哪种操作系统、哪种Web容器、什么服务端语言、什么Web应用等等,而ZoomEye是一个面向网络空间的搜索引擎,它允许使用公网设备指纹检索和web指纹检索

web指纹检索语法

web指纹识别包括应用名、版本、前后端框架、服务端语言与操作系统、容器、数据库等等

语法描述示例
app:组件名目标组件名称app:"Apache httpd"
ver:组件版本目标组件版本号ver:'2.2.17'
site:网站域名目标网站域名site:baidu.com
os:操作系统目标操作系统os:windows
title:页面标题目标网站标题title:'hello'
keywords:页面关键字目标页面关键字keywords:'hello'
desc:页面说明页面描述字段desc:'hello'
headers:请求头部HTTP请求中的headersheaders:Server
country:国家或者地区代码目标地理位置country:US
city:城市名称目标城市city:"Beijing"
ip:IP地址IP地址ip:1.1.1.1
org:组织机构组织机构org:'Vimpelcom'
asn:自治系统号自治系统编号asn:42893

例如:搜索页面标题为hello,页面关键字为hello,地区为US

 

设备指纹检索语法

设备指纹识别如操作系统、应用名称、版本号、端口、地理位置等等

语法描述实例
app:组件名目标组件名称app:"Apache httpd"
ver:组件版本目标组件版本号ver:'2.2.17'
port:端口号目标系统开发端口port:'6379'
os:操作系统目标操作系统类型os:linux
service:服务名目标运行的服务类型service:webcam
hostname:主机名目标系统的主机名hostname:google.com
country:国家/地区代码目标系统的地理位置country:CN
city:城市目标系统的城市city:'Shanghai'
ip:IP地址IP地址ip:10.10.10.1
org:组织机构组织机构org:'Vimpelcom'
asn:自治系统号自治系统编号asn:42893
ssl:SSL证书号SSL证书ssl:'corp.google.com'

例如:搜索在JP的windows操作系统,运行为Apache的服务器

 

脚本检索

(1)获取token

方法一、开发者模式获取token(以下脚本使用的是这个)

 

方法二、通过Python脚本构造post请求,将用户名与密码以json格式发送至后端,获取响应数据包得到token  

# 获取token
import json
import requests
# 访问目标开启加密,python请求https关闭证书, 解决https报错问题
requests.packages.urllib3.disable_warnings()


def token():
    username = input('username:')
    password = input('password:')
    URL = 'https://api.zoomeye.org/user/login'
    data = {
        'username': username,
        'password': password
    }
    access_token = requests.post(URL, data=json.dumps(data), verify=False, allow_redirects=False)
    print(access_token.text)


token()

方法三、通过curl命令直接获取token

 

(2)脚本检索

查询开放3306端口的服务对应的ip地址

# 获取token
import json
import re
import requests

# 访问目标开启加密,python请求https关闭证书, 解决https报错问题
requests.packages.urllib3.disable_warnings()


def token():
    username = input('username:')
    password = input('password:')
    URL = 'https://api.zoomeye.org/user/login'
    data = {
        'username': username,
        'password': password
    }
    access_token = requests.post(URL, data=json.dumps(data), verify=False, allow_redirects=False)
    ganyu = access_token.text
    tokennum = re.search('ey((\w+.){4})', ganyu).group()
    ganyu1 = tokennum.split('"')[0]


def mian():
    headers = {
        'Accept': '*/*',
        'Cache - Control': 'max-age=0',
        'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
        'If-None-Match':'W/"e46c1403df6dd51ea4bb214fcfc1bad8b12dbd03"',
        'Referer': 'https://www.zoomeye.org/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0',
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site':'same-origin',
        'Cube-Authorization': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6IjVmN2FjMWE1YjBmYSIsImVtYWlsIjoiMjMxMTQ5ODM2NkBxcS5jb20iLCJleHAiOjE2NDc1OTYwNTAuMH0.e0yOehVGgWaKFPn1Y7aHyfoDmIqqV9VBIzbFiIOOQKY'
    }
    url = 'https://www.zoomeye.org/search?q=port%3A3306&page=1&pageSize=20&t=v4+v6+web'
    res = requests.get(url=url, headers=headers, verify=False, allow_redirects=False)
    init = json.loads(res.text)
    for line in init['matches']:
        print(line['ip']+':'+str(line['portinfo']['port']))


if __name__ == '__main__':
    mian()

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐