草庐IT

我劫持你的dns

serverxx0 2023-03-28 原文
   这篇文章把Dns分为两种,一种是主机或嵌入式设备dns,一种是网站域名dns,来讲述dns沦陷之后带来的危害。

一:路由器dns劫持

   你本地的网络连接的dns是通过路由器获取的,假如有一天你家里的路由被黑客入侵了,入侵者修改了你家里路由器的dns,那么他可以对你访问记录非常清楚,如系在文件,流量记录。既然解析都通过dns,我们完全可以自建dns,来进行攻击。

    1.路由器怎么样沦陷

         攻击手法:csrf  路由器漏洞

        CSRF

         IE 出了一个安全补丁,禁止了Http Authentication Url, 使用此方法在IE下攻击是无效的 完美兼容FF chrome。 https://support.microsoft.com/zh-cn/kb/834489

         <img src=http://192.168.1.1/userRpm/LanDhcpServerRpm.htm?dhcpserver=1&ip1=192.168.1.100&ip2=192.168.1.199&Lease=120&gateway=0.0.0.0&domain=&dnsserver=恶意的dns地址&dnsserver2=0.0.0.0&Save=%B1%A3+%B4%E6></img>

        设备漏洞

烽火通信某款路由器被爆存在漏洞-可远程修改DNS

http://www.exploit-db.com/exploits/28450/

    2.自建dns(window)

     在这里我使用微软自家产,(完全可以用其他产品代替,个人习惯问题)

     

        配置劫持域名

         myhack58.com

     

        转发器配置

             转发器解决这台服务器没有应答的dns查询请求, 如这台主机只有myhack58.com, baidu.com等是不存在的,这种情况把会把baidu.com请求转发到你配置的dns去解析。我配置解析的dns是8.8.8.8

     

        配置劫持域名A记录

            刚才dns填写是跟域,这时候需要对A记录进行解析,比如我劫持www.myhack58.com到本地127.0.0.1。

   

            我这解析是vps的IP,测试可以写127.0.0.1。但要用起来你解析写公网ip地址,不然别人解析是127.0.0.1,127.0.0.1是你本地,找不到的地址,没办法跟反向代理代理配合。

   

    

        测试dns是否配置成功

            可以使用dnslookup ping 等去测试

    

            Dns已配置成功,虽然现在解析本地了,我本地难道就只能挂个黑页?当然不是,我的目的是要求是替换页面的内容.比如插入js,修改某个文字等。

客户端的配置

            由于我在公司没有路由器,直接使用客户端做测试,客户端的dns获取来源还是路由器

    

            这时候配置成功,你可以打开baidu.com来测试,是否可以解析,正常打开。

    3.反向代理搭建

        反向代理来这里启到作用是,把dns解析www.myhack58.com的vps的这个请求代理到真实的解析。

        我们要做的事情 要给页面插入一段js。

        Openresty介绍

            在这里我们使用Openresty,Openresty是基于nginx,它打包了标准的 Nginx 核心,很多的常用的第三方模块,nginx第三方模块都需要编译,在window下比较恶心 我直接找了一个Openresty_For_Windows,已打包我想要的是第三方模块http_sub_module。

        下载地址:

        https://github.com/LomoX-Offical/nginx-openresty-windows

        使用nginx  -V 查看已支持的第三方模块 

        http_sub_module缺点

            1.只能使用一条规则

            2.不支持中文

        反向代理配置

            监听端口vps的公网IP的80端口.当dns查询请求解析到本地80的时候,80正好监听vps公网ip,反向代理是myhack58.com。实际上vps公网ip是myhack58.com

         打开/conf/nginx.conf文件进行配置

         使用了http_sub_module,替换了内容把

         </head>换成</head><script sec=safe.js></script>,我故意写错 写成sec=

         

        测试是否成功

            先前已经把dns设置过去了,现在也可以ping通,那我们就查看源码 是否替换了页面内容。

            配置其他功能

                现在dns加反向代理配置已经完成了,你可以替换他的页面了

            Openresty配置反向代理,你要是需要其他的配置还可以设置很多参数,如proxy_cache proxy_header  proxy_send_timeout  proxy_read_timeout。取决于自己用途。

