文章总结: 本文介绍了AI智能体平台白盒审计中SSRF漏洞的审计思路,通过识别敏感模块和函数如requests、urllib、aiohttp等,分析关键参数是否可控,以及使用关键词搜索来定位潜在SSRF风险。文章提供了多个Python代码示例,展示了不同场景下的SSRF漏洞风险,并给出了审计时可关注的敏感参数和搜索正则表达式,帮助安全人员系统化地发现和修复SSRF漏洞。
综合评分: 85
文章分类: 代码审计,漏洞分析,WEB安全,AI安全,安全建设
AI智能体平台白盒审计思路(SSRF篇)
原创
tdragon6
平安集团安全应急响应中心
2025年8月12日 12:00
上海
上篇RCE类介绍了针对远程命令执行的白盒审计思路,本篇从服务端请求类进行介绍,其审计思路依旧是通过定位漏洞触发关键敏感函数,逐步审计调用链,判断关键参数是否由用户可控的外部传入,如果这些因素都具备,就会存在漏洞。本篇主要整理了SSRF漏洞的关键敏感词以供参考,文章还是以Python开发语言举例。
0x01 敏感模块或函数
1、requests模块
import requests
@app.route("/fetch", methods=["POST"])def fetch_url(): url = request.json.get("url") response = requests.get(url) # 关键点:攻击者可以控制的 URL 输入 return response.content
风险分析:requests.get()是最常见的 SSRF 漏洞载体。如果攻击者能够控制url,就可以发起对内网服务的请求,甚至可能触发内部 API 或访问敏感信息。
2、urllib 和 urllib3 模块
import urllib.request
@app.route("/load_file", methods=["POST"])def load_file(): file_url = request.json.get("file_url") with urllib.request.urlopen(file_url) as f: # 关键点:URL 输入 content = f.read() return content
风险分析:如果攻击者通过file_url提供一个恶意 URL(例如:http://localhost:8080),则可以导致服务器访问内部资源。
3、aiohttp 异步请求
import aiohttp
async def fetch_url(url): async with aiohttp.ClientSession() as session: async with session.get(url) as response: return await response.text()
风险分析:与同步请求类似,攻击者可利用url参数向内部网络发起请求。
4、命令执行类请求
import os
@app.route("/curl", methods=["POST"])def curl_request(): url = request.json.get("url") os.system(f"curl {url}") # 关键点:直接在命令行中执行外部请求
风险分析:通过os.system()执行命令时,攻击者可以注入命令参数,导致恶意请求或命令执行。
5、http.client 模块
import http.client
def fetch_url(url): connection = http.client.HTTPConnection(url) # 请求目标服务器 connection.request("GET", "/") # 发送 GET 请求 response = connection.getresponse() # 获取响应 return response.read() # 返回响应内容
风险分析:如果攻击者能够控制url参数,代码就会向指定的 URL 发起请求,可能访问到内部服务(如:http://localhost:8080或 http://127.0.0.1)。
6、httplib 模块
import httplib
def fetch_url(url): connection = httplib.HTTPConnection(url) # 请求目标服务器 connection.request("GET", "/") # 发送 GET 请求 response = connection.getresponse() # 获取响应 return response.read() # 返回响应内容
风险分析:httplib 是 Python 2.x 中的标准库,用于提供 HTTP 客户端功能。在 Python 3.x 中,httplib 被移到了 http.client 中。与 http.client 类似,httplib 模块同样存在 SSRF 风险。如果攻击者控制了 url 参数,可以轻易访问服务器内网或其他不应暴露的资源。
7、socket 模块
import socket
def fetch_ip(ip, port): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建 TCP 套接字 s.connect((ip, port)) # 连接到目标 IP 和端口 s.send(b"GET / HTTP/1.1\r\n\r\n") # 发送 HTTP 请求 response = s.recv(1024) # 获取响应数据 s.close() return response
风险分析:socket.connect()可以直接连接到任意 IP 地址和端口。如果攻击者能够控制ip或port参数,他们可以利用该功能访问服务器的内部资源。例如,连接到内网数据库的端口(如:192.168.0.1:3306)进行敏感操作。同时如果没有足够的控制和验证,攻击者可以使用 socket 连接到本地或内网服务,造成内部信息泄露、内网穿透等风险。
0x02 敏感参数
在白盒审计时可以关注以下一些参数,这些往往是参与服务端请求类功能的参数,容易出现SSRF。
0x03 关键词搜索
在白盒审计时,可以在代码库中进行以下正则或关键词搜索,帮助定位潜在的SSRF漏洞。
1、搜索请求函数
requests\.(get|post|put|delete)\(urllib\.request\.urlopen\(aiohttp\.ClientSession\(\)\.(get|post)http\.client\.(HTTP|HTTPS)Connectionsocket\.connect\(subprocess\.(run|Popen|call)os\.system\(
2、搜索 URL 参数
url\s*=\s*request\.(GET|POST|json|form)\[?["']?\w+["']?\]?
3、搜索 URL 操作
urlparse\(gethostbyname\(socket\.getaddrinfo\(
4、搜索配置项
proxies\s*=\s*{"http":.*}timeout\s*=\s*\d+allow_redirects\s*=\s*(True|False)verify\s*=\s*(True|False)
 预 告:
· AI智能体平台白盒审计思路(RCE篇)
· AI智能体平台白盒审计思路(SSRF篇)
· AI智能体平台白盒审计思路(权限控制篇)
…精彩继续,敬请关注本微信公众号
点赞、分享,感谢你的阅读▼
▼ 点击阅读原文,进入官网
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:平安集团安全应急响应中心 tdragon6《AI智能体平台白盒审计思路(SSRF篇)》