域内日志分析总结
域内日志一般以.evtx结尾,因此我们需要搜索域内日志可以使用dir指令
dir/s/b *.evtx
/s:表示递归搜索,包括子目录。
/b:表示以简洁模式显示结果,只显示文件路径而不包括其他信息。
这里我们可以直接使用logparser工具导出域内的日志信息。(在域控主机中)
logparser工具采用的是SQL查询的方式进行过滤。
使用下面的指令可以通过strings列和eventid列过滤出域内用户的登录行为。
LogParser.exe -i:evt -o:csv "SELECT RecordNumber,TimeWritten,EventID,Strings,Message into C:\log5.csv FROM Security where EventID='4624' and Strings LIKE '%|Kerberos|%|%.%.%.%|%' and Strings not LIKE '%|%$|%'"
-i:输入文件类型 -o:输出文件类型
在正常的域渗透过程中,我们直接拿到域控,并且在域控的主机上进行操作导出日志一般的不现实的,一般采用下面的三种方式导出域控的日志或者是指定成员主机的日志进行分析:
1.VPN的方式;
2.通过搭建socks隧道的方式;
3.通过远程木马的方式;
通过VPN的方式查询日志
一般来说,通过VPN连接目标主机,进入内网环境进行操作。
这里我们假定已经获得域管理的账号,通过域管理凭据进行导出日志分析。
1.查询主机的登录记录
首先获得域控的日志存储位置
dir /s/b \\10.10.10.10\c$\security.evtx
通过copy指令可以将域控日志文件复制到本地。
copy \\10.10.10.10\c$\Windows\System32\winevt\Logs\ C:\Users\admins\Desktop\log
由于日志文件为隐藏文件,因此我们不能直接通过logparser导出所有.evtx文件(无法搜索到)
但是,可以使用logparser进行远程导出部分日志
LogParser.exe -i:EVT -o:CSV "SELECT * INTO C:\1.csv FROM \\RemoteServer\Security"
LogParser.exe -i:EVT -o:CSV "SELECT * INTO C:\1.csv FROM \\10.10.10.10\Security"
2.查询在连接过程中日志的痕迹
在我们进行查询日志痕迹的时候,必须先了解的是这些登录所用到的认证方式:
windows默认使用的是ntml认证,而域网络中使用的是kerberos认证。简单来说,ntlm是主机与主机直接的交互认证,kerberos就是由第三方(域控)来认证。
域控只会给域内主机,域内账号下发凭据,因此在使用ip进行远程主机定位的操作时,使用的是ntlm认证,而使用域名或者机器名进行定位时,使用的是kerberos认证。
我们使用net use连接远程共享的过程也是一个登录的过程,因此只要有登录,那么就会在日志中有所体现。
使用dir和主机直接登录也同样。
日志查询分析发现,主机直接登录使用的是kerberos认证,而使用dir和net use的时候,如果定位远程主机的地方是使用ip,那么就是使用ntlm认证;反之,如果是使用域名或者机器名进行定位,那么就是使用kerberos进行定位。
成员主机net use连接域控主机
NTLM认证数据包
net use \\10.10.10.10\ipc$
通过指令,我们可以知道,这一条指令的登录应该是使用ntlm认证。
经过多次测试,发现如果是一个成员主机使用上面语句连接域控主机,会在域控主机上面留下如下记录。
第一个包是验证连接域控主机的账号的凭证
第二个包是为该连接分配权限
第三个包是登录成功的数据包
在第三个包中,可以看到该成员主机的IP地址,机器名等信息。
S-1-0-0|-|-|0x0|S-1-5-21-3315874494-179465980-3412869843-1115|admins|VVVV1|0x889d1b|3|NtLmSsp |NTLM|WEB-2003|{00000000-0000-0000-0000-000000000000}|-|NTLM V1|128|0x0|-|10.10.10.3|1280|%%1833|-|-|-|%%1843|0x0|%%1842
因此只需要远程导出第三个登录成功的数据包,并且修改过滤规则就可以获得日志中通过net use连接域控的主机信息。
使用logParser工具进行导出日志文件:
C:\Users\admins\Desktop\LogParser.exe -i:EVT -o:CSV "SELECT * INTO C:\Users\admins\Desktop\log\1.csv FROM \\10.10.10.10\Security where strings like '%|NTLM|%|%.%.%.%|%'"
通过strings字段,我们可以看到连接域控的主机的ip与主机名。
kerberos认证数据包
net use \\ad-2016\ipc$
经过多次测试,发现如果是一个成员主机使用上面语句连接域控主机,并且使用kerberos认证会在域控主机上面留下如下记录。
因此只需要远程导出第五个登录成功的数据包,并且修改过滤规则就可以获得日志中通过net use连接域控的主机信息。
S-1-0-0|-|-|0x0|S-1-5-21-3315874494-179465980-3412869843-500|Administrator|VVVV1.COM|0x7c3dbeb9|3|Kerberos|Kerberos||{CE15C23A-E7E3-3FC1-4A75-FDF339BEC822}|-|-|0|0x0|-|10.10.10.12|50364|%%1840|-|-|-|%%1843|0x0|%%1842
使用logParser工具进行导出日志文件:
C:\Users\admins\Desktop\LogParser.exe -i:EVT -o:CSV "SELECT * INTO C:\Users\admins\Desktop\log\1.csv FROM \\10.10.10.10\Security where strings like '%|Kerberos|%|%.%.%.%|%' and strings not like '%|%$|%'"
通过strings字段,我们可以看到连接域控的主机的ip与账户。
成员主机dir连接域控主机
NTLM认证数据包
dir \\10.10.10.10\c$
原理与net use相同,直接使用logparser导出即可。
C:\Users\admins\Desktop\LogParser.exe -i:EVT -o:CSV "SELECT * INTO C:\Users\admins\Desktop\log\1.csv FROM \\10.10.10.10\Security where strings like '%|NTLM|%|%.%.%.%|%'"
kerberos认证数据包
dir \\ad-2016\c$
原理与net use相同,直接使用logparser导出即可。
C:\Users\admins\Desktop\LogParser.exe -i:EVT -o:CSV "SELECT * INTO C:\Users\admins\Desktop\log\1.csv FROM \\10.10.10.10\Security where strings like '%|Kerberos|%|%.%.%.%|%' and strings not like '%|%$|%'"
成员主机连接成员主机
dir \\10.10.10.10\c$
dir \\web-2003\c$
第一个方式,也就是ntlm认证的方式是只在域控主机的日志中留下这一条日志痕迹,几乎没有什么用,主要的痕迹在被连接的主机的日志中体现。
第二个方式,也就是kerberos认证的方式,会在域控主机留下两条日志:请求TGT和请求ST日志。
查找日志的流程也是与上文相似,这里就不多叙述了。
成员主机自己登录
只有使用域内用户的账户进行登录的用户才会有痕迹遗留在域控主机上,如果使用本地账户进行登录,只会在本机的日志中有所体现。
如果使用域内用户进行登录的话,在域控中的体现为使用kerberos进行认证,与上文中的kerberos认证数据包相同。
使用logParser工具进行导出日志文件:
C:\Users\admins\Desktop\LogParser.exe -i:EVT -o:CSV "SELECT * INTO C:\Users\admins\Desktop\log\1.csv FROM \\10.10.10.10\Security where strings like '%|Kerberos|%|%.%.%.%|%' and strings not like '%|%$|%'"
通过socks代理的方式查询日志
一般来说,当我们拿下一台边界主机,我们会搭建socks隧道,将自己本地的主机代理进入内网进行操作。
首先使用hash传递保证该域外主机拥有足够的权限。
经过测试,hash传递的操作不会在域控和socks隧道客户端主机产生日志痕迹。
1.查询主机的登录记录
指令与操作与VPN方式相同。
2.查询在连接过程中日志的痕迹
远程主机net use连接域控主机
由于在socks环境下,Proxifier代理工具无法修改dns代理,导致无法正确解析域名和机器名,因此只能使用IP操作,走的是NTLM认证。
NTLM认证数据包
net use \\10.10.10.10\ipc$
通过指令,我们可以知道,这一条指令的登录应该是使用ntlm认证。
经过多次测试,发现如果是一个成员主机使用上面语句连接域控主机,会在域控主机上面留下如下记录。
第一个包是验证连接域控主机的账号的凭证
第二个包是为该连接分配权限
第三个包是登录成功的数据包
在第三个包中,可以看到该成员主机的IP地址,机器名等信息。
S-1-0-0|-|-|0x0|S-1-5-21-3315874494-179465980-3412869843-1115|admins|VVVV1|0x889d1b|3|NtLmSsp |NTLM|WEB-2003|{00000000-0000-0000-0000-000000000000}|-|NTLM V1|128|0x0|-|10.10.10.3|1280|%%1833|-|-|-|%%1843|0x0|%%1842
因此只需要远程导出第三个登录成功的数据包,并且修改过滤规则就可以获得日志中通过net use连接域控的主机信息。
使用logParser工具进行导出日志文件:
C:\Users\admins\Desktop\LogParser.exe -i:EVT -o:CSV "SELECT * INTO C:\Users\admins\Desktop\log\1.csv FROM \\10.10.10.10\Security where strings like '%|NTLM|%|%.%.%.%|%'"
通过strings字段,我们可以看到连接域控的主机的ip与主机名。
远程dir连接域控主机
NTLM认证数据包
由于在socks环境下,Proxifier代理工具无法修改dns代理,导致无法正确解析域名和机器名,因此只能使用IP操作,走的是NTLM认证。
dir \\10.10.10.10\c$
原理与net use相同,直接使用logparser导出即可。
C:\Users\admins\Desktop\LogParser.exe -i:EVT -o:CSV "SELECT * INTO C:\Users\admins\Desktop\log\1.csv FROM \\10.10.10.10\Security where strings like '%|NTLM|%|%.%.%.%|%'"
远程主机连接成员主机
dir \\10.10.10.10\c$
两个方式都是指在域控主机的日志中留下这一条日志痕迹,几乎没有什么用,主要的痕迹在被连接的主机的日志中体现。
查找日志的流程也是与上文相似,这里就不多叙述了。
PowerShell日志
powershell日志一般会直接写入系统日志
但是,特殊的是,在正常配置情况下,powershell并不会保存其执行的命令日志,而只会保存powershell打开命令(ID:600)和powershell关闭命令(ID:403)
因此,在渗透过程中,如果我们获得的是交互式的shell,可以通过先打开powershell,再执行命令,那么日志中只会记录打开powershell的命令,而不会保存在powershell终端中执行的命令的记录。
但是如果在渗透过程中,我们获取到的是webshell,也就是半交互式的命令窗口,那么只能将命令汇总到一条语句,那么这条命令就会记录到日志中。
PowerShell脚本使用
当我们使用PowerShell脚本执行命令的时候,首先需要执行一条命令
Powershell -ExecutionPolicy Bypass
用于绕过 PowerShell 执行策略。PowerShell 默认情况下会启用执行策略,限制脚本的执行权限。
执行策略是一种安全机制,用于控制是否允许执行脚本文件以及来自不受信任来源的脚本。默认情况下,PowerShell 的执行策略设置为 "Restricted" ,即不允许执行任何脚本文件。
通过在 PowerShell 命令行中使用 "Powershell -ExecutionPolicy Bypass",可以绕过执行策略限制,允许执行脚本文件。这将临时更改执行策略为 "Bypass",允许运行所有脚本。
假如我们即将导入的ps1脚本为SharpHound.ps1
Import-Module ./SharpHound.ps1
此时SharpHound模块已经被加载进入当前会话中
查看当前会话中所有已加载的模块
Get-Module
获取 SharpHound 模块中的所有命令列表
Get-Command -Module SharpHound
查看SharpHound使用帮助
Get-Help SharpHound
get-help Invoke-BloodHound -full
删除日志
如果在渗透环境中,删除所有日志不仅不能掩盖我们的痕迹,反而会使我们的痕迹更加明显。
因此我们只能采取删除单条日志的方法,但是windows并没有提供,或者说不允许删除单条日志的操作,因此,只能使用其他的方法。
工具使用:https://github.com/3gstudent/Eventlogedit-evtx--Evolution
https://github.com/QAX-A-Team/EventCleaner
清除RDP登录痕迹
https://blog.csdn.net/m0_37552052/article/details/82894963
https://blog.csdn.net/travelnight/article/details/122854895
- 事件ID:1149:记录了哪些源IP利用RDP方式成功登陆到了本机。
- 注册表:HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\
此路径记录了当前主机曾经登录过了哪些服务器。 - 事件ID:5156日志:可以看到本机在什么时候访问了其他服务器的3389端口。
4624 —— 帐户已成功登录
4625 —— 帐户无法登录
1149 —— 用户认证成功