【安全】Web渗透测试(全流程)

article/2025/10/2 6:16:39

1 信息收集

1.1 域名、IP、端口

  • 域名信息查询:信息可用于后续渗透

  • IP信息查询:确认域名对应IP,确认IP是否真实,确认通信是否正常

  • 端口信息查询:NMap扫描,确认开放端口

如果不会用Nmap,看这里:NMAP 基础教程(功能介绍,安装,使用)

发现:一共开放两个端口,80为web访问端口,3389为windows远程登陆端口,嘿嘿嘿,试一下

发现:是Windows Server 2003系统,OK,到此为止。

1.2 指纹识别

指纹?其实就是网站的信息。比如通过可以访问的资源,如网站首页,查看源代码:

  • 看看是否存在文件遍历的漏洞(如图片路径,再通过../遍历文件)
  • 是否使用了存在漏洞的框架(如果没有现成的就自己挖)

2 漏洞扫描

2.1 主机扫描

  • Nessus

如果不会用Nessus,看这里:【工具-Nessus】Nessus的安装与使用

经典主机漏扫工具,看看有没有CVE漏洞:

2.2 Web扫描

  • AWVS(Acunetix | Website Security Scanner)扫描器

如果不会用AWVS,看这里:【工具-AWVS】AWVS安装与使用

PS:扫描器可能会对网站构成伤害,小心谨慎使用。

3 渗透测试

涉及工具的学习:

DVWA:【工具-BurpSuite】BurpSuite专业版 安装和使用

Burp Suite:【工具-DVWA】DVWA的安装和使用

3.1 弱口令漏洞

  • 漏洞描述

目标网站管理入口(或数据库等组件的外部连接)使用了容易被猜测的简单字符口令、或者是默认系统账号口令。

  • 渗透测试
  1. 如果不存在验证码,则直接使用相对应的弱口令字典使用burpsuite 进行爆破
  2. 如果存在验证码,则看验证码是否存在绕过、以及看验证码是否容易识别

示例:DVWA渗透系列一:Brute Force;DVWA渗透系列六:Insecure CAPTCHA

  • 风险评级:高风险
  • 安全建议
  1. 默认口令以及修改口令都应保证复杂度,比如:大小写字母与数字或特殊字符的组合,口令长度不小于8位等
  2. 定期检查和更换网站管理口令

3.2 文件下载(目录浏览)漏洞

  • 漏洞描述

一些网站由于业务需求,可能提供文件查看或下载的功能,如果对用户查看或下载的文件不做限制,则恶意用户就能够查看或下载任意的文件,可以是源代码文件、敏感文件等。

  • 渗透测试
  1. 查找可能存在文件包含的漏洞点,比如js,css等页面代码路径
  2. 看看有没有文件上传访问的功能
  3. 采用../来测试能否夸目录访问文件

示例:DVWA渗透系列四:File Inclusion

  • 风险评级:高风险
  • 安全建议
  1. 采用白名单机制限制服务器目录的访问,以及可以访问的文件类型(小心被绕过)
  2. 过滤【./】等特殊字符
  3. 采用文件流的访问返回上传文件(如用户头像),不要通过真实的网站路径。

示例:tomcat,默认关闭路径浏览的功能:

<param-name>listings</param-name>
<param-value>false</param-value>

3.3 任意文件上传漏洞

  • 漏洞描述

目标网站允许用户向网站直接上传文件,但未对所上传文件的类型和内容进行严格的过滤。

  • 渗透测试
  1. 收集网站信息,判断使用的语言(PHP,ASP,JSP)
  2. 过滤规则绕过方法:文件上传绕过技巧
  • 风险评级:高风险
  • 安全建议
  1. 对上传文件做有效文件类型判断,采用白名单控制的方法,开放只允许上传的文件型式;
  2. 文件类型判断,应对上传文件的后缀、文件头、图片类的预览图等做检测来判断文件类型,同时注意重命名(Md5加密)上传文件的文件名避免攻击者利用WEB服务的缺陷构造畸形文件名实现攻击目的;
  3. 禁止上传目录有执行权限;
  4. 使用随机数改写文件名和文件路径,使得用户不能轻易访问自己上传的文件。

3.4 命令注入漏洞

  • 漏洞描述

目标网站未对用户输入的字符进行特殊字符过滤或合法性校验,允许用户输入特殊语句,导致各种调用系统命令的web应用,会被攻击者通过命令拼接、绕过黑名单等方式,在服务端运行恶意的系统命令。

  • 渗透测试

