80,443 - Pentesting Web Methodology

支持 HackTricks

如果你对 黑客职业 感兴趣并想要攻克不可攻克的目标 - 我们正在招聘! (需要流利的波兰语书写和口语能力).

基本信息

网络服务是最 常见和广泛的服务,存在许多 不同类型的漏洞

默认端口: 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

Web API Pentesting

Methodology summary

在这个方法论中,我们假设你将攻击一个域(或子域)而仅此而已。因此,你应该将此方法论应用于每个发现的域、子域或具有不确定网络服务器的IP。

Server Version (Vulnerable?)

Identify

检查正在运行的服务器版本是否存在已知漏洞HTTP响应的头部和cookie可能非常有用,以识别所使用的技术和/或版本Nmap扫描可以识别服务器版本,但工具whatwebwebtechhttps://builtwith.com/也可能有用:

whatweb -a 1 <URL> #Stealthy
whatweb -a 3 <URL> #Aggresive
webtech -u <URL>
webanalyze -host https://google.com -crawl 2

搜索 web 应用程序的漏洞版本

检查是否有 WAF

Web 技术技巧

一些 寻找漏洞技巧,适用于不同的知名 技术

请注意,同一域名可能在不同的 端口文件夹子域名中使用 不同的技术 如果 web 应用程序使用了之前列出的任何知名 技术/平台其他,请不要忘记 在互联网上搜索 新的技巧(并告诉我!)。

源代码审查

如果应用程序的 源代码github 上可用,除了进行 自己的白盒测试 外,还有 一些信息 可能对当前的 黑盒测试 有用

  • 是否有 变更日志、Readme 或版本 文件,或任何可以通过网络访问的 版本信息

  • 凭据 是如何保存的?是否有任何(可访问的?) 文件 包含凭据(用户名或密码)?

  • 密码明文加密 还是使用了哪种 哈希算法

  • 是否使用了任何 主密钥 来加密某些内容?使用了哪种 算法

  • 你能否通过利用某个漏洞 访问这些文件

  • github 上是否有任何 有趣的信息(已解决和未解决的) 问题?或者在 提交历史 中(也许某个 密码在旧提交中引入)?

Source code Review / SAST Tools

自动扫描器

通用自动扫描器

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漏洞的信息:

爬虫

在网络中启动某种爬虫。爬虫的目标是尽可能多地找到被测试应用程序的路径。因此,应使用网络爬虫和外部资源来找到尽可能多的有效路径。

  • 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检测使用的技术并选择要使用的字典。

推荐字典:

注意,在暴力破解或爬虫过程中发现新目录时,应进行暴力破解。

检查每个找到的文件

特殊发现

执行爬虫暴力破解时,您可能会发现有趣的 事物,您需要注意

有趣的文件

403 Forbidden/Basic Authentication/401 Unauthorized (绕过)

403 & 401 Bypasses

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应用程序进行了全面的枚举,是时候检查许多可能的漏洞。您可以在这里找到检查清单:

Web Vulnerabilities Methodology

有关Web漏洞的更多信息,请访问:

监控页面变化

您可以使用工具,例如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}
支持 HackTricks

Last updated