渗透测试完全初学者pdf_渗透测试完

hacker|
240

如何写好一份渗透测试报告

当你连续奋战了好几天,终于合上了笔记本,想要出去透透风时,一个熟悉的问句传来:“你好,请问什么时候可以交付报告?”

有成千上万的书籍讲解什么是信息安全,什么是渗透测试,也有数不清的培训课程视频。但是,我敢打赌,在这些材料中,只有不到10%是在讲写报告的事情。在一个完整的渗透测试过程中,有将近一半的时间都用在了编写报告上,这听起来很让人吃惊,但是也并不奇怪。

教会某人写报告不像教会某人制作一个完美的缓冲区溢出那么有意思,大部分的渗透测试人员情愿复习19次TCP数据包结构的工作原理,也不愿意写一份报告。

不管我们的渗透测试水平多么高,想要把一个很深的技术点解释的很通俗易懂,即使是完全不懂安全的人也可以理解,这是一件异常艰难的挑战。不但得学会简单明了的解释渗透测试的结果,还得控制好时间。这样做的好处很多,关系到客户会不会不断的采购你的服务。有一次,我开车到350英里以外的一家客户那里做售前,当面重新解释了渗透测试报告的本内容;如果能把测试报告写的简单明了,我就不用跑这么一趟,相当于节省了一整天的时间和一整箱汽油。

举个例子:

一个模糊不清的解释:“SSH版本应该被禁用,因为它含有高危漏洞,可能允许攻击者在网络上拦截和解密通信,虽然攻击者控制网络的风险很低,这减少了严重性。”

清楚的解释:“建议在这些设备上禁用SSH,如果不这样做,就有可能允许攻击者在当地网络解密和拦截通讯。”

为什么渗透测试报告如此重要?

请谨记:渗透测试是一个科学的过程,像所有科学流程一样,应该是独立可重复的。当客户不满意测试结果时,他有权要求另外一名测试人员进行复现。如果第一个测试人员没有在报告中详细说明是如何得出结论的话,第二个测试人员将会不知从何入手,得出的结论也极有可能不一样。更糟糕的是,可能会有潜在漏洞暴露于外部没有被发现。

举个例子:

模糊不清的描述:“我使用端口扫描器检测到了一个开放的TCP端口。“

清晰明了的描述:“我使用Nmap 5.50,对一段端口进行SYN扫描,发现了一个开放的TCP端口。

命令是:nmap –sS –p 7000-8000“

报告是实实在在的测试过程的输出,且是真实测试结果的证据。对客户高层管理人员(批准用于测试的资金的人)可能对报告的内容没有什么兴趣,但这份报告是他们唯一一份证明测试费用的证据。渗透测试不像其他类型的合同项目。合同结束了,没有搭建新的系统,也没有往应用程序添加新的代码。没有报告,很难向别人解释他们刚买的什么东西。

报告给谁看?

至少有三种类型的人会阅读你的报告:高级管理人员,IT管理和IT技术人员。

高级管理人员根本不关心,或者压根不明白它的意思,如果支付服务器使用SSL v2加密连接。他们想知道的答案是“我们现在到底安不安全?”

IT管理对该组织的整体安全性感兴趣,同时也希望确保其特定的部门在测试过程中都没有发现任何重大问题。我记得给三个IT经理一份特别详细的报告。阅读这份报告后有两个人脸色变得苍白,而第三个人笑着说“太好了,没有数据库的安全问题”。

IT人员是负责修复测试过程中发现的问题的人。他们想知道三件事:受影响系统的名称,该漏洞的严重程度以及如何解决它。他们也希望这些信息以一种清晰而且有组织的方式呈现给他们。最好的方法是将这些信息以资产和严重程度来进行划分。例如“服务器A”存在“漏洞X,Y和Z,漏洞Y是最关键的。这样IT人员就可以快速的找到问题的关键,及时修复。

当然,你可以问你的客户是否愿意对漏洞分组。毕竟测试是为了他们的利益,他们是付钱的人!一些客户喜欢有个详细说明每个漏洞的页面,并表明受漏洞影响的资产有哪些。