示例:DVWA渗透系列二:Command Injection

  • 风险评级:高风险
  • 安全建议
  1. 拒绝使用拼接语句的方式进行参数传递;
  2. 尽量使用白名单的方式(首选方式);
  3. 过滤危险方法、特殊字符,如:【|】【&】【;】【'】【"】等

3.5 SQL注入漏洞

  • 漏洞描述

目标网站未对用户输入的字符进行特殊字符过滤或合法性校验,允许用户输入特殊语句查询后台数据库相关信息

  • 渗透测试
  1. 手动测试,判断是否存在SQL注入,判断是字符型还是数字型,是否需要盲注
  2. 工具测试,使用sqlmap等工具进行辅助测试

示例:DVWA渗透系列七:SQL Injection;DVWA渗透系列八:SQL Injection(Blind)

  • 风险评级:高风险
  • 安全建议
  1. 防范SQL注入攻击的最佳方式就是将查询的逻辑与其数据分隔,如Java的预处理,PHP的PDO
  2. 拒绝使用拼接SQL的方式

3.6 跨站脚本漏洞

  • 漏洞描述

当应用程序的网页中包含不受信任的、未经恰当验证或转义的数据时,或者使用可以创建 HTML或JavaScript 的浏览器 API 更新现有的网页时,就会出现 XSS 缺陷。XSS 让攻击者能够在受害者的浏览器中执行脚本,并劫持用户会话、破坏网站或将用户重定向到恶意站点。

三种XSS漏洞:

  1. 存储型:用户输入的信息被持久化,并能够在页面显示的功能,都可能存在存储型XSS,例如用户留言、个人信息修改等。
  2. 反射型:URL参数需要在页面显示的功能都可能存在反射型跨站脚本攻击,例如站内搜索、查询功能。
  3. DOM型:涉及DOM对象的页面程序,包括:document.URL、document.location、document.referrer、window.location等
  • 渗透测试

示例:

  1. 存储型:DVWA渗透系列十二:XSS(Stored)
  2. 反射型:DVWA渗透系列十一:XSS(Reflect)
  3. DOM型:DVWA渗透系列十:XSS(DOM)
  • 风险评级:高风险
  • 安全建议
  1. 不信任用户提交的任何内容,对用户输入的内容,在后台都需要进行长度检查,并且对【<】【>】【"】【'】【&】等字符做过滤
  2. 任何内容返回到页面显示之前都必须加以html编码,即将【<】【>】【"】【'】【&】进行转义。

3.7 跨站请求伪造漏洞

  • 漏洞描述

CSRF,全称为Cross-Site Request Forgery,跨站请求伪造,是一种网络攻击方式,它可以在用户毫不知情的情况下,以用户的名义伪造请求发送给被攻击站点,从而在未授权的情况下进行权限保护内的操作,如修改密码,转账等。

  • 渗透测试

示例:DVWA渗透系列三:CSRF

  • 风险评级:中风险(如果相关业务极其重要,则为高风险)
  • 安全建议
  1. 使用一次性令牌:用户登录后产生随机token并赋值给页面中的某个Hidden标签,提交表单时候,同时提交这个Hidden标签并验证,验证后重新产生新的token,并赋值给hidden标签;
  2. 适当场景添加验证码输入:每次的用户提交都需要用户在表单中填写一个图片上的随机字符串;
  3. 请求头Referer效验,url请求是否前部匹配Http(s)://ServerHost
  4. 关键信息输入确认提交信息的用户身份是否合法,比如修改密码一定要提供原密码输入
  5. 用户自身可以通过在浏览其它站点前登出站点或者在浏览器会话结束后清理浏览器的cookie;

3.8 内部后台地址暴露

  • 漏洞描述

一些仅被内部访问的地址,对外部暴露了,如:管理员登陆页面;系统监控页面;API接口描述页面等,这些会导致信息泄露,后台登陆等地址还可能被爆破。

  • 渗透测试
  1. 通过常用的地址进行探测,如login.html,manager.html,api.html等;
  2. 可以借用burpsuite和常规页面地址字典,进行扫描探测
  • 风险评级:中风险
  • 安全建议
  1. 禁止外网访问后台地址;
  2. 使用非常规路径(如对md5加密)。

