Todesk远程控制用于渗透初研究
一、前言
在今年八月份护网时,发现有一些有意思的远控工具,比如todesk、向日葵等,我仅仅通过一个几M的精简版todesk,就能实现远程被控,感觉很神奇,所以特意研究了一下todesk这些远程工具的原理,并研究将其用于渗透测试。
首先,先讲一下Todesk使用的协议,不同于使用常见的udp与tcp协议的向日葵,todesk使用的协议是RTC技术开发传输协议。RTC协议常常用于直播中,Todesk将其运用于远程控制能够极大的降低延迟、提高画面质量,用户体验好,让远程协作更加顺利,更重要的是Todesk实现了图片、音视频等文件的快速传输。
其次,Todesk远程控制需要一个密钥,这个密钥在被控制方手里,交给控制方后就可以输入即可远程控制,因此,如果某个电脑开启了Todesk,那我们拿到了他的密钥,是否就可以实现远程控制用于渗透呢?
二、正文
1.代码审计
(1)宏观文件分析
首先下一个Todesk功能完全版,别下精简版,因为精简版只能被控制,而且只有一个exe文件,没别的东西可以研究。所以Todesk下好了之后,就可以看到里面有这些东西:一个config.ini核心配置文件,一个default文件(Default文件夹是系统用户账户默认配置文件夹),一个default.crc文件(crc是用于数据错误检查),一个名为crashreport的exe文件(CrashReporter.exe的作用是当运行某一个程序出现未响应、强制退出时,该程序会自动检测错误原因并反馈出来,通过错误原因来解决问题,避免同样的错误发生),一个todesk.exe启动软件的exe文件,一个删除todesk所有文件的uninst.exe文件,一个drivers文件夹(drivers文件夹的含义是驱动程序,用于存储驱动程序文件),一个log日志文件夹(logs文件被称为是日志文件,一般是记录系统所指定对象的某些操作和其操作结果按时间有序的集合),一个名为zrtc.dll的文件(zrtc是一个音视频通信服务提供商的名字,“.dll”是一种可执行文件,即动态链接库,是一个包含可由多个程序,同时使用的代码和数据的库,该文件允许程序共享执行特殊任务所必需的代码和其他资源,所以zrtc.dll是音视频通信服务的动态链接库文件)
(2)config.ini文件分析
所以我们从他的config.ini配置文件开始阅读,发现里面有一些可以用的信息,比如clientId=设备代码,tempAuthPassEx=临时密码。设备代码是明文,临时密码是加密过的,而且每次打开todesk,临时密码刷新一次。但这里其实不需要直接去破解,可以通过更换config文件的方式尝试直接替换临时密码。
注:所有更改config.ini文件后都需要重启todesk!
下面我们找一个win7虚拟机作为靶机,在上面下载上Todesk,并且将安全设置里的临时密码更新时间改为手动更新。然后将里面的tempAuthPassEx替换为本机的tempAuthPassEx,再推出Todesk,重新打开后,即可发现本机和靶机的临时密码变成了一模一样的了,再进行连接时,使用本机的临时密码,就可以连接成功了
再继续研究config.ini文件内的内容,下面还有很多行空白的,我再思考后认为这是我用微信扫码,登录了账号的原因,比如loginemail=、user=等都是空的,而手机号loginphone=是有的,正好对应了我的个人中心里的信息。而靶机里没登录的todesk里的config.ini文件没有这些多余的空行,正好印证了我的猜想。
此时我又有另外一个想法:假如我把已经登录账号的主机的config.ini文件内容,把登录后的多加的几行复制到靶机没有登录的config文件,那么会不会成功在靶机登陆我的账号呢?所以我进行内容的替换,将主机的config.ini文件内容多的那几行复制到靶机config文件里面。然后结果就是惊人的发现!todesk里config.ini文件被替换后,直接实现了无密码无账号登录!两个机器就同时登录了一个todesk账号,并且曾经连接过的设备也已经同步。
同样的道理,如果我们这里是靶机todek已经登录了账号,而我们自己的主机没有登录,也可以通过将靶机的config文件内容,复制到我们自己的主机,这就实现了靶机登录后获取到靶机的config文件在主机登录即可绕过账号密码登陆靶机的todesk账号并且控制靶机todesk账号连接过的设备,当靶机没有登录的时候,也可以通过先下载下来靶机config之后将主机的tempAuthPassEx替换成靶机的tempAuthPassEx,然后在主机重启todesk就知道了靶机的临时密码,设备代码则是config内tempAuthPassEx解密后的明文密码,这就实现了绕过防火墙。
再进一步思考,我看到临时密码又长又复杂,所以我想能不能通过替换,将临时密码改为简单的明文密码呢?在本机中尝试:将tempAuthPassEx=后面改为111111,然后退出todesk,重新打开,发现todesk压根打不开,所以我们换一种思路,如果将md5加密的111111输入进去,能不能生效呢?经查询,111111的md5值为96e79218965eb72c92a549dd5a330112,所以我们再次更改config.ini文件,看看这次能不能打开,好家伙,还是点了没反应。
本来都要放弃了,在把tempAuthPassEx=还原后,打开todesk突然发现有个地方能够自定义临时密码,但是局限还是很多的,比如八个字符里必须有字母有数字,不能全数字。
然后config.ini文件里的别的我也根据网上搜索和自己的测试,测出下面的这些词的意思
autoStart=0-开机不自启动 autoStart=1-开机自启动
autoupdate=0-不自动更新 autoupdate=1-自动更新
autoLockScreen=0-不自动锁定屏幕 autoLockScreen=1-自动锁定屏幕
saveHistory=0-不保存历史连接密码 saveHistory=1-保存历史连接密码
showpass=0-临时密码不显示 showpass=1-临时密码不显示
loginlock=0-启动时不自动锁定 loginlock=1-启动时自动锁定
minsizelock=0-最小化不自动锁定 minsizelock=1-最小化自动锁定
filetranstip=0-文件传输不提醒 filetranstip=1-文件传输提醒
delWallpaper=0-远程不删除墙纸 delWallpaper=1-远程删除墙纸
passUpdate=0-手动更新临时密码 passUpdate=1-每日更新临时密码 passUpdate=2-每次远控后更新临时密码
autoLockScreen=0-远控结束后不自动锁定本机 autoLockScreen=1-远控结束后自动锁定本机
ProxyIp=IP-代理IP
ProxyPort=port-端口
ProxyUser=username-用户
ProxyPassEx=加密后的密码-密码
ProxyConn=1-当前代理开启
ProxyConn=0-当前代理不开启
2.横向移动
前面提到,todesk除了远程控制,它同样具备着内网穿透、文件 传输、云端同步和流量加密等功能。下面我们来研究一下todesk如何运用于横向移动。
(1)webshell上线
我们需要首先在cs制作一个webshell,让我们的靶机点击webshell上线,在上线后才能使用todesk进行横向移动。
我先用cs做一个马,利用VMware Tool传给靶机木马文件,上线之后进行静默安装,在后台运行 自动安装,安装时无需任何用户干预,直接按默认设置安装。
shell ToDesk1.exe /S
(2)查看配置文件
我们需要看一下靶机中的config文件,一般默认安装在这个C:"Program Files (x86)"\ToDesk\路径下
shell type C:\"Program Files (x86)"\ToDesk\config.ini
(3)使用cs进行文件替换
将设计好的本机config.ini文件,替换到靶机中来。就是前文提到的,将靶机的临时密码替换为本机的临时密码,再改一下靶机的设备代码,就可以了。
(4)杀死相关进程
上文提到过,所有更改config.ini文件后都需要重启todesk!
tasklist
taskkill /pid PID /F
(5)重新启动
重新打开todesk文件
shell C:\"Program Files (x86)"\ToDesk\ToDesk.exe
(6)使用todesk连接
借用已经改好的已知的设备代码、临时密码,用本机直接连上靶机。完成横向移动。
三、总结
本次对Todesk远控技术用于渗透的研究,收获颇多。学习了如何通过代码审计,获得渗透突破口,也学会了通过远控技术,进行横向移动。我打算下一步进行对远控技术的更深层次的学习,写一篇类似远控工具用于渗透测试大全。
Todesk远程控制用于渗透初研究
一、前言
在今年八月份护网时,发现有一些有意思的远控工具,比如todesk、向日葵等,我仅仅通过一个几M的精简版todesk,就能实现远程被控,感觉很神奇,所以特意研究了一下todesk这些远程工具的原理,并研究将其用于渗透测试。
首先,先讲一下Todesk使用的协议,不同于使用常见的udp与tcp协议的向日葵,todesk使用的协议是RTC技术开发传输协议。RTC协议常常用于直播中,Todesk将其运用于远程控制能够极大的降低延迟、提高画面质量,用户体验好,让远程协作更加顺利,更重要的是Todesk实现了图片、音视频等文件的快速传输。
其次,Todesk远程控制需要一个密钥,这个密钥在被控制方手里,交给控制方后就可以输入即可远程控制,因此,如果某个电脑开启了Todesk,那我们拿到了他的密钥,是否就可以实现远程控制用于渗透呢?
二、正文
1.代码审计
(1)宏观文件分析
首先下一个Todesk功能完全版,别下精简版,因为精简版只能被控制,而且只有一个exe文件,没别的东西可以研究。所以Todesk下好了之后,就可以看到里面有这些东西:一个config.ini核心配置文件,一个default文件(Default文件夹是系统用户账户默认配置文件夹),一个default.crc文件(crc是用于数据错误检查),一个名为crashreport的exe文件(CrashReporter.exe的作用是当运行某一个程序出现未响应、强制退出时,该程序会自动检测错误原因并反馈出来,通过错误原因来解决问题,避免同样的错误发生),一个todesk.exe启动软件的exe文件,一个删除todesk所有文件的uninst.exe文件,一个drivers文件夹(drivers文件夹的含义是驱动程序,用于存储驱动程序文件),一个log日志文件夹(logs文件被称为是日志文件,一般是记录系统所指定对象的某些操作和其操作结果按时间有序的集合),一个名为zrtc.dll的文件(zrtc是一个音视频通信服务提供商的名字,“.dll”是一种可执行文件,即动态链接库,是一个包含可由多个程序,同时使用的代码和数据的库,该文件允许程序共享执行特殊任务所必需的代码和其他资源,所以zrtc.dll是音视频通信服务的动态链接库文件)
(2)config.ini文件分析
所以我们从他的config.ini配置文件开始阅读,发现里面有一些可以用的信息,比如clientId=设备代码,tempAuthPassEx=临时密码。设备代码是明文,临时密码是加密过的,而且每次打开todesk,临时密码刷新一次。但这里其实不需要直接去破解,可以通过更换config文件的方式尝试直接替换临时密码。
注:所有更改config.ini文件后都需要重启todesk!
下面我们找一个win7虚拟机作为靶机,在上面下载上Todesk,并且将安全设置里的临时密码更新时间改为手动更新。然后将里面的tempAuthPassEx替换为本机的tempAuthPassEx,再推出Todesk,重新打开后,即可发现本机和靶机的临时密码变成了一模一样的了,再进行连接时,使用本机的临时密码,就可以连接成功了
再继续研究config.ini文件内的内容,下面还有很多行空白的,我再思考后认为这是我用微信扫码,登录了账号的原因,比如loginemail=、user=等都是空的,而手机号loginphone=是有的,正好对应了我的个人中心里的信息。而靶机里没登录的todesk里的config.ini文件没有这些多余的空行,正好印证了我的猜想。
此时我又有另外一个想法:假如我把已经登录账号的主机的config.ini文件内容,把登录后的多加的几行复制到靶机没有登录的config文件,那么会不会成功在靶机登陆我的账号呢?所以我进行内容的替换,将主机的config.ini文件内容多的那几行复制到靶机config文件里面。然后结果就是惊人的发现!todesk里config.ini文件被替换后,直接实现了无密码无账号登录!两个机器就同时登录了一个todesk账号,并且曾经连接过的设备也已经同步。
同样的道理,如果我们这里是靶机todek已经登录了账号,而我们自己的主机没有登录,也可以通过将靶机的config文件内容,复制到我们自己的主机,这就实现了靶机登录后获取到靶机的config文件在主机登录即可绕过账号密码登陆靶机的todesk账号并且控制靶机todesk账号连接过的设备,当靶机没有登录的时候,也可以通过先下载下来靶机config之后将主机的tempAuthPassEx替换成靶机的tempAuthPassEx,然后在主机重启todesk就知道了靶机的临时密码,设备代码则是config内tempAuthPassEx解密后的明文密码,这就实现了绕过防火墙。
再进一步思考,我看到临时密码又长又复杂,所以我想能不能通过替换,将临时密码改为简单的明文密码呢?在本机中尝试:将tempAuthPassEx=后面改为111111,然后退出todesk,重新打开,发现todesk压根打不开,所以我们换一种思路,如果将md5加密的111111输入进去,能不能生效呢?经查询,111111的md5值为96e79218965eb72c92a549dd5a330112,所以我们再次更改config.ini文件,看看这次能不能打开,好家伙,还是点了没反应。
本来都要放弃了,在把tempAuthPassEx=还原后,打开todesk突然发现有个地方能够自定义临时密码,但是局限还是很多的,比如八个字符里必须有字母有数字,不能全数字。
然后config.ini文件里的别的我也根据网上搜索和自己的测试,测出下面的这些词的意思
autoStart=0-开机不自启动 autoStart=1-开机自启动
autoupdate=0-不自动更新 autoupdate=1-自动更新
autoLockScreen=0-不自动锁定屏幕 autoLockScreen=1-自动锁定屏幕
saveHistory=0-不保存历史连接密码 saveHistory=1-保存历史连接密码
showpass=0-临时密码不显示 showpass=1-临时密码不显示
loginlock=0-启动时不自动锁定 loginlock=1-启动时自动锁定
minsizelock=0-最小化不自动锁定 minsizelock=1-最小化自动锁定
filetranstip=0-文件传输不提醒 filetranstip=1-文件传输提醒
delWallpaper=0-远程不删除墙纸 delWallpaper=1-远程删除墙纸
passUpdate=0-手动更新临时密码 passUpdate=1-每日更新临时密码 passUpdate=2-每次远控后更新临时密码
autoLockScreen=0-远控结束后不自动锁定本机 autoLockScreen=1-远控结束后自动锁定本机
ProxyIp=IP-代理IP
ProxyPort=port-端口
ProxyUser=username-用户
ProxyPassEx=加密后的密码-密码
ProxyConn=1-当前代理开启
ProxyConn=0-当前代理不开启
2.横向移动
前面提到,todesk除了远程控制,它同样具备着内网穿透、文件 传输、云端同步和流量加密等功能。下面我们来研究一下todesk如何运用于横向移动。
(1)webshell上线
我们需要首先在cs制作一个webshell,让我们的靶机点击webshell上线,在上线后才能使用todesk进行横向移动。
我先用cs做一个马,利用VMware Tool传给靶机木马文件,上线之后进行静默安装,在后台运行 自动安装,安装时无需任何用户干预,直接按默认设置安装。
shell ToDesk1.exe /S
(2)查看配置文件
我们需要看一下靶机中的config文件,一般默认安装在这个C:"Program Files (x86)"\ToDesk\路径下
shell type C:\"Program Files (x86)"\ToDesk\config.ini
(3)使用cs进行文件替换
将设计好的本机config.ini文件,替换到靶机中来。就是前文提到的,将靶机的临时密码替换为本机的临时密码,再改一下靶机的设备代码,就可以了。
(4)杀死相关进程
上文提到过,所有更改config.ini文件后都需要重启todesk!
tasklist
taskkill /pid PID /F
(5)重新启动
重新打开todesk文件
shell C:\"Program Files (x86)"\ToDesk\ToDesk.exe
(6)使用todesk连接
借用已经改好的已知的设备代码、临时密码,用本机直接连上靶机。完成横向移动。
三、总结
本次对Todesk远控技术用于渗透的研究,收获颇多。学习了如何通过代码审计,获得渗透突破口,也学会了通过远控技术,进行横向移动。我打算下一步进行对远控技术的更深层次的学习,写一篇类似远控工具用于渗透测试大全。