从军方演变过来,包括红蓝对抗,网络安全的渗透测试一般是指对于目标服务器或者web服务的一个白盒测试(或者黑盒测试),模拟黑客的攻击,以便检查目标服务器的可靠性和安全性。最主要的目的就是评估计算机网络系统安全的一种评估方法。
主要是利用第三方的服务对目标进行访问,google搜索引擎、shodan搜索引擎、fofa、鹰图、其他的综合工具,被动式信息收集是指尽可能的去多收集与目标相关的信息。
主要是通过直接扫描目标主机或者网站,主动式信息收集能够获取更多的信息,目标网站可能会记录操作信息。
在信息收集中,首先可以先进行被动收集,确定网络范围内目标,与目标相关的人员的邮箱,地址等信息,然后在选择出重点渗透的目标,在针对性的进行主动信息收集。
需要收集域名对应的IP地址,域名注册信息、子域名相关信息。whois信息查询(分为命令行和在线工具)
一般在真实场景,主域名做的安全防护比较强,因此可以转向搜集子域名信息,一般最常见的工具子域名挖掘机。子域名挖掘机一般能够搜集到对应的子域名、IP地址、CDN列表、web服务器信息。
旁站就是同IP地址下的站点;
C段:如192.168.1.1 A段为192,B段为168,C段为1,D段为1;拿到某个C段里的任意一台服务器权限,就可以横向渗透(横向移动)进行所有提权,拿到肉鸡。
对于目标服务器进行指纹识别是比较重要的,对应的web容器或者是CMS,才能够找到其相应的漏洞,才能进行相应的渗透操作。
CMS又称作为整站系统,常见的CMS:(Wordpress、dedecms、discuz、phpweb、phpwind、phpcms、帝国cms、510cms、dami cms)
常见的网站指纹识别工具:Whatweb
在线的工具:云悉指纹识别(yunsee.cn)、Whatweb
如何判断服务器是windows还是Linux,最简单的办法就是通过ping,看他的TTL值。windows的TTL值一般都是128,Linux的一般为64,所以说大于100的可能为Windows,而几十的可能为Linux,并不是百分百准确,有的很多Windows的值为几十,而且有的服务器禁止ping。比较准确的是可以通过nmap去进行扫描探测,-O和-A都可以扫描出来
主要目的是看他具体某个版本,通过版本号来判断存在哪些漏洞。如ngnix版本<0.83存在解析漏洞、IIS6.0会存在文件名解析漏洞、IIS7.0存在畸形解析漏洞。不同的web服务器版本,存在着不同的漏洞。
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证书:
5、CDN的优势
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我主要使用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
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的: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?并散列所有无济于事。
我有一些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
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/
我遵循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
我已经构建了一些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
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel