实战-关于KEY泄露API接口利用

admin 2024年12月19日23:18:32评论57 views字数 4558阅读15分11秒阅读模式

 

原文链接:https://zone.huoxian.cn/d/2909-keyapi

作者:和
0x1 前言

最近做项目遇见的各个平台的Key泄露的比较多,正好总结一下关于API接口利用的内容分享一下。

0x2 微信公众号泄露AppID+AppSecert利用

前期通过打点获取到的数据库,互联网连接mysql发现了多个公众号AppID和AppSecert。

实战-关于KEY泄露API接口利用

这里查询微信公众号的接口权限

实战-关于KEY泄露API接口利用

默认的接口权限未认证用户都是很基础的。利用微信公众号接口调试工具

测试下载文件接口

实战-关于KEY泄露API接口利用

测试上传文件接口

实战-关于KEY泄露API接口利用
AccessToken泄露

在某些路径泄露的时候可能会直接获取到外带的AccessToken,虽然AccessToken的时效性最长不超过两个小时,一般失效型都在一个多小时,利用泄露的AccessToken可直接调用

利用难度
  • 目前关于AccessToken的获取时效性两小时,利用AppID和AppSecert获取AccessToken有白名单限制,但是在实际利用获取AccessToken的时候除了测试环境,目前真实环境我还没遇到过关于非白名单获取失败的报错,测试的时候发现反而限制的比较死。
  • 再利用微信公众平台泄露的key时,已认证的微信公众平台可调用的接口是比较多的,例如:用户管理等。未认证的账号一般仅有基础接口可调用
0x3 程序Appid+AppSecert泄露

小程序接口Web.rar泄露的文件中发现了三个小程序的Appid+AppSecert

实战-关于KEY泄露API接口利用

利用API接口获取设备型号

实战-关于KEY泄露API接口利用

调用接口获取用户id

实战-关于KEY泄露API接口利用
0x4 德地图ApiKey利用

JS文件信息泄露了高德的ApiKey

实战-关于KEY泄露API接口利用

python脚本实现调用APIKey查询周边兴趣点

# -*- coding: utf-8 -*-import requestsimport jsondef search_poi(api_key, keyword, city="全国"):    url = f"https://restapi.amap.com/v3/place/text?key={api_key}&keywords={keyword}&city={city}"    response = requests.get(url)    result = response.json()if result['status'] == '1':        pois = result['pois']for poi in pois:            name = poi['name']            location = poi['location']            print(f"Name: {name}, Location: {location}")else:        print("POI Search failed:", result['info'])def search_place(api_key, keywords, city='北京'):    base_url = 'https://restapi.amap.com/v3/place/text'    params = {'key': api_key,'keywords': keywords,'city': city,'output''json'    }    response = requests.get(base_url, params=params)data = response.json()returndatadef search_route(api_key, origin, destination, city='北京', mode='driving'):    base_url = 'https://restapi.amap.com/v3/direction/' + mode    params = {'key': api_key,'origin': origin,'destination': destination,'city': city,'output''json'    }    response = requests.get(base_url, params=params)data = response.json()returndatadef search_geocode(api_key, address, city='北京'):    base_url = 'https://restapi.amap.com/v3/geocode/geo'    params = {'key': api_key,'address': address,'city': city,'output''json'    }    response = requests.get(base_url, params=params)data = response.json()returndataif __name__ == "__main__":    api_key = input("请输入你的高德Web服务API Key: ")    address1 = input("请输入你的起始地址: ")    address2 = input("请输入你的目的地址: ")    data1 = search_geocode(api_key, address1)    geocodes1 = data1.get('geocodes', [])    location1 = 'N/A'for geocode in geocodes1:        location1 = geocode.get('location''N/A')        print(f"起始地址: {address1}, 经纬度: {location1}")    data2 = search_geocode(api_key, address2)    geocodes2 = data2.get('geocodes', [])    location2 = 'N/A'for geocode in geocodes2:        location2 = geocode.get('location''N/A')        print(f"目的地址: {address2}, 经纬度: {location2}")data = search_route(api_key, location1, location2)    route = data.get('route', {})    path = route.get('paths', [{}])[0]    distance = path.get('distance''N/A')    duration = path.get('duration''N/A')    print(f"距离: {distance}, 预计时长: {duration}")    # 示例:POI搜索    keyword = input("请输入关键词进行POI搜索:")    search_poi(api_key, keyword)

路径规划、POI搜索

实战-关于KEY泄露API接口利用

查询经纬度

import requestsdefget_geocode(api_key, address, city='北京'):    base_url = 'https://restapi.amap.com/v3/geocode/geo'    params = {'key': api_key,'address': address,'city': city,'output''json'    }    response = requests.get(base_url, params=params)    data = response.json()return dataif __name__ == "__main__":    api_key = input("请输入你的高德Web服务API Key: ")whileTrue:        address = input("请输入你想要查询经纬度的地址(输入exit退出): ")if address.lower() == "exit":break        data = get_geocode(api_key, address)        geocodes = data.get('geocodes', [])if geocodes:for geocode in geocodes:                location = geocode.get('location''N/A')print(f"地址: {address}, 经纬度: {location}")else:print("未找到该地址,请重新输入。")

地址编码

实战-关于KEY泄露API接口利用

关于高德ApiKey的泄露风险,普通用户的高德额度调用量是有限制的,当key泄露之后,可以高频次调用,导致产生大量的额外费用。

实战-关于KEY泄露API接口利用

可以根据高德的付费要求,单接口的流量包都是费用如下,提供的接口越多,费用随之升高,泄露的风险就是可能造成资源浪费。

实战-关于KEY泄露API接口利用
利用难度
  • 无白名单机制限制,利用难度低
  • 危害程度除资源消耗无其它影响。
0x5 百度地图Apikey利用

这里直接测试的地址检索

# -*- coding: utf-8 -*-import requestsdef place_search(query, region, api_key):    url = f"http://api.map.baidu.com/place/v2/search?query={query}&region={region}&output=json&ak={api_key}"    response = requests.get(url)    try:        response.raise_for_status()  # 检查请求是否成功        data = response.json()        if data["status"] == 0:            results = data["results"]            for idx, result in enumerate(results, start=1):print(f"{idx}. {result['name']}: {result['address']}")        else:print("地点检索失败:", data["message"])    except requests.exceptions.RequestException as e:print("请求错误:", e)def main():    query = input("请输入要搜索的地点关键词:")    region = input("请输入搜索的区域(如城市名称):")    api_key = input("请输入百度地图开放平台的 API Key:")place_search(query, region, api_key)if __name__ == "__main__":main()

检索关键字

实战-关于KEY泄露API接口利用
0x6 OSS存储桶AK/SK泄露

接上一次的红队,信息搜集的时候发现这家关联单位的存储桶泄露的AK/SK。

入口:web系统弱口令,发现配置文件脱敏

实战-关于KEY泄露API接口利用

继续搜集应用功能发现泄露了Git的账号密码

实战-关于KEY泄露API接口利用

git登录拉取文件

实战-关于KEY泄露API接口利用

找到AK和SK

实战-关于KEY泄露API接口利用

除了带锁的无法访问,存储桶内数据共计800G+

实战-关于KEY泄露API接口利用
0x7 总结

公众号的测试+小程序的api调用认证用户的高级接口和存储桶的利用危害是最直观的,地图的API泄露一般只会产生经济效益。

原文始发于微信公众号(神农Sec):实战-关于KEY泄露API接口利用

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月19日23:18:32
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   实战-关于KEY泄露API接口利用http://cn-sec.com/archives/3527330.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息