二:网站域名dns劫持

        当你通过社工拿到了某个域名权限, 但是你的目的是getshell,这时候你可以做反向代理,可以从两方面下手去做。

    A记录劫持演示

        直接修改域名劫持到A记录的你的恶意反向代理,但是这时候反向代理必须有配置upstream,在upstream指定原域名解析的ip地址,路由器劫持dns没有配置upstream 是因为上层的dns还可以解析到劫持域名的真实ip,而你这时候意见把A记录解析修改到了你的恶意反向代理机器,不去指定解析的地址, 上层找到解析的地址还是恶意的反向代理,形成一个死循环,永远打不开网站。

        域名A记录劫持

        www.sanr.org  192.168.182.128

        反向代理      192.168.182.129

  

        为什么要劫持A记录

            如你通过社工之类拿到了域名的控制权限,这时候你想获取他的后台地址,或者cookie等你就需要这样做。

            目前我已经控制sanr.org的域名解析权限,现在我们要做的是把www.sanr.org的A记录解析到192.168.182.129。让反向代理去访问真实的ip(也就是192.168.182.128),在反向代理的时候我们动手脚,插个js代码进去。

        没修改A记录之前

    修改域名A记录

        修改域名到反向代理服务器 192.168.182.129

 

        反向代理服务器搭建(192.168.182.129)

            绑定域名为www.sanr.org 端口80,并指定上游(upstream)地址是192.168.182.128,必须指定上游地址(upstream),只有proxy_pass无upstream他会自动请求解析A记录。

            路由器dns劫持那块没有用upstream是因为域名的A记录的iP地址你可以通过proxy_pass获取到。

            而现在域名A记录解析是反向代理机器也就是本机(192.168.182.129),如不使用upstrema去指定真实的IP地址,proxy_pass直接去解析到的是本地IP,那么就会造成死循环,一直解析的都是本机。

下面是反向代理配置文件。

        劫持成功

             成功的给sanr.org的植入safe.js代码

    dns劫持

        跟路由器劫持dns一样,自建dns,之后把域名的dns解析配置的A记录解析到恶意的反向代理,反向代理中还是要指定upstream,跟a记录劫持一样,不然造成死循环。 

       Dns服务 反向代理软件有很多,完全取决于自己的习惯,用自己最喜欢的。

    Dns win

      WinMyDNS

      微软自家

    Dns linux 

      dnschef   “msfconsole  auxiliary/server/fakedns”

      Powerdns bind 等 linux开源项目太多

    反向代理

     Squid  Varnish nginx 或者nginx 衍生版(Tengine  Openresty)

    攻击手法不仅仅是替换网页内容 插入js,如劫持你路由器的dns, 连接3389也是输入域名也是通过dns解析的,我完全可以把A记录劫持我本地,连接3389是我本机的机器,之后安装WinlogonHack,来记录密码,WinlogonHack需要改成即使是错误密码也要记录,不然记录不到。

    把www.baidu.com解析到我vps主机的ip

    Dns已生效,解析baidu.com也返回是vps主机的ip

    连接3389(其实这时候是我vps的IP)

    

    只要涉及到域名解析的 本地host  本地客户端dns  路由器dns,都可以这样去劫持,攻击手法变化多样,看你出自于什么目地去做。

   doc文档github下载

        



