漏洞复现设备:TP-LINK (Smart Home Router)SR20
漏洞原理:路由器中存在远程代码执行
漏洞产生原因:TP-LINK公司专有协议:TDDP协议,该协议v1版本存在一个远程代码执行漏洞,攻击者可以利用该漏洞在路由器上以root权限执行任意命令
复现环境:qemu-system IDA Netcat
漏洞分析
TDDP v1不存在验证功能,所以在向SR20的UDP1040端口发送数据时,路由器都会接受并处理,如果发送数据的第二字节是0x31,设备就会连接发送该请求的设备,用TFTP服务下载相应的文件,然后使用lua加载并执行一个外部lua文件
首先对下载好的固件包进行binwalk -Me进行解包,解包后squashfs-root目录就是固件文件系统
使用find命令查找“tppd”
find ./ -name “tddp”
使用read -h命令分析和显示ELF文件信息
得知此二进制文件是arm32位、小端
接下来把tddp二进制文件拖进IDA里进行分析
使用shift+F12查找“tppd“,快速定位程序入口
按F5进行分析,发现其中v6似乎是一个指向某个结构体或数组的指针,代表了某种网络连接或任务上下文
往下看发现设置了timeout和readfds,执行sellect,如果select返回数据,且该数据可读取,则调用sub_16418进行处理
点进sub_16418继续分析,这里对v2进行了判断,如果v2=1,那么就调用sub_9340函数并将返回值存储在a1[13]中,再传递a1和&n到sub_15E74函数
再进入到sub_15E74函数里,前文提到了在发送数据第二字节为0x31时,设备就会连接发送请求设备,下载相应文件
进入到sub_A580函数,如果读取失败或者字符串为空,程序回输出错误信息并跳转到LABEL_20,v16被赋值为从a1+4出获取IP地址,调用sub_91DC执行命令cd /tmp;tftp -gr %s %s &,这会在后台执行一个TFTP下载操作,并把此脚本或配置文件放到/tmp目录下,程序等待文件下载完成并执行,使用sleep每秒检查一次文件是否已经下载完成并检查文件是否存在
![Pasted image 20250120181252.p