3.9 信息泄露漏洞

  • 漏洞描述
  1. 备份信息泄露:目标网站未及时删除编辑器或者人员在编辑文件时,产生的临时文件,或者相关备份信息未及时删除导致信息泄露。
  2. 测试页面信息泄露:测试界面未及时删除,导致测试界面暴露,被他人访问。
  3. 源码信息泄露:目标网站文件访问控制设置不当,WEB服务器开启源码下载功能,允许用户访问网站源码。
  4. 错误信息泄露:目标网站WEB程序和服务器未屏蔽错误信息回显,页面含有CGI处理错误的代码级别的详细信息,例如SQL语句执行错误原因,PHP的错误行数等。
  5. 接口信息泄露:目标网站接口访问控制不严,导致网站内部敏感信息泄露。
  • 渗透测试
  1. 备份信息泄露、测试页面信息泄露、源码信息泄露,测试方法:使用字典,爆破相关目录,看是否存在相关敏感文件

  2. 错误信息泄露,测试方法:发送畸形的数据报文、非正常的报文进行探测,看是否对错误参数处理妥当。

  3. 接口信息泄露漏洞,测试方法:使用爬虫或者扫描器爬取获取接口相关信息,看目标网站对接口权限是否合理

  • 风险评级:一般为中风险,如果源码大量泄漏或大量客户敏感信息泄露。
  • 安全建议
  1. 备份信息泄露漏洞:删除相关备份信息,做好权限控制
  2. 测试页面信息泄露漏洞:删除相关测试界面,做好权限控制
  3. 源码信息泄露漏洞:做好权限控制
  4. 错误信息泄露漏洞:将错误信息对用户透明化,在CGI处理错误后可以返回友好的提示语以及返回码。但是不可以提示用户出错的代码级别的详细原因
  5. 接口信息泄露漏洞:对接口访问权限严格控制

3.10 失效的身份认证

  • 漏洞描述

通常,通过错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、密钥或会话令牌, 或者利用其它开发缺陷来暂时性或永久性冒充其他用户的身份。

  • 渗透测试
  1. 在登陆前后观察,前端提交信息中,随机变化的数据,总有与当前已登陆用户进行绑定的会话唯一标识,常见如cookie
  2. 一般现在网站没有那种简单可破解的标识,但是如果是跨站认证,单点登录场景中,可能为了开发方便而简化了身份认证

示例:DVWA渗透系列九:Weak Session IDs

  • 风险评级:高风险
  • 安全建议
  1. 使用强身份识别,不使用简单弱加密方式进行身份识别;
  2. 服务器端使用安全的会话管理器,在登录后生成高度复杂的新随机会话ID。会话ID不能在URL中,可以安全地存储,在登出、闲置超时后使其失效。

3.11 失效的访问控制

  • 漏洞描述

未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数据,例如:访问其他用户的帐户、查看敏感文件、修改其他用户的数据、更改访问权限等。

  • 渗透测试
  1. 登入后,通过burpsuite 抓取相关url 链接,获取到url 链接之后,在另一个浏览器打开相关链接,看能够通过另一个未登入的浏览器直接访问该功能点。
  2. 使用A用户登陆,然后在另一个浏览器使用B用户登陆,使用B访问A独有的功能,看能否访问。
  • 风险评级:高风险
  • 安全建议
  1. 除公有资源外,默认情况下拒绝访问非本人所有的私有资源;
  2. 对API和控制器的访问进行速率限制,以最大限度地降低自动化攻击工具的危害;
  3. 当用户注销后,服务器上的Cookie,JWT等令牌应失效;
  4. 对每一个业务请求,都进行权限校验。

3.12 安全配置错误

  • 漏洞描述

应用程序缺少适当的安全加固,或者云服务的权限配置错误。

  1. 应用程序启用或安装了不必要的功能(例如:不必要的端口、服务、网页、帐户或权限)。
  2. 默认帐户的密码仍然可用且没有更改。
  3. 错误处理机制向用户披露堆栈跟踪或其他大量错误信息。
  4. 对于更新的系统,禁用或不安全地配置最新的安全功能。
  5. 应用程序服务器、应用程序框架(如:Struts、Spring、ASP.NET)、库文件、数据库等没有进行相关安全配置。
  • 渗透测试
  1. 先对应用指纹等进行信息搜集,然后针对搜集的信息,看相关应用默认配置是否有更改,是否有加固过;端口开放情况,是否开放了多余的端口;
  • 风险评级:中风险
  • 安全建议

搭建最小化平台,该平台不包含任何不必要的功能、组件、文档和示例。移除或不安装不适用的功能和框架。 在所有环境中按照标准的加固流程进行正确安全配置。

3.13 使用含有已知漏洞的组件

  • 漏洞描述