有关我劫持你的dns的更多相关文章

  1. ruby-on-rails - Bundler::RubyVersionMismatch: 你的 Ruby 版本是 1.9.3,但是你的 Gemfile 指定了 2.0.0 - 2

    我正在使用带有Pow、Ruby、Rails和一堆有用的gem的Mac。每当我尝试打开我的应用程序时,我最近都会遇到此错误。Bundler::RubyVersionMismatch:您的Ruby版本为1.9.3,但您的Gemfile指定为2.0.0我明白这个错误,但我找不到为什么它没有在这里使用正确的版本。一些有用的信息:堆栈跟踪Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0~/.rvm/gems/ruby-2.0.0-p247/gems/bundler-1.3.5/lib/

  2. ruby-on-rails - 你如何说服你的经理你的项目需要大量重构? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion我作为承包商加入了一个Rails项目。该项目已经进行了一年多。代码由大约10名不同的开发人员编写,其中大多数也是承包商。他们有不同的代码风格。其中一些来自Java。该代码在metric_fu方面得分很低。许多函数非常长(100-300行)。有些函数有大量的逻辑分支、循环和递归。每个请求都会生成大量的sql查询。性能很差。许多过时的代码从未使用过但从未有机会被清理。核心架构明显错误或设计过度

  3. ruby - 缺少 mysql2 gem。将它添加到你的 Gemfile : gem 'mysql2' - 2

    版本ruby1.9.2-p290导轨3.0.9rvm下的mysql2-0.2.13Ubuntu11.04gem使用“geminstallmysql2-v'rails和“railsc”工作正常。我需要使用activerecord3.0.9在Rails环境之外运行脚本。当我运行脚本时,这是输出:======================/home/ross/work/x/library/models.rb:27:in`eval':!!!Missingthemysql2gem.AddittoyourGemfile:gem'mysql2'(RuntimeError)from/home/ros

  4. ruby-on-rails - 你的 Ruby 版本是 2.2.4,但是你的 Gemfile 指定了 2.3.0? - 2

    我正在尝试在GitBash中捆绑安装一个ruby​​项目,但我收到了上述消息。ruby-vruby2.2.4p230(2015-12-16revision53155)[i836-mingw32]gem-v2.3.0Ruby的新手,所以真的很令人沮丧。我正在尝试做下面的项目http://www.viralrails.com/?p=25 最佳答案 发生这种情况是因为您在Gemfile(2.3.0)中指定了Ruby版本,而该版本未安装或者不是当前或默认版本。不要像上面有人说的那样删除ruby​​'2.3.0'行。您的应用可能依赖于此版本。

  5. ruby-on-rails - 在你的命令前加上 `bundle exec` 可能会解决这个问题 - 2

    我在将网站部署到AWS时遇到问题。Gem::LoadError:Youhavealreadyactivatedrake10.4.2,butyourGemfilerequiresrake10.5.0.Prepending`bundleexec`toyourcommandmaysolvethis./var/app/ondeck/config/boot.rb:3:in`'/var/app/ondeck/config/application.rb:1:in`'/var/app/ondeck/Rakefile:4:in`'LoadError:cannotloadsuchfile--bundler

  6. ruby-on-rails - 无法运行 rails 命令。你的 Ruby 版本是 2.2.1,但是你的 Gemfile 指定了 2.1.4 - 2

    我无法运行服务器railss或无法制作Controller等。我该怎么办?终端显示以下错误:YourRubyversionis2.2.1,butyourGemfilespecified2.1.4 最佳答案 运行ruby-v然后你会看到你已经安装了ruby​​2.2.1,但是你的Gemfile中的第一行指定使用ruby2.1.4。更改Gemfile中的第一行以指定ruby2.2.1或安装ruby2.1.4如果你想使用以前的版本ruby​​2.1.4。然后首先使用rvmlist命令检查它是否已经安装。如果它在那里那么你需要运行rvmus

  7. ruby-on-rails - Restful 身份验证的无意 session 劫持问题 - 2

    我正在使用在github上找到的当前版本的restful_authentication,我遇到了一堆奇怪的session问题。服务器似乎以某种方式将session分配给不应该的用户。只有在越过注销/登录障碍时才会发生这种情况。这是一个例子。在服务器上没有事件session的情况下,我使用用户A登录帐户。在另一台计算机上,我使用用户B登录。然后当注销用户B时,在注销重定向发生后的某个时间,我将登录为用户A。从这一点开始,我可以继续浏览该站点,就像我以该用户身份登录一样!我通过日志观察到的是,当发生这种劫持时,sessionID是不一样的。用户A在两个session中均已登录,但sessi

  8. ruby - bundle 安装错误 - 你的 bundle 只支持平台 [] 但你的本地平台是 ["ruby", "x86_64-linux"] - 2

    在执行bundle安装时出现此错误;谷歌似乎是一个常见问题,但我似乎找不到解决方法(似乎是关于Gemfile.lock的建议,但我将该文件移到了另一个目录)#bundleinstallYourbundleonlysupportsplatforms[]butyourlocalplatformsare["ruby","x86_64-linux"],andthere'snocompatiblematchbetweenthosetwolists.这是我的Gemfile,目录中没有Gemfile.lock。[root@ip-172-30-4-16rails]#gem-v2.6.11[root@i

  9. ruby - 在 Ruby 中获取 DNS TXT 记录 - 2

    我需要从DNS记录中获取txt字段。是否有任何ruby​​api可以做这样的事情?nslookup-q=txtxxxx.com 最佳答案 尝试安装dnsrubygem。代码得到积极维护,并在一些重要的生产系统中使用。require'rubygems'require'dnsruby'includeDnsruby#Usethesystemconfigurednameserverstorunaqueryres=Dnsruby::Resolver.newret=res.query("google.com",Types.TXT)printre

  10. ruby - 在 Ruby 中,什么时候应该使用 self.在你的课上? - 2

    这个问题在这里已经有了答案:Whentouse`self.foo`insteadof`foo`inRubymethods(3个答案)关闭9年前。什么时候在Ruby中使用self.property_name?

随机推荐