Web应用程序
缺陷 | 真实场景 |
---|---|
SQL 注入 | 获取 Active Directory 用户名并对 VPN 或电子邮件门户执行密码喷洒攻击。 |
文件包含 | 阅读源代码以查找隐藏的页面或目录,这些页面或目录公开了可用于获取远程代码执行的附加功能。 |
不受限制的文件上传 | 允许用户上传个人资料图片的 Web 应用程序,允许上传任何类型的文件(不仅仅是图片)。可以利用此功能通过上传恶意代码来完全控制 Web 应用程序服务器。 |
不安全的直接对象引用(IDOR) | 当与访问控制失效等缺陷相结合时,这通常可用于访问其他用户的文件或功能。例如,在浏览到 /user/701/edit-profile 等页面时编辑您的用户个人资料。如果我们可以将 更改701 为702 ,我们就可以编辑其他用户的个人资料! |
访问控制失效 | 另一个示例是允许用户注册新帐户的应用程序。如果帐户注册功能设计不佳,用户可能会在注册时执行权限提升。考虑POST 注册新用户时的请求,该请求提交数据username=bjones&password=Welcome1&email=bjones@inlanefreight.local&roleid=3 。如果我们可以操纵roleid 参数并将其更改为0 或会怎样1 ?我们已经看到了这种情况的真实应用程序,并且可以快速注册管理员用户并访问 Web 应用程序的许多非预期功能。 |
Web程序布局
层:
类别 | 描述 |
---|---|
Web Application Infrastructure |
描述 Web 应用程序按预期运行所需的组件(如数据库)的结构。由于 Web 应用程序可以设置为在单独的服务器上运行,因此了解它需要访问哪个数据库服务器至关重要。 |
Web Application Components |
组成 Web 应用程序的组件代表与 Web 应用程序交互的所有组件。这些组件分为以下三个区域:UI/UX 、Client 和Server 组件。 |
Web Application Architecture |
架构包括各个 Web 应用程序组件之间的所有关系。 |
Web 应用程序基础设施
Client-Server
Web 应用程序通常采用该client-server
模型。服务器以客户端-服务器模型托管 Web 应用程序,并将其分发给任何尝试访问它的客户端。在这种模型中,Web 应用程序有两种类型的组件:前端组件,通常在客户端(浏览器)上解释和执行;后端组件,通常由托管服务器编译、解释和执行。One Server
如果任何托管的 Web 应用程序存在漏洞,则整个 Web 服务器都会受到漏洞。Many Servers - One Database
此模型将数据库分离到其自己的数据库服务器上,并允许 Web 应用程序的托管服务器访问数据库服务器以存储和检索数据。只要数据库分离在其自己的数据库服务器上,就可以将其视为多服务器对一个数据库和单服务器对一个数据库。这种模型的主要优势 (from a security point of view
) 是分段,其中 Web 应用程序的每个主要组件都单独放置和托管。如果一个 Web 服务器受到攻击,其他 Web 服务器不会受到直接影响。Many Servers - Many Databases
Web 应用程序只能访问私有数据和跨 Web 应用程序共享的公共数据。也可以将每个 Web 应用程序的数据库托管在其单独的数据库服务器上。这种设计还被广泛用于冗余目的,因此如果任何 Web 服务器或数据库脱机,备份将代替其运行,以尽可能减少停机时间。
Web应用程序组件
-
`Client
-
Server
- 网络服务器
- Web 应用程序逻辑
- 数据库
-
Services
(微服务)
- 第三方集成
- Web 应用程序集成
-
`Functions(无服务器)
敏感数据泄露
敏感数据泄露是指最终用户可以以明文形式获取敏感数据ctrl + u`通过 Web 代理(如)键入或查看页面源代码Burp Suite
有时,我们可能会发现登录名credentials、hashes或其他敏感数据隐藏在网页源代码的注释中或JavaScript正在导入的外部代码中。其他敏感信息可能包括暴露的链接或目录,甚至暴露的用户信息,所有这些都可能被利用来进一步访问 Web 应用程序或 Web 应用程序的支持基础设施
HTML注入
HTML 注入是指未经过滤的用户输入显示在页面上。这可以通过检索之前提交的代码(例如从后端数据库检索用户评论)或直接在JavaScript
前端显示未经过滤的用户输入来实现。
<a href="http://www.hackthebox.com">Click Me</a>
跨站点脚本XSS
HTML Injection
漏洞通常还可用于通过注入要在客户端执行的代码来执行
跨站点脚本 (XSS)攻击。一旦我们可以在受害者的机器上执行代码,我们就有可能访问受害者的帐户甚至他们的机器。在实践中与非常相似。但是,涉及注入代码以在客户端执行更高级的攻击,而不仅仅是注入 HTML 代码。主要有三种类型:
类型 | 描述 |
---|---|
Reflected XSS |
当用户输入经过处理(例如搜索结果或错误消息)显示在页面上时发生。 |
Stored XSS |
当用户输入存储在后端数据库并在检索时显示(例如,帖子或评论)时发生。 |
DOM XSS |
当用户输入直接显示在浏览器中并写入HTML DOM 对象(例如,易受攻击的用户名或页面标题)时发生。 |
#"><img src=/ onerror=alert(document.cookie)>
显示当前用户的cookie
后端服务器
软件
Web Server
Database
Development Framework
Combinations | Components |
---|---|
LAMP | Linux , Apache , MySQL , and PHP . |
WAMP | Windows , Apache , MySQL , and PHP . |
WINS | Windows , IIS , .NET , and SQL Server |
MAMP | macOS , Apache , MySQL , and PHP . |
XAMPP | Cross-Platform, Apache , MySQL , and PHP/PERL . |
组件
Combinations | Components |
---|---|
LAMP | Linux , Apache , MySQL , and PHP . |
WAMP | Windows , Apache , MySQL , and PHP . |
WINS | Windows , IIS , .NET , and SQL Server |
MAMP | macOS , Apache , MySQL , and PHP . |
XAMPP | Cross-Platform, Apache , MySQL , and PHP/PERL . |
硬件
HTTP响应代码:
成功的响应 | |
---|---|
200 OK |
请求已成功 |
重定向消息 | |
301 Moved Permanently |
请求资源的 URL 已永久更改 |
302 Found |
请求资源的 URL 已临时更改 |
客户端错误响应 | |
400 Bad Request |
由于语法无效,服务器无法理解请求 |
401 Unauthorized |
未经身份验证尝试访问页面 |
403 Forbidden |
客户端无权访问内容 |
404 Not Found |
服务器找不到请求的资源 |
405 Method Not Allowed |
请求方法已被服务器所知,但已被禁用,无法使用 |
408 Request Timeout |
某些服务器会在空闲连接上发送此响应,即使客户端之前没有任何请求 |
服务器错误响应 | |
500 Internal Server Error |
服务器遇到了不知道如何处理的情况 |
502 Bad Gateway |
服务器在作为网关获取处理请求所需的响应时,收到了无效响应 |
504 Gateway Timeout |
服务器作为网关,无法及时得到响应 |
- 端口有两种类型:传输控制协议 (TCP)和用户数据报协议 (UDP)
Port(s) | Protocol |
---|---|
20 /21 (TCP) |
FTP |
22 (TCP) |
SSH |
23 (TCP) |
Telnet |
25 (TCP) |
SMTP |
80 (TCP) |
HTTP |
161 (TCP/UDP) |
SNMP |
389 (TCP/UDP) |
LDAP |
443 (TCP) |
SSL /TLS (HTTPS ) |
445 (TCP) |
SMB |
3389 (TCP) |
RDP |
- shell连接
shell类型 | 描述 |
---|---|
Reverse shell |
启动与攻击箱上的“监听器”的连接。 |
Bind shell |
“绑定”到目标主机上的特定端口并等待来自我们的攻击箱的连接。 |
Web shell |
通过 Web 浏览器运行操作系统命令,通常不是交互式或半交互式的。它还可用于运行单个命令(即利用文件上传漏洞并上传PHP 脚本来运行单个命令)。 |
渗透测试流程
- tmux
tmux new -s <名称>
执行命令 ctrl+b+ d
重新连接tmux attach -t <名称>
tmux ls展示所有会话
- nmap
例:nmap 10.129.42.253
运行 Nmap 脚本的语法是`nmap –script comments powered by Disqus