一、操作目的和应用场景
本文演示如何在思科网络设备(如路由器)上运行TCL脚本,实现从路由器到内网服务器的端口转发。
TCL全名为Tool Command Language,主要用于嵌入式系统,功能强大,易于使用,主要用于完成自动化任务。
从安全角度看,TCL脚本的一个重要功能就是能够创建端口监听,这一点是可以被攻击者利用的。当在思科路由器上使用TCL脚本时,通常是将脚本文件保存在TFTP服务器上,在需要执行的时候下载执行。因此,攻击者若攻破TFTP服务器,将恶意代码插入到正常脚本中,那么在下一次执行该文件的时候,恶意代码也会被执行。
二、平台及工具版本
三、操作步骤
(一)实验环境准备
安装过程略。
GNS3中创建项目,导入cisco 3660 IOS镜像,之后导入windows xp虚拟机和centos 8虚拟机。按照下面的方式连接设备并分别启动:
//进入全局配置模式
configure terminal
//配置外网口
int f0/0
//启用接口
no shut
//配置IP地址
ip address 10.10.10.10 255.255.255.0
//配置内网口
int f0/1
no shut
ip address 20.20.20.20 255.255.255.0
//回到特权模式
end
3、windows xp虚拟机配置IP地址并安装tftp服务软件
虚拟机配置固定IP地址:10.10.10.128/24,不指定网关。
//测试连通性
ping 10.10.10.20
从下面的地址下载32位版本的安装程序,拖入xp虚拟机中运行。
https://bitbucket.org/phjounin/tftpd64/downloads/
tftp服务程序启动后,监听本地的UDP 69端口。
IP地址配置:
测试连通性:
可连接路由器。
注意,由于windows xp虚拟机和centos 8虚拟机中都没有指定网关,因此xp和centos系统之间网络是不通的。
(二)通过tcl实现端口转发
地址:https://github.com/mohemiv/TCLtools
将脚本文件tclproxy.tcl保存在windows xp虚拟机的tftpd服务程序的工作目录中。
//进入tcl shell命令行
tclsh
//查看tcl版本
puts $tcl_version
puts $tcl_patchLevel
版本为8.3.4
//进入全局配置模式
configure terminal
//指定系统最小的可用内存(若系统内存低于此值,则tcl会终止脚本的运行)
scripting tcl low-memory 5242880
//回到特权模式
end
//将tcl脚本从tftp服务器下载到路由器
copy tftp://10.10.10.128/tclproxy.tcl flash:/
下载成功。
//运行tclproxy脚本,将访问路由器本地5555端口的数据包转发到centos 8系统的ssh服务端口
tclsh tclproxy.tcl -L 5555:20.20.20.128:22
开始监听了。
在攻击者所控制的windows xp虚拟机中运行securecrt,建立快速连接,指定连接到路由器外网口的IP地址及tclproxy脚本所监听的端口。
点击连接按钮,攻击者成功登录了内网服务器,说明端口转发成功:
在centos 8虚拟机上抓包可以看到,访问本地ssh服务端口的数据包源地址为路由器的内网口IP,这说明tclproxy在转发数据包的时候进行了源地址转换。
在路由器和xp虚拟机之间的链路上抓包,可以看到,源地址是路由器的外网口地址。这说明tclproxy在将内网服务器的回应返回给xp虚拟机的时候,将数据包的源地址改成了路由器外网口的IP地址:
正是由于tclproxy在转发数据包时修改了源地址,才能在本不连通的两台主机之间建立连接,这也体现了该软件名称中proxy的含义。
四、总结
本文以cisco设备举例,说明通过tcl脚本实现端口转发的方法。实际上H3C、juniper等设备也是支持tcl脚本的,因此应该也可以实现这个功能,请大家自行验证。