.. | ||
buckets | ||
drupal | ||
electron-desktop-apps | ||
php-tricks-esp | ||
tomcat | ||
xss-to-rce-electron-desktop-apps | ||
403-and-401-bypasses.md | ||
aem-adobe-experience-cloud.md | ||
angular.md | ||
apache.md | ||
artifactory-hacking-guide.md | ||
bolt-cms.md | ||
cgi.md | ||
code-review-tools.md | ||
dotnetnuke-dnn.md | ||
drupal.md | ||
flask.md | ||
git.md | ||
golang.md | ||
grafana.md | ||
graphql.md | ||
gwt-google-web-toolkit.md | ||
h2-java-sql-database.md | ||
iis-internet-information-services.md | ||
imagemagick-security.md | ||
jboss.md | ||
jira.md | ||
joomla.md | ||
jsp.md | ||
laravel.md | ||
moodle.md | ||
nextjs.md | ||
nginx.md | ||
nodejs-express.md | ||
prestashop.md | ||
put-method-webdav.md | ||
python.md | ||
README.md | ||
rocket-chat.md | ||
special-http-headers.md | ||
spring-actuators.md | ||
symphony.md | ||
tomcat.md | ||
uncovering-cloudflare.md | ||
vmware-esx-vcenter....md | ||
waf-bypass.md | ||
web-api-pentesting.md | ||
werkzeug.md | ||
wordpress.md |
80,443 - Pentesting Web Methodology
{% hint style="success" %}
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 分享黑客技巧。
如果你对 黑客职业 感兴趣并想要攻克不可攻克的目标 - 我们正在招聘! (需要流利的波兰语书写和口语能力).
{% embed url="https://www.stmcyber.com/careers" %}
基本信息
网络服务是最 常见和广泛的服务,存在许多 不同类型的漏洞。
默认端口: 80 (HTTP),443(HTTPS)
PORT STATE SERVICE
80/tcp open http
443/tcp open ssl/https
nc -v domain.com 80 # GET / HTTP/1.0
openssl s_client -connect domain.com:443 # GET / HTTP/1.0
Web API Guidance
{% content-ref url="web-api-pentesting.md" %} web-api-pentesting.md {% endcontent-ref %}
Methodology summary
在这个方法论中,我们假设你将攻击一个域(或子域)而仅此而已。因此,你应该将此方法论应用于每个发现的域、子域或具有不确定网络服务器的IP。
- 首先识别网络服务器使用的技术。寻找技巧,以便在测试的其余部分中牢记,如果你能成功识别技术。
- 该技术版本是否有任何已知漏洞?
- 使用任何知名技术?有没有有用的技巧来提取更多信息?
- 是否有任何专业扫描器可以运行(如wpscan)?
- 启动通用扫描器。你永远不知道它们是否会发现某些东西或找到一些有趣的信息。
- 从初始检查开始:robots、sitemap、404错误和SSL/TLS扫描(如果是HTTPS)。
- 开始爬取网页:是时候查找所有可能的文件、文件夹和使用的参数。同时,检查特殊发现。
- 注意,在暴力破解或爬取过程中发现新目录时,应进行爬取。
- 目录暴力破解:尝试暴力破解所有发现的文件夹,寻找新的文件和目录。
- 注意,在暴力破解或爬取过程中发现新目录时,应进行暴力破解。
- 备份检查:测试是否可以通过附加常见备份扩展名找到发现的文件的备份。
- 暴力破解参数:尝试查找隐藏参数。
- 一旦你识别了所有可能接受用户输入的端点,检查与之相关的所有类型的漏洞。
- 遵循此检查清单
Server Version (Vulnerable?)
Identify
检查正在运行的服务器版本是否存在已知漏洞。
HTTP响应的头部和cookie可能非常有用,以识别所使用的技术和/或版本。Nmap扫描可以识别服务器版本,但工具whatweb、webtech或https://builtwith.com/也可能有用:
whatweb -a 1 <URL> #Stealthy
whatweb -a 3 <URL> #Aggresive
webtech -u <URL>
webanalyze -host https://google.com -crawl 2
搜索 web 应用程序的漏洞版本
检查是否有 WAF
- https://github.com/EnableSecurity/wafw00f
- https://github.com/Ekultek/WhatWaf.git
- https://nmap.org/nsedoc/scripts/http-waf-detect.html
Web 技术技巧
一些 寻找漏洞 的 技巧,适用于不同的知名 技术:
- AEM - Adobe Experience Cloud
- Apache
- Artifactory
- Buckets
- CGI
- Drupal
- Flask
- Git
- Golang
- GraphQL
- H2 - Java SQL 数据库
- IIS 技巧
- JBOSS
- Jenkins
- Jira
- Joomla
- JSP
- Laravel
- Moodle
- Nginx
- PHP (php 有很多有趣的技巧可以被利用)
- Python
- Spring Actuators
- Symphony
- Tomcat
- VMWare
- Web API Pentesting
- WebDav
- Werkzeug
- Wordpress
- Electron Desktop (XSS 到 RCE)
请注意,同一域名可能在不同的 端口、文件夹和 子域名中使用 不同的技术。
如果 web 应用程序使用了之前列出的任何知名 技术/平台或 其他,请不要忘记 在互联网上搜索 新的技巧(并告诉我!)。
源代码审查
如果应用程序的 源代码 在 github 上可用,除了进行 自己的白盒测试 外,还有 一些信息 可能对当前的 黑盒测试 有用:
- 是否有 变更日志、Readme 或版本 文件,或任何可以通过网络访问的 版本信息?
- 凭据 是如何保存的?是否有任何(可访问的?) 文件 包含凭据(用户名或密码)?
- 密码 是 明文、加密 还是使用了哪种 哈希算法?
- 是否使用了任何 主密钥 来加密某些内容?使用了哪种 算法?
- 你能否通过利用某个漏洞 访问这些文件?
- 在 github 上是否有任何 有趣的信息(已解决和未解决的) 问题?或者在 提交历史 中(也许某个 密码在旧提交中引入)?
{% content-ref url="code-review-tools.md" %} code-review-tools.md {% endcontent-ref %}
自动扫描器
通用自动扫描器
nikto -h <URL>
whatweb -a 4 <URL>
wapiti -u <URL>
W3af
zaproxy #You can use an API
nuclei -ut && nuclei -target <URL>
# https://github.com/ignis-sec/puff (client side vulns fuzzer)
node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi2rVUN/?query=FUZZ"
CMS 扫描器
如果使用了 CMS,不要忘记 运行扫描器,也许会发现一些有价值的信息:
Clusterd: JBoss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfish
CMSScan: WordPress, Drupal, Joomla, vBulletin 网站的安全问题。 (GUI)
VulnX: Joomla, Wordpress, Drupal, PrestaShop, Opencart
CMSMap: (W)ordpress, (J)oomla, (D)rupal 或 (M)oodle
droopscan: Drupal, Joomla, Moodle, Silverstripe, Wordpress
cmsmap [-f W] -F -d <URL>
wpscan --force update -e --url <URL>
joomscan --ec -u <URL>
joomlavs.rb #https://github.com/rastating/joomlavs
在这一点上,您应该已经获得了一些关于客户端使用的网络服务器的信息(如果提供了任何数据)以及在测试期间需要记住的一些技巧。如果您运气好,您甚至找到了一个CMS并运行了一些扫描器。
逐步Web应用程序发现
从这一点开始,我们将开始与Web应用程序进行交互。
初始检查
包含有趣信息的默认页面:
- /robots.txt
- /sitemap.xml
- /crossdomain.xml
- /clientaccesspolicy.xml
- /.well-known/
- 还要检查主页面和次页面中的评论。
强制错误
当向Web服务器发送奇怪的数据时,可能会表现出意外行为。这可能会打开漏洞或泄露敏感信息。
- 访问假页面如 /whatever_fake.php (.aspx,.html,.etc)
- 在cookie值和参数值中**添加 "[]", "]]", 和 "[["**以创建错误
- 通过在URL的末尾提供输入为**
/~randomthing/%s
**来生成错误 - 尝试不同的HTTP动词如 PATCH、DEBUG 或错误的如 FAKE
检查您是否可以上传文件(PUT动词,WebDav)
如果您发现WebDav已启用但您没有足够的权限在根文件夹中上传文件,请尝试:
- 暴力破解凭据
- 通过WebDav向网页中找到的其他文件夹上传文件。您可能有权限在其他文件夹中上传文件。
SSL/TLS漏洞
- 如果应用程序在任何部分不强制用户使用HTTPS,那么它容易受到中间人攻击
- 如果应用程序使用HTTP发送敏感数据(密码),那么这是一个高风险漏洞。
使用testssl.sh检查漏洞(在漏洞赏金计划中,这类漏洞可能不会被接受),并使用a2sv重新检查漏洞:
./testssl.sh [--htmlfile] 10.10.10.10:443
#Use the --htmlfile to save the output inside an htmlfile also
# You can also use other tools, by testssl.sh at this momment is the best one (I think)
sslscan <host:port>
sslyze --regular <ip:port>
关于SSL/TLS漏洞的信息:
- https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/
- https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/
爬虫
在网络中启动某种爬虫。爬虫的目标是尽可能多地找到被测试应用程序的路径。因此,应使用网络爬虫和外部资源来找到尽可能多的有效路径。
- gospider (go): HTML爬虫,JS文件中的LinkFinder和外部资源(Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com)。
- hakrawler (go): HML爬虫,带有JS文件的LinkFinder和Archive.org作为外部资源。
- dirhunt (python): HTML爬虫,也指示“美味文件”。
- evine (go): 交互式CLI HTML爬虫。它还在Archive.org中搜索。
- meg (go): 该工具不是爬虫,但可能有用。您只需指示一个包含主机的文件和一个包含路径的文件,meg将获取每个主机上的每个路径并保存响应。
- urlgrab (go): 具有JS渲染能力的HTML爬虫。然而,它似乎没有维护,预编译版本较旧,当前代码无法编译。
- gau (go): 使用外部提供者(wayback, otx, commoncrawl)的HTML爬虫。
- ParamSpider: 该脚本将找到带参数的URL并列出它们。
- galer (go): 具有JS渲染能力的HTML爬虫。
- LinkFinder (python): HTML爬虫,具有JS美化能力,能够在JS文件中搜索新路径。查看JSScanner也值得一看,它是LinkFinder的一个包装器。
- goLinkFinder (go): 提取HTML源代码和嵌入的JavaScript文件中的端点。对漏洞猎人、红队员、信息安全专家有用。
- JSParser (python2.7): 一个使用Tornado和JSBeautifier从JavaScript文件中解析相对URL的Python 2.7脚本。对轻松发现AJAX请求很有用。看起来没有维护。
- relative-url-extractor (ruby): 给定一个文件(HTML),它将使用巧妙的正则表达式从丑陋(压缩)文件中提取相对URL。
- JSFScan (bash, 多个工具): 使用多个工具从JS文件中收集有趣的信息。
- subjs (go): 查找JS文件。
- page-fetch (go): 在无头浏览器中加载页面并打印出加载页面的所有URL。
- Feroxbuster (rust): 内容发现工具,结合了之前工具的多个选项。
- Javascript Parsing: 一个Burp扩展,用于查找JS文件中的路径和参数。
- Sourcemapper: 一个工具,给定.js.map URL将获取美化的JS代码。
- xnLinkFinder: 这是一个用于发现给定目标的端点的工具。
- waymore: 从时光机发现链接(还下载时光机中的响应并寻找更多链接)。
- HTTPLoot (go): 爬取(甚至通过填写表单)并使用特定正则表达式查找敏感信息。
- SpiderSuite: Spider Suite是一个高级多功能GUI网络安全爬虫/蜘蛛,专为网络安全专业人员设计。
- jsluice (go): 这是一个Go包和命令行工具,用于从JavaScript源代码中提取URL、路径、秘密和其他有趣的数据。
- ParaForge: ParaForge是一个简单的Burp Suite扩展,用于提取请求中的参数和端点以创建自定义字典进行模糊测试和枚举。
- katana (go): 这个工具很棒。
- Crawley (go): 打印它能够找到的每个链接。
暴力破解目录和文件
从根文件夹开始暴力破解,确保使用此方法暴力破解所有找到的目录,以及通过爬虫(您可以递归地进行此暴力破解,并在使用的字典开头附加找到的目录名称)。
工具:
- Dirb / Dirbuster - 包含在Kali中,旧(和慢)但功能正常。允许自动签名证书和递归搜索。与其他选项相比太慢。
- Dirsearch (python): 不允许自动签名证书,但允许递归搜索。
- Gobuster (go): 允许自动签名证书,不具有递归搜索。
- Feroxbuster - 快速,支持递归搜索。
- wfuzz
wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ
- ffuf - 快速:
ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ
- uro (python): 这不是一个爬虫,而是一个工具,给定找到的URL列表将删除“重复”的URL。
- Scavenger: Burp扩展,从不同页面的burp历史中创建目录列表。
- TrashCompactor: 删除具有重复功能的URL(基于js导入)。
- Chamaleon: 它使用wapalyzer检测使用的技术并选择要使用的字典。
推荐字典:
- https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt
- Dirsearch 包含的字典
- http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10
- Assetnote字典
- https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content
- raft-large-directories-lowercase.txt
- directory-list-2.3-medium.txt
- RobotsDisallowed/top10000.txt
- https://github.com/random-robbie/bruteforce-lists
- https://github.com/google/fuzzing/tree/master/dictionaries
- https://github.com/six2dez/OneListForAll
- https://github.com/random-robbie/bruteforce-lists
- https://github.com/ayoubfathi/leaky-paths
- /usr/share/wordlists/dirb/common.txt
- /usr/share/wordlists/dirb/big.txt
- /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
注意,在暴力破解或爬虫过程中发现新目录时,应进行暴力破解。
检查每个找到的文件
- Broken link checker: 查找HTML中的断开链接,这些链接可能容易被接管。
- 文件备份: 一旦找到所有文件,查找所有可执行文件的备份(".php", ".aspx"...)。备份命名的常见变体有:file.ext~, #file.ext#, ~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp和file.old. 您还可以使用工具bfac 或 backup-gen.
- 发现新参数: 您可以使用像Arjun, parameth, x8 和 Param Miner 来发现隐藏参数。如果可以,您可以尝试在每个可执行的Web文件中搜索隐藏参数。
- Arjun所有默认字典: https://github.com/s0md3v/Arjun/tree/master/arjun/db
- Param-miner “params” : https://github.com/PortSwigger/param-miner/blob/master/resources/params
- Assetnote “parameters_top_1m”: https://wordlists.assetnote.io/
- nullenc0de “params.txt”: https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773
- 评论: 检查所有文件的评论,您可以找到凭据或隐藏功能。
- 如果您正在进行CTF,一个“常见”的技巧是隐藏 信息在页面的右侧的评论中(使用数百个 空格,以便在使用浏览器打开源代码时看不到数据)。另一种可能性是在网页的底部使用多个新行并在评论中隐藏信息。
- API密钥: 如果您找到任何API密钥,有指南指示如何使用不同平台的API密钥:keyhacks, zile, truffleHog, SecretFinder, RegHex, DumpsterDive, EarlyBird
- Google API密钥: 如果您找到任何看起来像AIzaSyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik的API密钥,您可以使用项目gmapapiscanner来检查该密钥可以访问哪些API。
- S3存储桶: 在爬虫过程中查看是否有任何子域或任何链接与某些S3存储桶相关。在这种情况下,检查存储桶的权限。
特殊发现
在执行爬虫和暴力破解时,您可能会发现有趣的 事物,您需要注意。
有趣的文件
- 查找CSS文件中指向其他文件的链接。
- 如果您找到一个_.git_文件,可以提取一些信息
- 如果您找到一个_.env_,可以找到API密钥、数据库密码和其他信息。
- 如果您找到API端点,您也应该测试它们。这些不是文件,但可能“看起来像”它们。
- JS文件: 在爬虫部分提到了一些可以从JS文件中提取路径的工具。此外,监控每个找到的JS文件也很有趣,因为在某些情况下,变化可能表明代码中引入了潜在的漏洞。您可以使用例如JSMon.
- 您还应该使用RetireJS或JSHole检查发现的JS文件,以查找是否存在漏洞。
- JavaScript去混淆和解包: https://lelinhtinh.github.io/de4js/, https://www.dcode.fr/javascript-unobfuscator
- JavaScript美化器: http://jsbeautifier.org/, http://jsnice.org/
- JsFuck去混淆 (javascript with chars:"[]!+" https://ooze.ninja/javascript/poisonjs/)
- TrainFuck:
+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.
- 在多个场合,您需要理解使用的正则表达式,这将很有用:https://regex101.com/
- 您还可以监控检测到表单的文件,因为参数的变化或新表单的出现可能表明潜在的新漏洞功能。
403 Forbidden/Basic Authentication/401 Unauthorized (绕过)
{% content-ref url="403-and-401-bypasses.md" %} 403-and-401-bypasses.md {% endcontent-ref %}
502 Proxy Error
如果任何页面响应该代码,它可能是一个配置错误的代理。如果您发送HTTP请求,如:GET https://google.com HTTP/1.1
(带有主机头和其他常见头),代理将尝试访问 google.com ,您将发现一个 SSRF。
NTLM认证 - 信息泄露
如果运行的服务器要求身份验证是Windows或您发现一个登录要求您的凭据(并要求域名),您可以引发信息泄露。
发送头:“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”
,由于NTLM认证的工作原理,服务器将响应内部信息(IIS版本,Windows版本...)在头部"WWW-Authenticate"中。
您可以使用nmap插件"http-ntlm-info.nse"来自动化此过程。
HTTP重定向(CTF)
可以在重定向中放置内容。这些内容不会显示给用户(因为浏览器将执行重定向),但其中可能隐藏某些内容。
Web漏洞检查
现在已经对Web应用程序进行了全面的枚举,是时候检查许多可能的漏洞。您可以在这里找到检查清单:
{% content-ref url="../../pentesting-web/web-vulnerabilities-methodology.md" %} web-vulnerabilities-methodology.md {% endcontent-ref %}
有关Web漏洞的更多信息,请访问:
- https://six2dez.gitbook.io/pentest-book/others/web-checklist
- https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html
- https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection
监控页面变化
您可以使用工具,例如https://github.com/dgtlmoon/changedetection.io来监控页面的修改,这可能会插入漏洞。
如果您对黑客职业和破解不可破解的东西感兴趣 - 我们正在招聘! (需要流利的波兰语书写和口语能力).
{% embed url="https://www.stmcyber.com/careers" %}
HackTricks自动命令
Protocol_Name: Web #Protocol Abbreviation if there is one.
Port_Number: 80,443 #Comma separated if there is more than one.
Protocol_Description: Web #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for Web
Note: |
https://book.hacktricks.xyz/pentesting/pentesting-web
Entry_2:
Name: Quick Web Scan
Description: Nikto and GoBuster
Command: nikto -host {Web_Proto}://{IP}:{Web_Port} &&&& gobuster dir -w {Small_Dirlist} -u {Web_Proto}://{IP}:{Web_Port} && gobuster dir -w {Big_Dirlist} -u {Web_Proto}://{IP}:{Web_Port}
Entry_3:
Name: Nikto
Description: Basic Site Info via Nikto
Command: nikto -host {Web_Proto}://{IP}:{Web_Port}
Entry_4:
Name: WhatWeb
Description: General purpose auto scanner
Command: whatweb -a 4 {IP}
Entry_5:
Name: Directory Brute Force Non-Recursive
Description: Non-Recursive Directory Brute Force
Command: gobuster dir -w {Big_Dirlist} -u {Web_Proto}://{IP}:{Web_Port}
Entry_6:
Name: Directory Brute Force Recursive
Description: Recursive Directory Brute Force
Command: python3 {Tool_Dir}dirsearch/dirsearch.py -w {Small_Dirlist} -e php,exe,sh,py,html,pl -f -t 20 -u {Web_Proto}://{IP}:{Web_Port} -r 10
Entry_7:
Name: Directory Brute Force CGI
Description: Common Gateway Interface Brute Force
Command: gobuster dir -u {Web_Proto}://{IP}:{Web_Port}/ -w /usr/share/seclists/Discovery/Web-Content/CGIs.txt -s 200
Entry_8:
Name: Nmap Web Vuln Scan
Description: Tailored Nmap Scan for web Vulnerabilities
Command: nmap -vv --reason -Pn -sV -p {Web_Port} --script=`banner,(http* or ssl*) and not (brute or broadcast or dos or external or http-slowloris* or fuzzer)` {IP}
Entry_9:
Name: Drupal
Description: Drupal Enumeration Notes
Note: |
git clone https://github.com/immunIT/drupwn.git for low hanging fruit and git clone https://github.com/droope/droopescan.git for deeper enumeration
Entry_10:
Name: WordPress
Description: WordPress Enumeration with WPScan
Command: |
?What is the location of the wp-login.php? Example: /Yeet/cannon/wp-login.php
wpscan --url {Web_Proto}://{IP}{1} --enumerate ap,at,cb,dbe && wpscan --url {Web_Proto}://{IP}{1} --enumerate u,tt,t,vp --passwords {Big_Passwordlist} -e
Entry_11:
Name: WordPress Hydra Brute Force
Description: Need User (admin is default)
Command: hydra -l admin -P {Big_Passwordlist} {IP} -V http-form-post '/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log In&testcookie=1:S=Location'
Entry_12:
Name: Ffuf Vhost
Description: Simple Scan with Ffuf for discovering additional vhosts
Command: ffuf -w {Subdomain_List}:FUZZ -u {Web_Proto}://{Domain_Name} -H "Host:FUZZ.{Domain_Name}" -c -mc all {Ffuf_Filters}
{% hint style="success" %}
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE)
学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。