使用了不再支持或者过时的组件。这包括:OS、Web服务器、应用程序服务器、数据库管理系统(DBMS)、应用程序、API和所有的组件、运行环境和库。

  • 渗透测试
  1. 根据前期信息搜集的信息,查看相关组件的版本,看是否使用了不在支持或者过时的组件。一般来说,信息搜集,可通过http返回头、相关错误信息、应用指纹、端口探测(Nmap)等手段搜集。
  2. Nmap等工具也可以用于获取操作系统版本信息
  3. 通过CVE,CNVD等平台可以获取当前组件版本是否存在漏洞
  • 风险评级:按照存在漏洞的组件的安全风险值判定当前风险。
  • 安全建议
  1. 移除不使用的依赖、不需要的功能、组件、文件和文档;
  2. 仅从官方渠道安全的获取组件(尽量保证是最新版本),并使用签名机制来降低组件被篡改或加入恶意漏洞的风险;
  3. 监控那些不再维护或者不发布安全补丁的库和组件。如果不能打补丁,可以考虑部署虚拟补丁来监控、检测或保护。

3.14 业务逻辑漏洞

见:Web应用常见业务逻辑漏洞

 

 

 


爱家人,爱生活,爱设计,爱编程,拥抱精彩人生!


http://chatgpt.dhexx.cn/article/mfdH8Th2.shtml

相关文章

WEB渗透之数据库安全——MySQL

意识薄弱-弱口令爆破 安全机制-特定安全漏洞 0x00 MySQL默认配置root用户禁止外连 就算爆破出正确用户名密码也无法登录&#xff0c;如果爆破出非root用户账号密码&#xff0c;价值也不大 所以如果目标网站部署了phpMyAdmin,找到phpMyAdmin目录&#xff08;如果使用phpStudy…

web安全渗透测试

通过浏览器访问http://靶机服务器IP/1&#xff0c;对该页面进行渗透测试, 找到flag格式&#xff1a;flag&#xff5b;Xxxx123&#xff5d;&#xff0c;括号中的内容作为flag值并提交&#xff1b;&#xff08;2分&#xff09;通过浏览器访问http://靶机服务器IP/2&#xff0c;对…

菜鸟浅谈——web安全测试

本文仅为小白了解安全测试提供帮助 一&#xff1a;安全测试注意事项 1&#xff09;要注意白帽子与黑客之间的区别 2&#xff09;在挖漏洞挣外快时&#xff0c;注意不要使用安全扫描或暴力破解软件对上线网站进行扫描或攻击。 不要对上线网站造成破坏&#xff0c;不要去获取网…

WEB安全_基础入门_系统及数据库,明确安全测试思路(演示只需要熟悉流程)

目录 前言一、操作系统层面背景知识点1.识别操作系统的常见方法方式一&#xff1a;改变大小写看操作系统的类型方式二&#xff1a;TTL判断方式三&#xff1a;nmap端口判断 2.简要两者区别及识别意义3.操作系统层面漏洞类型对应意义SQL注入漏洞跨站脚本漏洞弱口令漏洞HTTP报头追…

web平台安全测试方案

平台安全测试方案 1、 测试目的 能尽可能发现当前系统存在的安全隐患&#xff0c;在漏洞报告提供出有价值的建议通过报告修复漏洞后&#xff0c;能减少系统出现严重的安全事故 2、测试对象 Web应用程序服务器操作系统 3、测试工具及环境 AppScan&#xff08;Windows10&am…

什么是web安全测试

1.1什么是web安全测试&#xff1f; Web安全测试就是要提供证据表明&#xff0c;在面对敌意和恶意输入的时候&#xff0c;web系统应用仍然能够充分地满足它的需求 1.2为什么进行Web安全测试 2005年06月&#xff0c;CardSystems&#xff0c;黑客恶意侵入了它的电脑系统&#x…

web安全测试内容

一. 首先你得了解Web Web分为好几层&#xff0c;一图胜千言&#xff1a; 事实是这样的&#xff1a; 如果你不了解这些研究对象是不可能搞好安全研究的。 这样看来&#xff0c;Web有八层&#xff08;如果把浏览器也算进去&#xff0c;就九层啦&#xff0c;九阳神功……&#xff…

解决报错RuntimeError: set_sizes_and_strides is not allowed on a Tensor created from .data or .detach().

完整报错信息如下 RuntimeError: set_sizes_and_strides is not allowed on a Tensor created from .data or .detach(). If your intent is to change the metadata of a Tensor (such as sizes / strides / storage / storage_offset) without autograd tracking the change…

基于keras的卷积神经网络(CNN)

