30 KiB
80,443 - 网络服务渗透测试方法论
☁️ HackTricks 云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?想要在 HackTricks 中宣传你的公司吗?或者你想要获取最新版本的 PEASS 或下载 HackTricks 的 PDF吗?请查看订阅计划!
- 发现我们的独家 NFT 收藏品The PEASS Family
- 获取官方 PEASS & HackTricks 商品
- 加入 💬 Discord 群组 或 telegram 群组 或在 Twitter 上 关注我 🐦@carlospolopm。
- 通过向 hacktricks 仓库 和 hacktricks-cloud 仓库 提交 PR 来分享你的黑客技巧。
赏金猎人提示:注册 Intigriti,一个由黑客创建的高级赏金猎人平台!立即加入我们的https://go.intigriti.com/hacktricks,开始赚取高达**$100,000**的赏金!
{% embed url="https://go.intigriti.com/hacktricks" %}
基本信息
Web 服务是最常见和广泛的服务,存在许多不同类型的漏洞。
**默认端口:**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指南
{% content-ref url="web-api-pentesting.md" %} web-api-pentesting.md {% endcontent-ref %}
方法概述
在这个方法中,我们假设您要攻击一个域名(或子域名),只有这一个。因此,您应该将此方法应用于发现的每个域名、子域名或范围内未确定的Web服务器。
- 首先,识别Web服务器使用的技术。寻找在测试的其余部分中要记住的技巧,如果您能成功识别出技术。
- 版本的已知漏洞?
- 使用任何众所周知的技术?有任何有用的技巧来提取更多信息吗?
- 有任何专门的扫描工具要运行(如wpscan)吗?
- 启动通用扫描工具。您永远不知道它们是否会找到一些有趣的信息。
- 从初始检查开始:robots,sitemap,404错误和SSL/TLS扫描(如果是HTTPS)。
- 开始爬取网页:现在是时候查找所有可能的文件、文件夹和正在使用的参数了。还要检查特殊发现。
- 请注意,每当在暴力破解或爬取过程中发现一个新目录时,都应该进行爬取。
- 目录暴力破解:尝试对所有发现的文件夹进行暴力破解,以寻找新的文件和目录。
- 请注意,每当在暴力破解或爬取过程中发现一个新目录时,都应该进行暴力破解。
- 备份检查:测试是否可以找到附加常见备份扩展名的已发现文件的备份。
- 暴力破解参数:尝试查找隐藏参数。
- 一旦您识别了所有可能接受用户输入的端点,请检查与之相关的所有漏洞。
- 按照此清单操作
服务器版本(存在漏洞吗?)
识别
检查正在运行的服务器版本是否存在已知漏洞。
响应的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
检查是否有任何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上可用,除了自己对应用程序进行白盒测试之外,还有一些信息对当前的黑盒测试可能会有用:
- 是否有通过Web访问的更改日志或自述文件或版本文件或包含版本信息的任何内容?
- 凭据是如何保存的?是否有(可访问的)包含凭据(用户名或密码)的文件?
- 密码是以明文、加密还是使用了哪种哈希算法?
- 是否使用任何主密钥来加密某些内容?使用了哪种算法?
- 是否可以通过利用某些漏洞访问这些文件?
- 在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>
CMS扫描器
如果使用了CMS,请不要忘记运行扫描器,也许会发现一些有趣的东西:
Clusterd:JBoss,ColdFusion,WebLogic,Tomcat,Railo,Axis2,Glassfish
CMSScan:对WordPress,Drupal,Joomla,vBulletin网站进行安全问题扫描(图形界面)
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
在这一点上,您应该已经获得了客户端使用的Web服务器的一些信息(如果提供了任何数据),并且还有一些在测试期间要记住的技巧。如果您很幸运,甚至可能找到了一个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将文件上传到Web页面中的其他找到的文件夹。您可能有权限在其他文件夹中上传文件。
SSL/TLS漏洞
- 如果应用程序在任何部分都没有强制使用HTTPS,那么它就容易受到中间人攻击
- 如果应用程序正在使用HTTP发送敏感数据(密码)。那么这是一个高风险漏洞。
使用testssl.sh检查漏洞(在Bug Bounty计划中,这类漏洞可能不会被接受),并使用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文件和外部来源(Archive.org,CommonCrawl.org,VirusTotal.com,AlienVault.com)中的LinkFinder。
- hakrawler (go):HML爬虫,带有JS文件的LinkFider和Archive.org作为外部来源。
- dirhunt (python):HTML爬虫,还指示“juicy files”。
- 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,以查找并提取丑陋(压缩)文件中的相对URL。
- JSFScan (bash,多个工具):使用多个工具从JS文件中收集有趣的信息。
- subjs (go):查找JS文件。
- page-fetch (go):在无头浏览器中加载页面,并打印出加载的所有URL以加载页面。
- Feroxbuster (rust):混合了前面工具的几个选项的内容发现工具。
- Javascript Parsing:用于在JS文件中查找路径和参数的Burp扩展。
- Sourcemapper:给定.js.map URL,将获取美化的JS代码。
- xnLinkFinder:这是一个用于发现给定目标的端点的工具。
- waymore: 从wayback机器中发现链接(还下载wayback中的响应并查找更多链接)
- HTTPLoot (go):爬行(甚至通过填写表单)并使用特定的正则表达式查找敏感信息。
- SpiderSuite:Spider Suite是一个高级多功能GUI网络安全爬虫,专为网络安全专业人员设计。
- jsluice (go):它是一个用于从JavaScript源代码中提取URL、路径、秘密和其他有趣数据的Go包和命令行工具。
- ParaForge:ParaForge是一个简单的Burp Suite扩展,用于从请求中提取参数和端点,以创建自定义的模糊和枚举字典。
暴力破解目录和文件
从根目录开始进行暴力破解,确保使用此方法和爬虫发现的所有目录进行暴力破解(可以递归地进行此暴力破解,并在使用的字典的开头添加找到的目录的名称)。
工具:
- 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 included dictionary
- http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10
- Assetnote wordlists
- 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
- /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。
- 发现新参数:您可以使用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反混淆(使用字符:“[]!+”)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 (bypass)
{% content-ref url="403-and-401-bypasses.md" %} 403-and-401-bypasses.md {% endcontent-ref %}
502 Proxy Error
如果任何页面以该代码响应,那么可能是代理配置错误。如果您发送类似于:GET https://google.com HTTP/1.1
(带有主机头和其他常见头),代理将尝试访问google.com,您将找到一个 SSRF。
NTLM Authentication - 信息泄露
如果运行的服务器要求身份验证是Windows,或者您找到一个要求您凭据(并要求域名)的登录页面,您可以引发信息泄露。
发送以下头部:“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”
,由于NTLM身份验证的工作方式,服务器将在“WWW-Authenticate”头部中回复内部信息(IIS版本、Windows版本...)。
您可以使用nmap插件“http-ntlm-info.nse”来自动化此过程。
HTTP重定向(CTF)
可以在重定向中放置内容。这个内容不会显示给用户(因为浏览器会执行重定向),但其中可能隐藏了一些东西。
检查Web漏洞
现在已经对Web应用程序进行了全面的枚举,是时候检查许多可能的漏洞了。您可以在这里找到检查清单:
{% content-ref url="../../pentesting-web/web-vulnerabilities-methodology/" %} web-vulnerabilities-methodology {% endcontent-ref %}
TODO:使用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来监视页面的修改,以便检测可能插入漏洞的更改。
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}
Bug赏金提示:注册Intigriti,一个由黑客创建的高级Bug赏金平台!立即加入我们,让您的赏金高达**$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %}
☁️ HackTricks云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 您在网络安全公司工作吗?您想在HackTricks中看到您的公司广告吗?或者您想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品The PEASS Family
- 获得官方PEASS和HackTricks周边产品
- 加入💬 Discord群组或电报群组,或在Twitter上关注我🐦@carlospolopm。
- 通过向hacktricks repo 和hacktricks-cloud repo 提交PR来分享您的黑客技巧。