虽然我已经提到了渗透测试报告三种最常见的读者,但这并不是一个详尽的清单。一旦报告交付给客户,取决于他们用它干什么。它可能最终被提交给审计人员作为审计的证据。它可以通过销售团队呈现给潜在客户。“任何人都可以说自己的产品是安全的,但他们可以证明这一点?我们可以看看这里的渗透测试报告。“

报告甚至可能最终共享给整个组织。这听起来很疯狂,但它确实发生过。我执行一次社会工程学测试,其结果低于客户的期望。被触怒的CEO将报告传递给整个组织,作为提高防范社会工程攻击意识的一种方式。更有趣的是,几周后当我访问同一个公司做一些安全意识的培训。我在自我介绍时说,我就是之前那个负责社工测试的人。愤怒的目光,嘲讽的语气,埋怨我给他们所有人带来多少麻烦。我的内心毫无波动,答道:“把密码给我总比给真正的黑客好。”

报告应该包含什么?

有时候你会很幸运的看到,客户在项目计划之初就表明他们想要的报告内容。甚至有一些更为细小的要求,比如,字体大小和线间距等。但是这只是少数,大部分客户还是不知道最终要什么结果,所以下面给出一般报告的撰写程序。

封面

封面是报告的第一面窗户,封面页上包含的细节可以不那么明显。但是测试公司的名称、标志以及客户的名称应该突出显示。诸如“内部网络扫描”或“DMZ测试”测试标题也应该在那里,对于相同的客户执行多个测试时,可以避免混淆。测试时间也要写上,随着时间的推移,用户可以清楚的得知他们的安全状况是否得到了改善。另外该封面还应包含文档的密级,并与客户商定如何保密好这份商业上的敏感文件。

内容提要

我见过一些简直像短篇小说一样的内容提要,其实这部分一般要限制在一页纸以内。不要提及任何特定的工具、技术,因为客户根本不在乎,他们只需要知道的是你做了什么,发现了什么,接下来要发生什么,为什么,执行摘要的最后一行应该是一个结论,即明确指出是该系统是安全还是不安全。

举个例子:

一个糟糕的总结:“总之,我们发现一些地方的安全策略运作良好,但有些地方并未遵从。这导致了一定风险,但并不是致命风险。”

一个优秀的总结:“总之,我们发现了某些地方没有遵守安全策略,这给组织带来了一个风险,因此我们必须声明该系统是不安全的。”

漏洞总结

将漏洞列表放在一个页面上,这样,IT经理便可以一目了然的知道接下来要做什么。具体怎样表现出来,形式多样,你可以使用花哨的图形(像表格或图表),只要清晰明了就行。漏洞可以按类别(例如软件问题,网络设备配置,密码策略)进行分组,严重程度或CVSS评分——方法很多,只要工作做得好,很容易理解。

测试团队的详细信息

记录测试过程中所涉及的每一个测试人员的名字,这是一个基本的礼节问题,让客户知道是谁在测试他们的网络,并提供联系方式,以便后续报告中问题讨论。一些客户和测试公司也喜欢依据测试的内容向不同的测试小组分配任务。多一双眼睛,可以从不同的角度查看系统的问题。

工具列表

包括版本和功能的简要描述。这点会涉及到可重复性。如果有人要准确复现您的测试,他们需要确切地知道您使用的工具。

工作范围

事先已经同意,转载作为参考是有用的。

报告主体

这部分才是报告的精华,报告的正文应包括所有检测到的漏洞细节,如何发现漏洞,如何利用漏洞,以及漏洞利用的可能性。无论你做的是什么,都要保证给出一个清晰的解释。我看过无数份报告,都是简单的复制粘贴漏洞扫描的结果,这是不对的。另外报告中还应包括切实贴合的修复建议。

最终交付

在任何情况下任何一份报告应该加密传输。这虽然是常识,但往往大家就会摔倒在最后的这环上。

如何进行Web渗透测试

什么是渗透测试?

