从Python2到Python3:改造一个老外写的TwonkyServer漏洞利用工具(CVE-2018-7171)

张开发
2026/4/20 15:13:30 15 分钟阅读

分享文章

从Python2到Python3:改造一个老外写的TwonkyServer漏洞利用工具(CVE-2018-7171)
从Python2到Python3改造一个老外写的TwonkyServer漏洞利用工具CVE-2018-7171在网络安全领域老旧工具的现代化改造是一个常被忽视却极具价值的话题。许多经典漏洞利用脚本由于年代久远往往基于Python2编写随着Python2官方支持的终止这些工具在新环境中运行会遇到各种兼容性问题。本文将以TwonkyServer目录遍历漏洞CVE-2018-7171的利用工具sharingIsCaring为例详细讲解如何将一个Python2脚本改造为Python3版本同时保持原有功能完整。1. 工具分析与Python2依赖梳理首先需要理解原始工具的工作原理。sharingIsCaring是一个针对TwonkyServer媒体服务器的目录遍历漏洞利用工具主要功能包括检测目标服务器端口开放状态获取服务器详细信息版本、平台等通过修改contentbase参数实现目录遍历交互式浏览服务器文件系统原始脚本依赖以下Python2特有特性# Python2特有语法示例 print Missing dependencies... # print作为语句而非函数 raw_input(path nr: ) # Python2的输入函数 urllib3.disable_warnings() # urllib3在Python3中的调用方式有变化工具的核心逻辑集中在三个函数中setContentBase()发送恶意请求设置遍历路径serverInfo()获取服务器信息browser()交互式文件浏览器2. Python3兼容性改造核心步骤2.1 基础语法转换最直接的修改涉及Python2到Python3的基础语法变化# 修改前Python2 print Error message var raw_input(Input: ) # 修改后Python3 print(Error message) var input(Input: )需要特别注意异常处理的变化。Python3中except子句的语法更严格# 修改前 try: import module except: print Error # 修改后 try: import module except Exception as e: print(fError: {e})2.2 网络请求库的适配原始工具混合使用了urllib3和requests库。在Python3中需要特别注意# urllib3警告禁用方式变化 # 修改前 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # 修改后 from urllib3.exceptions import InsecureRequestWarning urllib3.disable_warnings(InsecureRequestWarning)对于requests库的响应处理Python3中iter_lines()返回的是bytes类型需要解码# 修改前Python2 for line in response.iter_lines(): if line: print line # 修改后Python3 for line in response.iter_lines(): if line: print(line.decode(utf-8))2.3 字符串与字节处理Python3严格的bytes/str区分是改造的重点难点。原始工具中的字符串比较和处理都需要调整# 修改前 if line.find(version) ! -1: # 修改后 if line.decode(utf-8).find(version) ! -1:对于文件内容的关键字检测函数也需要相应修改def keywordDetector(line): line_str line.decode(utf-8) if isinstance(line, bytes) else line for keyword in KEYWORDS: if line_str.upper().find(keyword) ! -1: return True return False3. 功能增强与代码优化在保证兼容性的基础上我们可以对工具进行一些改进3.1 参数解析优化将硬编码的参数改为可配置选项使用argparse模块import argparse parser argparse.ArgumentParser() parser.add_argument(host, helpTarget host IP) parser.add_argument(port, helpTarget port) parser.add_argument(--ssl, actionstore_true, helpUse HTTPS) args parser.parse_args()3.2 添加颜色输出兼容性原始工具使用colorama进行彩色输出在Python3中需要确保正确处理字符串from colorama import Fore, Style def print_color(message, color): print(f{color}{message}{Style.RESET_ALL}) print_color(Error message, Fore.RED)3.3 添加异常处理增强为网络操作添加更细致的异常处理try: response requests.get(url, timeout5) except requests.exceptions.RequestException as e: print_color(fRequest failed: {e}, Fore.RED) return None4. 改造后的完整工具使用示例完成所有修改后工具的使用方式保持不变但更加健壮# 运行改造后的工具 python3 twonky_v3.py 192.168.1.100 9000交互界面示例*** Get Serverdetails from Twonky *** Server Name: MyMediaServer Twonky Version: 8.1 Serverplatform: Linux Build date: 2017-05-12 *** contentbase path set to /../ *** path nr: 010 ------------------------------ Dir 010 etc Fil 011 passwd Fil 012 shadow ------------------------------关键改进点总结表特性Python2版本Python3改造后语法兼容性仅Python2兼容Python3.6字符串处理隐式转换显式bytes/str处理错误处理简单异常捕获详细异常分类可维护性硬编码参数可配置选项输出稳定性可能编码错误统一UTF-8处理5. 常见问题与调试技巧在改造过程中可能会遇到以下典型问题Q: 工具运行后没有任何输出A: 检查网络请求是否被防火墙拦截尝试添加--ssl参数使用HTTPSQ: 中文字符显示乱码A: 确保所有字符串处理都明确指定UTF-8编码response.text.encode(utf-8).decode(utf-8)Q: 某些目录无法访问A: 可能是服务器权限限制尝试使用不同的路径遍历方式contentbase/../../etc/对于更复杂的调试可以启用requests的调试日志import logging logging.basicConfig(levellogging.DEBUG)6. 安全研究与工具维护的最佳实践通过这个改造案例我们可以总结出一些安全工具维护的经验版本隔离使用虚拟环境管理不同Python版本的工具依赖python -m venv py3_env source py3_env/bin/activate pip install -r requirements.txt持续集成为工具添加自动化测试确保兼容性import unittest class TestTwonkyTool(unittest.TestCase): def test_keyword_detection(self): self.assertTrue(keywordDetector(CRYPTO wallet))文档更新维护清晰的版本变更记录CHANGELOG.md: ## [1.0.0] - 2023-05-20 - 迁移到Python3兼容版本 - 增强异常处理和日志社区协作将改进提交回原始项目或创建分支git clone https://github.com/mechanico/sharingIsCaring git checkout -b python3-support在实际使用改造后的工具进行安全测试时有几个小技巧值得分享当遇到复杂的目录结构时可以先用工具扫描出所有目录编号然后编写简单脚本批量检查关键文件对于大型媒体服务器合理设置超时时间可以避免长时间等待记得始终在授权范围内进行测试保存完整的操作日志作为审计依据。

更多文章