草庐IT

一份标准的渗透测试报告是什么样的?(附报告模板)

汇智知了堂 2023-07-17 原文

一个完整的渗透测试工作流程中,实际有近一半时间都用在如何编写报告上,渗透测试工程师的工作,不仅需要具备高超的渗透测试水平,同样也需要把一个深奥的技术点解释的通俗易懂,即使是完全不懂安全的人也可以理解。

那么,一份标准的渗透测试报告究竟是什么样的呢?本期,跟随知了姐一起学习渗透测试报告的相关知识吧~

01

渗透测试报告的重要性

渗透测试是一个科学的过程,像所有科学流程一样,应该是独立可重复的。当客户不满意测试结果时,他有权要求另外一名测试人员进行复现,此时如果你的报告没有详细说明结论的话,第二个测试人员将会不知从何入手,得出的结论也极有可能不一样,甚至遗漏相关漏洞。

举个例子:

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

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

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

报告是实实在在的测试过程的输出,且是真实测试结果的证据,对客户而言他们可能对报告的内容没什么兴趣,但这份报告是他们唯一一份证明测试费用的证据。

02

如何准备好渗透测试记录?

第一步

准备好渗透测试记录

测试记录是执行过程的日志,在每日测试工作结束后,应将当日的成果做成记录,虽然内容不必太过细致,但测试的重点必须记录在案:

·拟检测的项目

·使用的工具或方法

·检测过程描述

·检测结果说明

·过程的重点截图(有结果的画面)

第二步

撰写渗透测试报告书

报告书是整个测试测试操作结果的汇总,大概会以下列大纲撰写:

前言:说明执行测试的目的

声明:依照渗透测试同意书协商事项,列举于此,通常作为乙方的免责声明。

摘要:将本次渗透测试所发现的弱点及漏洞做一个汇总性的说明,如果系统有良好的防护机制,亦可书写于此,提供给甲方的其他网站系统作为管理参考。

执行方式:“大致”说明测试的方法论、测试的方法、执行时间以及测试的评定方式,评定方式是双方约定的条件为准,例如:发现中高风险项目、能提权成功、能完成插旗(即在目标网站中上传指定的文件或修改网页内容)、中断系统服务……

执行过程说明:依照双方议定的项目,说明测试“结果”,不论可以渗透成功或无法成功,都应说明执行的程序。

标注“详细执行步骤,如《渗透测试记录表》”,以便渗透测试记录表引入报告书中,并列出本次操作对风险高低的评定说明,例如:测试完成后,乙方人员针对所有测试目标评定其风险等级,以该测试目标所造成的冲击程度及发生的可能性作为因子,相乘得出风险等级,评定如下:

发现事项与建议改善说明:这是整份报告书中最重要的部分,任何渗透测试都必须提供客户防护或弱点修正建议,其实只要能界定弱点的类型即可,因为防护建议内容通过搜索都可查到,所以本节最好能详细说明建议内容,以提高客户的满意度。

附件或参考文件(如无,可以省略):有些公司会将小组成员的资历列在此处,以供甲方参考。

第三步

撰写报告的注意事项有哪些?

测试记录是执行过程的日志,在每日测试工作结束后,应将当日的成果做成记录,虽然内容不必太过细致,但测试的重点必须记录在案:

一份好的报告可以为测试操作加分,一份不好的报告会毁了测试人员的努力,所以撰写渗透测试报告不可太随便,以下提供三个撰写要领,以供参考:

①重点漏洞要用直白的话写,让主管一目了然,翻开报告书就能够感受到渗透测试的价值

②撰写针对漏洞的修补建议时,最好言之有物,并附上修补范例

③图表重于文字,重点位置量附图佐证,数据对比或汇总,避免抓不到重点

④测试结果、弱点、漏洞务必要提出来,并给予修正建议

有关一份标准的渗透测试报告是什么样的?(附报告模板)的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  3. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  4. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  5. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  6. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

  7. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  8. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

    我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

  9. ruby - 通过 erb 模板输出 ruby​​ 数组 - 2

    我正在使用puppet为ruby​​程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby​​不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这

  10. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

随机推荐