渗透测试,是渗透测试工程师完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标网络、主机、应用的安全作深入的探测,发现系统最脆弱的环节。

如何进行Web渗透测试?

完整web渗透测试框架当需要测试的web应用数以千计,就有必要建立一套完整的安全测试框架,流程的最高目标是要保证交付给客户的安全测试服务质量。

1、立项:项目建立,时间安排,人力分配,目标制定,厂商接口人确定;

系统分析威胁分析:针对具体的web应用,分析系统架构、使用的组件、对外提供的接口等,以STRIDE为威胁模型进行对应的安全威胁分析,输出安全威胁分析表,重点关注top3威胁;

制定测试用例:根据威胁分析的结果制定对应的测试用例,测试用例按照模板输出,具备可执行性;

测试执行漏洞挖掘:测试用例执行发散测试,挖掘对应的安全问题or漏洞;

问题修复回归测试:指导客户应用开发方修复安全问题or漏洞,并进行回归测试,确保安全问题or漏洞得到修复,并且没有引入新的安全问题;

项目总结评审:项目过程总结,输出文档评审,相关文档归档。

2、Web应用的渗透测试流程

主要分为3个阶段,分别是:信息收集→漏洞发现→漏洞利用,下面仔细分析一下各个阶段流程:

一、信息收集

在信息收集阶段,我们需要尽量多的收集关于目标web应用的各种信息,比如:脚本语言的类型、服务器的类型、目录的结构、使用的开源软件、数据库类型、所有链接页面,用到的框架等

脚本语言的类型:常见的脚本语言的类型包括:php、asp、aspx、jsp等

测试方法:

1 爬取网站所有链接,查看后缀

2 直接访问一个不存在页面后面加不同的后缀测试

3 查看robots.txt,查看后缀

服务器的类型:常见的web服务器包括:apache、tomcat、IIS、ngnix等

测试方法:

1 查看header,判断服务器类型

2 根据报错信息判断

3 根据默认页面判断

目录的结构:了解更多的目录,可能发现更多的弱点,如:目录浏览、代码泄漏等。

测试方法

1 使用字典枚举目录

2 使用爬虫爬取整个网站,或者使用google等搜索引擎获取

3 查看robots.txt是否泄漏

使用的开源软件:我们如果知道了目标使用的开源软件,我们可以查找相关的软件的漏洞直接对网站进行测试。

测试方法

指纹识别(网络上有很多开源的指纹识别工具)

数据库类型:对于不同的数据库有不同的测试方法。

测试方法

1 使应用程序报错,查看报错信息

2 扫描服务器的数据库端口(没做NAT且防火墙不过滤时有效)

所有链接页面:这个跟前面的获取目录结构类似,但是这个不只是获取网站的所有功能页面,有时候还可以获取到管理员备份的源码。

测试方法

1 使用字典枚举页面

2 使用爬虫爬取整个网站,或者使用google等搜索引擎获取

3 查看robots.txt是否泄漏

用到的框架:很多网站都利用开源的框架来快速开发网站,所以收集网站的框架信息也是非常关键的。

测试方法

指纹识别(网络上有很多开源的指纹识别工具)

二、漏洞发现

在这个阶段我们在做测试的时候要对症下药,不能盲目的去扫描,首先要确定目标应用是否使用的是公开的开源软件,开源框架等、然后在做深一度的漏洞扫描。

关于开源软件的漏洞发现

开源的软件:常见的开源软件有wordpress、phpbb、dedecms等

开源的框架:常见的开源框架有Struts2、 Spring MVC、ThinkPHP等

中间件服务器:常见的中间件服务器有jboss、tomcat、Weblogic等

数据库服务:常见的数据库服务mssql、mysql、oracle、redis、sybase、MongoDB、DB2等

对于开源软件的测试方法

1 通过指纹识别软件判断开源软件的版本信息,针对不同的版本信息去开放的漏洞数据库查找相应版本的漏洞进行测试

2 对于默认的后台登录页、数据库服务端口认证等入口可以进行简单的暴力破解、默认口令尝试等操作