1 前言 本文以MNIST手写数字分类为例&#xff0c;讲解使用一维卷积和二维卷积实现 CNN 模型。关于 MNIST 数据集的说明&#xff0c;见使用TensorFlow实现MNIST数据集分类。实验中主要用到 Conv1D 层、Conv2D 层、MaxPooling1D 层和 MaxPooling2D 层&#xff0c;其参数说明如下…

Grad strides do not match bucket view strides.This may indicate grad was not created according to th

家人们来看看是不是报这个 warning: [W reducer.cpp:283] Warning: Grad strides do not match bucket view strides. This may indicate grad was not created according to the gradient layout contract, or that the params strides changed since DDP was constructed.…

Python多维数组跨度strides(学习笔记)

Python多维数组跨度 今天就来搞明白有关于多维数组的跨度 strides的知识 先构建一个四位数组&#xff1a; arrnp.arange(1,25.0).reshape(2,2,2,3) print(轴(维度):,arr.ndim) arr分析&#xff1a;arange(1,25.0)是1~24共24个数字&#xff0c;注意到25.0是float类型 再来看看…

RuntimeError: sparse tensors do not have strides

这是一个可以复现的问题。 归根结底在于 torch不支持Sparse与Sparse的矩阵乘法(mm)。 也不支持Dense 与 Sparse的矩阵乘法。 只支持Sparse与Dense的矩阵乘法。 torch.mm是消边的矩阵乘法&#xff0c;mm matrix multiply。 而torch.mul是同形矩阵的element-wise点乘。 所谓s…

Warning: Grad strides do not match bucket view strides pytorch利用DDP报错

遇到报错&#xff1a; [W reducer.cpp:362] Warning: Grad strides do not match bucket view strides. This may indicate grad was not created according to the gradient layout contract, or that the param’s strides changed since DDP was constructed. This is not a…

Python ndarray.strides用法

用法 ndarray.strides: 跨越数组各个维度所需要经过的字节数元组 a np.array([[10,2,4],[3, 4,11]],dtypenp.int32) print(a.strides) #(12,4) 12表示在内存中a[n, 0]到a[n1, 0]跨过多少byte; 4表示在内存中a[n, 0]到a[n, 1]跨过多少byte# 查看数组a所有元素占用内存大小&…

神经网络:CNN中的filter,kernel_size,strides,padding对输出形状的影响

输入数据在经过卷积层后&#xff0c;形状一般会发生改变&#xff0c;而形状的变化往往与以下四个超参数有关。 1&#xff0c;filter&#xff08;out_channel&#xff09; 该超参数控制着输入数据经过卷积层中需要与几个卷积核进行运算&#xff0c;而输入数据与每个卷积核进行…

tf.keras.layers.Conv2D用法总结

概述 tf.keras.layers.Conv2D()函数用于描述卷积层。 用法 tf.keras.layers.Conv2D(filters, kernel_size,strides(1, 1), paddingvalid, data_formatNone,dilation_rate(1, 1), activationNone )1.filter&#xff1a;卷积核的个数 2.kenel_size&#xff1a;卷积核尺寸&…

CNN中stride(步幅)和padding(填充)的详细理解

步幅&#xff1a;卷积核经过输入特征图的采样间隔 填充&#xff1a;在输入特征图的每一边添加一定数目的行列&#xff0c;使得输出的特征图的长、宽 输入的特征图的长、宽 两个参数的核心&#xff1a; 设置步幅的目的&#xff1a;希望减小输入参数的数目&#xff0c;减少计…

java输出(java输出语句快捷键)

java最简单的输入输出 java输出语句怎么写 去百度文库&#xff0c;查看完整内容> 内容来自用户:白岸海歌 System.out.print ——标准输出流 Java的流类&#xff0c;主要是&#xff1a;输入流类InputStream输出流类OutputStream Java系统预先定义好3个流对象&#xff0c;静态…

Java程序入口+输出语句+数据类型

一&#xff08;Java程序入口&#xff09;&#xff1a;要想执行一个java程序&#xff0c;就必须有一个程序入口&#xff0c;且该入口为固定格式&#xff1a;public static void main&#xff08;String[ ] args&#xff09;{}。注意&#xff1a;是main而不是mian&#xff0c;Str…

JAVA 循环控制语句以及输入输出

JAVA 循环控制语句以及输入输出 顺序结构分支结构if 语句switch 语句 循环结构while 循环for 循环do while 循环 输入输出输出到控制台从键盘输入 JAVA 里的程序控制语句主要分为顺序结构、分支结构&#xff08;选择&#xff09;和循环结构。 顺序结构 顺序结构比较简单&#x…