Metasploit内网连接

发表于:2016-2-04 10:39

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:蒂诺隆基    来源:51Testing软件测试网采编

  0x00 问题描述
  在渗透测试时,metasploit往往作为后渗透工具,(因为远程溢出越来越少).我一般都是在获得一个webshell后,来使用metasploit进行信息采集,或者内网扫描等操作。而大多数站点都是内网ip。而本屌丝自己的机器也是内网ip,那么两个内网ip怎么建立连接?
  0x01 解决办法
  以前总是使用lcx做端口转发连接站点的3389,是否也可以用lcx将metasploit和站点两个内网ip进行连接?发现是可行的。具体操作步骤如下:
  网络环境:
  Metasploit:192.168.7.84
  目标站点:   192.168.244.148
  公网ip:   192.168.7.89
  我的目的是将244.148 与7.84进行连接。大概过程如下:
  1.在公网ip机器上使用lcx建立监听两个端口600、500
  2.在metasploit中使用exploit/multi/handler模块,利用payload windows/meterpreter/bind_tcp 连接公网ip的600端口。(这相当于在公网ip上执行了windows/meterpreter/bind_tcp模块,绑定的端口是500)
  3.制作一个msfpayload 模块选择windows/meterpreter/reverse_tcp,连接公网ip的500端口。这样可以将两个机器进行连接。
  具体测试如下:
  1)在公网ip上监听两个端口
  2) 在metasploit调用exploit/multi/handler 模块,这里使用资源加载方法,个人理解相当于windows的批处理功能。将要执行的命令存入文件,然后可以使用msf的resource功能加载,则里面的命令都会顺序执行。
  其中/tmp/rc/handle.rc中内容如下
  然后执行exploit命令,开始执行
  则此时公网连接状态
  等待客户端进行连接。
  现在使用msfpayload生成windows/meterpreter/reverse_tcp的payload
  命令行下查看windows/meterpreter/reverse_tcp 需要的选项
  需要两个参数LHOST和LPORT,分别是要连接的ip和端口,我这里需要连接的远程ip是192.168.7.89,端口是500
  可以看到响应设置,这里有一个X,看一下表示的意思
  X其实表示的是exe的X,msfpayload支持很多种语言如P表示Perl,N表示Python等。
  生成了payload需要传到目标站点上
  在目标站点上执行payload,则公网的lcx开始转发数据
  获得一个meterpreter控制台
  可以开始进行执行命令了。
  如果你觉得命令行用着不爽,可以直接使用run vnc命令,获得一个gui操作。真牛叉。
  初次接触msf最令人兴奋的莫过于跳板功能,通过msf添加路由功能,可以直接使用msf对本来不能访问的内网进行连接(建立访问连接是渗透的第一步),一旦建立连接那么就是想干什么都可以真是强大无比。
  使用meterpreter的autoroute功能,即可完成该操作。首先使用get_local_subnets脚本获得受控系统本地子网,然后使用autoroute脚本添加路由。这样操作后就会看到添加的路由表,网关是session 3即payload程序。如果我在msf指定某个模块的ip地址是192.168.244.*,则会通过session3 网关进行转发,访问到目标ip.
  跟建立网络连接的还有一个经常使用的,就是网络映射功能,meterpreter中有一个getgui脚本(我的bt下脚本存放路径/opt/metasploit/msf3/scripts/meterpreter里面有很多写好的脚本,如下图所示)
  在《metasploit渗透测试指南》上说,getgui可以将远程的3389映射到本地的指定端口,功能,这就是一个网络映射过程。
  看其使用方法,很简单,这里我不添加用户名和密码,直接建立连接。运行run getgui -e -f 8080
  执行后建立了连接
  可以建立连接,转发成功了。
  但是在渗透测试中需求,总是在变化的,以前也有过需求,将内网的某个端口映射出来,进行连接,是否也可以做到?带着这个问题,我看了一下getgui的实现代码。
  我没有学过ruby,但是看了这样代码,很容易明白,刚才执行的run getgui -e -f 8080时,则含有-f则frwrd变量设置为true。并且保存-f后面的端口到变量lport中,而下面当frwrd为true,则会调用portfwd add -L 0.0.0.0 -l #{lport} -p 3389 -r 127.0.0.1 将远程3389(相对于payload即是127.0.0.1)映射到本地的指定的端口。
  可见建立网络映射只需要这条命令即可。搜索该命令所在文件:
  发现是在/opt/metasploit/msf3/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb中定义的。
  应该是该命令的具体实现。从参数中很容易看出来。各个参数的含义。
  可以看到支持很多命令add、delete、list等。
  因此,照猫画虎。如果我想将远程主机的10081端口映射到本地的10081端口,那怎么实现?
  只需要一句话
  client.run_cmd("portfwd add -L 0.0.0.0 -l 10081 -p 10081 -r 127.0.0.1")
  在/opt/metasploit/msf3/scripts/meterpreter目录下创建changeport.rb
  运行一下创建的脚本
  看一下端口状态:
  映射已经成功。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号