3 使用开源的漏洞发现工具对其进行漏洞扫描,如:WPScan

关于自主开发的应用

手动测试:这个阶段,我们需要手工测试所有与用户交互的功能,比如:留言、登入、下单、退出、退货、付款等操作

软件扫描:使用免费的软件扫描,如:appscan、wvs、netsparker,burp等

可能存在的漏洞

Owasp关键点

代码安全之上传文件

代码安全之文件包含

代码安全之SSRF

逻辑漏洞之密码重置

逻辑漏洞之支付漏洞

逻辑漏洞之越权访问

平台安全之中间件安全

三、漏洞利用

针对不同的弱点有不同的漏洞利用方式,需要的知识点也比较多。一般这个阶段包括两种方式,一种是手工测试,一种是工具测试

手工测试

手工测试是通过客户端或服务器访问目标服务,手工向目标程序发送特殊的数据,包括有效的和无效的输入,观察目标的状态、对各种输入的反应,根据结果来发现问题的漏洞检测技术。手工测试不需要额外的辅助工具,可由测试者独立完成,实现起来比较简单。但这种方法高度依赖于测试者,需要测试者对目标比较了解。手工测试可用于Web应用程序、浏览器及其他需要用户交互的程序。

这种方式对于有特殊过滤等操作,或者网络上没有成型的利用工具的时候可以使用。

工具测试

网络上有很多好用的免费利用工具,比如针对sql注入的sqlmap、针对软件漏洞的matesploit等。

如何进行渗透测试才有可能登录到数据库服务器的远程终端

新建一个文本文件,更改扩展名为aabb.udl双击此文件,选数据库类型、设置ip、用户名、密码,数据库可进行连接测试 ,当然对方要开sql服务的测试成功后,点确定将这个文件以文本方式打开, 里面有连接字符串,装sql 查询分析器。

渗透测试学习些啥呀?

渗透测试需要的基础技能必须有网络基础、编程基础、数据库基础、操作系统等基本技能。学习的话可以从html、css、js、编程语言、协议包分析、网络互联原理、数据库语法等进入,学习了这些基础技能之后,就可以进行渗透测试的深入学习了,如web方面的学习OWASP TOP 10漏洞挖掘、主机系统服务漏洞检测、App漏洞检测、内网渗透等方面,最后当然是能够编写渗透测试报告啦。

渗透测试的渗透测试分类

实际上渗透测试并没有严格的分类方式,即使在软件开发生命周期中,也包含了渗透测试的环节,但根据实际应用,普遍认同的几种分类方法如下: 1、黑箱测试

黑箱测试又被称为所谓的“Zero-Knowledge Testing”,渗透者完全处于对系统一无所知的状态,通常这类型测试,最初的信息获取来自于DNS、Web、Email及各种公开对外的服务器。

2、白盒测试

白盒测试与黑箱测试恰恰相反,测试者可以通过正常渠道向被测单位取得各种资料,包括网络拓扑、员工资料甚至网站或其它程序的代码片断,也能够与单位的其它员工(销售、程序员、管理者……)进行面对面的沟通。这类测试的目的是模拟企业内部雇员的越权操作。

3、隐秘测试

隐秘测试是对被测单位而言的,通常情况下,接受渗透测试的单位网络管理部门会收到通知:在某些时段进行测试。因此能够监测网络中出现的变化。但隐秘测试则被测单位也仅有极少数人知晓测试的存在,因此能够有效地检验单位中的信息安全事件监控、响应、恢复做得是否到位。 1、主机操作系统渗透

对Windows、Solaris、AIX、Linux、SCO、SGI等操作系统本身进行渗透测试。

2、数据库系统渗透

对MS-SQL、Oracle、MySQL、Informix、Sybase、DB2、Access等数据库应用系统进行渗透测试。

3、应用系统渗透

对渗透目标提供的各种应用,如ASP、CGI、JSP、PHP等组成的WWW应用进行渗透测试。

4、网络设备渗透

对各种防火墙、入侵检测系统、网络设备进行渗透测试。

0条大神的评论

发表评论