免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。
目录
一、站库分离的概念
站库分离是一种常见的网络安全策略,主要用于增强Web应用程序的安全性。在这种架构中,网站的前端(Web Server)和后端数据库(Database Server)被部署在不同的服务器上,而不是在同一台主机上运行。
站库分离的优势
安全性:通过将Web Server和Database Server分离,即使Web Server受到攻击,攻击者也无法直接访问数据库Server,从而保护了数据库中的敏感信息。
性能优化:站库分离可以使资源分配更加合理,Web Server和Database Server可以根据各自的需求进行独立的硬件配置和优化,从而提高整体系统的性能。
维护方便:由于Web Server和Database Server是独立的,因此在进行系统升级、维护或故障排除时,可以更方便地进行操作,而不影响另一个组件。
实现站库分离的方法
为了实现站库分离,通常会采取以下几种措施:
使用SSL协议或数据加密:确保Web Server和Database Server之间的通信是加密的,防止数据在传输过程中被窃取或篡改。
设置访问控制规则:只允许Web Server上的应用程序通过特定的安全措施来访问数据库Server,例如,禁止在HTTP请求中向Web服务器发送不安全的参数。
使用预编译语句:在数据库操作中使用预编译语句(如MSSQL中的
prepare
语句),可以有效防止SQL注入攻击。二、站库分离与微服务架构的关系
站库分离和微服务架构都是现代软件开发中常用的设计模式,它们在提高系统的安全性、性能和可维护性方面都发挥着重要作用。尽管它们解决的问题域有所不同,但它们之间也存在一些联系和相似之处。
站库分离
站库分离是一种将Web服务器和数据库服务器分离的架构模式。它的主要目的是提高系统的安全性和性能。通过将Web服务器和数据库服务器部署在不同的服务器上,可以防止攻击者在攻破Web服务器后直接访问数据库服务器,从而保护数据库中的敏感信息。此外,站库分离还可以使资源分配更加合理,提高系统的整体性能。
微服务架构
微服务架构是一种将一个大型的、复杂的系统拆分成多个独立、轻量级的服务的架构模式。每个服务负责特定的业务功能,并且可以独立部署、扩展和升级。微服务架构的主要目的是提高系统的可扩展性、可维护性和稳定性。通过将系统拆分成多个独立的服务,可以降低系统的复杂性,提高开发效率,并且可以灵活地应对业务需求的变化。
站库分离与微服务架构的联系
虽然站库分离和微服务架构解决的问题域有所不同,但它们之间也存在一些联系和相似之处:
解耦:站库分离通过将Web服务器和数据库服务器分离,实现了前后端的解耦。而微服务架构通过将系统拆分成多个独立的服务,实现了业务逻辑的解耦。两者都强调了解耦的重要性,通过解耦可以提高系统的可维护性和可扩展性。
独立部署:站库分离使得Web服务器和数据库服务器可以独立部署,提高了系统的灵活性和可扩展性。而微服务架构使得每个服务都可以独立部署,进一步提高了系统的灵活性和可扩展性。
安全性:站库分离通过将Web服务器和数据库服务器分离,提高了系统的安全性。而微服务架构通过将系统拆分成多个独立的服务,可以降低单点故障的风险,提高系统的安全性。
三、站库分离在高并发场景下的优势
站库分离是一种将Web服务器和数据库服务器分离的架构模式。在高并发场景下,站库分离可以带来以下几个优势:
1. 提高系统性能
在高并发场景下,大量的请求会同时访问数据库,导致数据库成为系统的瓶颈。通过站库分离,可以将Web服务器和数据库服务器部署在不同的服务器上,从而减轻数据库服务器的负担,提高系统的整体性能。
2. 增强系统扩展性
站库分离使得Web服务器和数据库服务器可以独立扩展。当系统面临高并发请求时,可以通过增加Web服务器的数量来提高系统的并发处理能力,而不需要对数据库服务器进行大规模的升级。同样,当数据库服务器的负载过高时,也可以通过增加数据库服务器的数量来提高数据库的并发处理能力。
3. 提高系统安全性
在高并发场景下,系统的安全性尤为重要。站库分离可以防止攻击者在攻破Web服务器后直接访问数据库服务器,从而保护数据库中的敏感信息。此外,站库分离还可以通过设置防火墙规则等方式,进一步提高系统的安全性。
4. 便于故障隔离和恢复
在高并发场景下,系统的任何一个组件出现问题都会对整个系统造成影响。站库分离可以将Web服务器和数据库服务器隔离开来,使得当其中一个组件出现问题时,另一个组件仍然可以正常工作。这样可以减少系统的停机时间,提高系统的可用性。
5. 便于管理和维护
站库分离使得Web服务器和数据库服务器可以独立管理和维护。当系统面临高并发请求时,运维人员可以针对不同的组件采取不同的优化措施,从而提高系统的整体性能。此外,站库分离还可以使得开发人员和运维人员之间的职责更加明确,提高团队的工作效率。
四、站库分离在电商系统中的应用案例
站库分离是一种常见的系统架构模式,特别是在电商系统中,这种模式被广泛应用以提高系统的性能、安全性和可扩展性。以下是一些具体的案例和应用场景:
1. 新蜂商城(Newbee Mall)
新蜂商城是一个典型的前后端分离的电商项目,该项目采用了站库分离的架构模式。具体来说,该项目分为以下几个部分:
- 商城后端接口:使用Spring Boot 2.X框架开发,负责处理业务逻辑和与数据库的交互。
- 商城前端:使用Vue.js 及相关技术栈开发,负责展示用户界面和处理用户交互。
- 商城后台管理系统:同样使用Vue.js 开发,负责管理商品、订单、会员等信息。
通过站库分离,新蜂商城实现了前后端的解耦,提高了系统的灵活性和可维护性。
2. 青橙商城
青橙商城是一个基于Java技术开发的电商项目,该项目也采用了站库分离的架构模式。具体来说,该项目使用了Spring Boot框架实现了前后端分离的架构。通过这种方式,青橙商城实现了用户浏览商品、添加购物车、确认订单、支付等功能,并且支持高并发访问。
3. javashop 升级版
这是一个基于开源项目javashop的升级版B2C大型分布式电商项目。该项目采用了站库分离的架构模式,并且集成了多种技术,如SSO单点登录、第三方支付平台对接、Solr搜索引擎集成、Redis集成开发等。通过站库分离,该项目实现了各个模块的独立部署和扩展,提高了系统的性能和可扩展性。
4. 大型电商平台的供应商管理
虽然这个案例主要介绍了SRM(供应商关系管理)系统在电商行业中的应用,但也可以看出,大型电商平台通常会采用站库分离的架构模式来管理供应商信息。通过这种方式,电商平台可以实现对供应商信息的统一管理,提高管理效率,降低管理成本。
五、站库分离与主从复制的区别
站库分离和主从复制是两种不同的数据库架构设计策略,它们各自有不同的应用场景和优缺点。以下是它们的主要区别:
1. 定义
- 站库分离:指的是将应用程序(站点)和数据库(库)部署在不同的服务器上。这种架构可以提高系统的可扩展性和安全性,因为应用程序和数据库之间的通信是通过网络进行的,而不是在同一台服务器上直接访问。
- 主从复制:指的是将一个数据库(主库)的数据复制到另一个或多个数据库(从库)上。这种架构可以提高系统的可用性和性能,因为读操作可以分布在多个从库上,而写操作仍然由主库处理。
2. 目的
- 站库分离:主要目的是为了提高系统的可扩展性和安全性。通过将应用程序和数据库分离,可以更容易地对它们进行独立的管理和优化。
- 主从复制:主要目的是为了提高系统的可用性和性能。通过将数据复制到多个从库上,可以实现读写分离,从而减轻主库的负载。
3. 实现方式
- 站库分离:通常通过修改应用程序的数据库连接配置来实现。应用程序需要通过网络访问数据库,而不是直接访问本地数据库。
- 主从复制:通常通过数据库自身的复制功能来实现。例如,MySQL提供了主从复制的功能,可以通过配置主库和从库之间的复制关系来实现数据的同步。
4. 优缺点
- 站库分离:
- 优点:提高系统的可扩展性和安全性;可以独立地管理和优化应用程序和数据库。
- 缺点:增加了网络通信的开销;需要额外的硬件资源。
- 主从复制:
- 优点:提高系统的可用性和性能;可以实现读写分离,从而减轻主库的负载。
- 缺点:增加了数据同步的复杂性;需要额外的硬件资源。
5. 应用场景
- 站库分离:适用于需要提高系统可扩展性和安全性的场景,例如大型网站和企业级应用。
- 主从复制:适用于需要提高系统可用性和性能的场景,例如高并发的在线交易系统和实时数据分析系统。
六、站库分离渗透思路技巧总结
对站库分离类型站点通常可以有两个渗透入口点:
1.web 网站
2.数据库
渗透思路其实也是比较常规。但是这里如果两个入口点无非两种路径。
从 web 网站打入进而打站库分离的数据库,内网渗透
从数据库打入进而打站库分离的 web 网站,内网渗透
根据不同的路径定制不同的渗透测试方案,下面记录一下流程和容易遇到的问题。
一、从 web 入口渗透
从 web 入口通常就是通过网站的各种漏洞来 getshell,比如文件上传、命令执行、代码执行、还有 SQL 注入写入一句话(into outfile、日志备份等)。
在获得 web 权限或者有诸如文件读取等漏洞时,我们还读数据库配置文件、对数据库内容分析、查找数据库备份,进而对数据库目标 ip 进行渗透,以便后续操作。
二、从数据库入口渗透
但是这里要说主要是外网暴露的数据库入口点弱口令;web 网站 SQL 注入。
从数据库入口渗透,同样主要是为了获取更大的权限,或者扩展我们的渗透成果,比如从数据库里可以得到一些密码信息,用户名等,在后续的内网渗透中可以很有效的帮助我们。
站点是站库分离的,数据库和 web 不在同一台服务器上,这时候不能写入一句话木马通过 web 去连,因为路径没有用。如果是从 web 端找到的 SQL 注入,那么可以通过以下这些方式去做信息收集、获取权限。
示例:
1. 从Web入口渗透
1.1 SQL注入
通过Web端的SQL注入漏洞,可以获取数据库的敏感信息。例如,可以使用以下SQL语句来获取数据库的连接情况:
SELECT * FROM information_schema.PROCESSLIST;
通过查询
information_schema.PROCESSLIST
表,可以查看当前MySQL的连接情况,从而获取Web端的IP地址。1.2 文件上传和文件包含
利用文件上传和文件包含漏洞,可以上传恶意脚本文件并执行,从而获取Web服务器的控制权。例如,可以上传一个PHP木马文件,然后通过文件包含漏洞来执行该文件。
2. 从数据库入口渗透
2.1 弱口令
如果数据库暴露在外网并且使用了弱口令,攻击者可以通过暴力破解的方式获取数据库的控制权。例如,可以使用以下SQL语句来获取数据库服务器的主机名:
SELECT @@hostname;
通过获取数据库服务器的主机名,可以进一步判断是否为站库分离2。
2.2 存储过程执行命令
在MSSQL中,可以通过存储过程执行系统命令。例如,可以使用以下SQL语句来执行系统命令:
EXEC xp_cmdshell 'ping 192.168.1.1';
通过执行系统命令,可以尝试直接提升权限后渗透其他主机1。
3. 判断是否站库分离
3.1 MySQL
在MySQL中,可以通过查询
information_schema.PROCESSLIST
表来判断是否为站库分离。例如,可以使用以下SQL语句来查询:SELECT * FROM information_schema.PROCESSLIST;
如果数据库IP地址不是
localhost
、127.0.0.1
或当前主机内网IP,则说明为站库分离。3.2 MSSQL
在MSSQL中,可以通过内置函数来判断是否为站库分离。例如,可以使用以下SQL语句来查询:
SELECT @@hostname AS ServerName, host_name() AS ClientName;
如果客户端与服务端返回的主机名不一样,则说明为站库分离。
4. 获取敏感信息
4.1 读取文件
在MySQL中,如果没有
secure_file_priv
参数的限制,可以使用load_file()
函数来读取文件内容。例如,可以使用以下SQL语句来读取文件:SELECT load_file('C:/test.txt');
通过读取文件,可以获取数据库所在服务器的敏感信息。
4.2 数据库备份
通过查找数据库备份文件,可以获取数据库的敏感信息。例如,可以使用以下SQL语句来查找备份文件:
SHOW VARIABLES LIKE 'secure_file_priv';
通过查找备份文件,可以获取数据库的敏感信息。