草庐IT

渗透测试——信息收集

千冬季 2024-02-20 原文
  • 什么是渗透测试

从军方演变过来,包括红蓝对抗,网络安全的渗透测试一般是指对于目标服务器或者web服务的一个白盒测试(或者黑盒测试),模拟黑客的攻击,以便检查目标服务器的可靠性和安全性。最主要的目的就是评估计算机网络系统安全的一种评估方法。

  • 被动式信息收集

主要是利用第三方的服务对目标进行访问,google搜索引擎、shodan搜索引擎、fofa、鹰图、其他的综合工具,被动式信息收集是指尽可能的去多收集与目标相关的信息。

  • 主动式信息收集

主要是通过直接扫描目标主机或者网站,主动式信息收集能够获取更多的信息,目标网站可能会记录操作信息。

在信息收集中,首先可以先进行被动收集,确定网络范围内目标,与目标相关的人员的邮箱,地址等信息,然后在选择出重点渗透的目标,在针对性的进行主动信息收集。

  • 主要收集的信息:
  1. 目标主机的DNS信息;

    需要收集域名对应的IP地址,域名注册信息、子域名相关信息。whois信息查询(分为命令行和在线工具)

  2. 目标主机IP地址(真实IP);有可能会有CDN,需要绕过!
  3. 子域名;

    一般在真实场景,主域名做的安全防护比较强,因此可以转向搜集子域名信息,一般最常见的工具子域名挖掘机。子域名挖掘机一般能够搜集到对应的子域名、IP地址、CDN列表、web服务器信息。

  4. 旁站和C段;

    旁站就是同IP地址下的站点;

    C段:如192.168.1.1  A段为192,B段为168,C段为1,D段为1;拿到某个C段里的任意一台服务器权限,就可以横向渗透(横向移动)进行所有提权,拿到肉鸡。

  5. CMS类型;

    对于目标服务器进行指纹识别是比较重要的,对应的web容器或者是CMS,才能够找到其相应的漏洞,才能进行相应的渗透操作。

    CMS又称作为整站系统,常见的CMS:(Wordpress、dedecms、discuz、phpweb、phpwind、phpcms、帝国cms、510cms、dami cms)

    常见的网站指纹识别工具:Whatweb

    在线的工具:云悉指纹识别(yunsee.cn)、Whatweb

  6. 敏感信息;比如:身份证号、家庭住址、包含服务器账号密码的表格、数据库信息。
  7. 端口信息;nmap;周知端口:从0-1023端口。动态端口:动态端口的范围从49152-65535,之所以称之为动态,是因为他们一般不固定分配某种服务,而是动态分配。注册端口:从1024-49151,分配给用户进程或对应的程序。
  8. 操作系统版本;

    如何判断服务器是windows还是Linux,最简单的办法就是通过ping,看他的TTL值。windows的TTL值一般都是128,Linux的一般为64,所以说大于100的可能为Windows,而几十的可能为Linux,并不是百分百准确,有的很多Windows的值为几十,而且有的服务器禁止ping。比较准确的是可以通过nmap去进行扫描探测,-O和-A都可以扫描出来

  9. 网站架构;

    主要目的是看他具体某个版本,通过版本号来判断存在哪些漏洞。如ngnix版本<0.83存在解析漏洞、IIS6.0会存在文件名解析漏洞、IIS7.0存在畸形解析漏洞。不同的web服务器版本,存在着不同的漏洞。

  10. 漏洞信息;已经找到漏洞后,可以由此扩大信息搜集。例如敏感文件泄漏(phpinfo),可以获取主机ip或者路径等信息。
  11. 服务器与中间件;Wappalyzer插件
  12. 邮箱
  13. 人员信息
  14. 地址、联系方式;(可以去互联网查询关于此公司的所有信息,比如:公司邮箱格式、公司员工姓名、所有包含此公司的信息。可以去码云、GitHub平台去查找相关的敏感信息。)
  • CDN技术

1、如何判断网站是否存在CDN

CDN即内容分发网络,构建在现有网络的基础上的智能虚拟网络,依靠部署在各地边缘服务器,通过中心平台的负载均衡、内容分发、调度等模块,使用户就近获取所需要的内容。降低网络阻塞,提高用户的访问响应速度和降低丢包率。CDN的关键技术主要是内容存储和分发技术。

使用超级ping,如果Addresses有多个IP地址,则能够证明存在CDN。

(站长之家多个地点ping,查询的目标网站IP地址大于1个,说明此IP地址并不是真实的IP地址,如果是2个或者3个,并且这几个地址是同一地区的不同运营商,则有可能这几个地址是服务器的出口地址,该服务器在内网中,通过不同的运营商NAT映射提供互联网访问,同时采用几个不同的运营商可以负载均衡和热备份。如果是多个IP地址,并且这些IP地址分布在不同的区域,则我们可以判断存在CDN服务。)

2、CDN的作用

3、访问方式的不同

传统访问:用户访问域名-->解析服务器IP-->访问目标主机

普通的CDN:用户访问域名-->CDN节点-->真实服务器IP-->访问目标主机

带WAF的CDN:用户访问域名-->CDN节点(云WAF)-->真实服务器IP-->访问目标主机

查询域名相关网站:DNS查询、微步在线

4、绕过CDN。查找真实ip

①查询子域名:

只会对主站或者是流量较大的网站、子站做CDN。很多小网站、小子站通常不会存在CDN

②查询主域名:

很多的网站,都会把WWW域名使用CDN。而没有www.开头的秃域名,可能没有做CDN。(例如:www.baidu.com做了CDN,baidu.com没有做CDN)

③邮件服务器:

邮件服务器一般都会在内部,不会经过CDN解析,通过目标网站用户注册或者是RSS订阅,查看邮件、寻找邮件头中的邮件服务器IP,ping这个邮件服务器的域名,可获得目标网站的真实IP地址(缺点必须是目标网站自己的邮件服务器,不能够是第三方的邮件服务器)

④域名解析历史记录:

目标网站很久之前使用的,但是同样会存在记录。

⑤国外访问:

国内的CDN往往只会对国内的用户访问加速,国外的相反,可以通过国外在线的代理网站去访问,可能会得到真实IP。

⑥网站漏洞:

利用存在的漏洞,很多情况下都会泄漏真实IP。

 ⑦SSL证书:

https://crt.sh去查找目标网站的SSL证书。

5、CDN的优势

  • 提高用户的访问速率,优化用户的体验
  • 隐藏自己的真实IP
  • 提供WAF功能,目前很多的CDN都提供WAF功能,当我们访问目标站点的时候,先经过CDN节点的过滤,该过滤可以对SQL注入、xss、文件上传、命令执行、恶意扫描攻击进行有效拦截。CDN节点会将认为无害的数据提交给真实的主机服务器。

有关渗透测试——信息收集的更多相关文章

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

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

  2. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  3. 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

  4. 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(在整个项目的根目录中),然后当

  5. 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?并散列所有无济于事。

  6. 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

  7. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  8. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  9. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  10. ruby-on-rails - 如何使辅助方法在 Rails 集成测试中可用? - 2

    我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel

随机推荐