域内日志一般以. 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 连接目标主机,进入内网环境进行操作。
这里我们假定已经获得域管理的账号,通过域管理凭据进行导出日志分析。
首先获得域控的日志存储位置
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"
在我们进行查询日志痕迹的时候,必须先了解的是这些登录所用到的认证方式:
windows 默认使用的是 ntml 认证,而域网络中使用的是 kerberos 认证。简单来说,ntlm 是主机与主机直接的交互认证,kerberos 就是由第三方(域控)来认证。
域控只会给域内主机,域内账号下发凭据,因此在使用 ip 进行远程主机定位的操作时,使用的是 ntlm 认证,而使用域名或者机器名进行定位时,使用的是 kerberos 认证。
我们使用 net use 连接远程共享的过程也是一个登录的过程,因此只要有登录,那么就会在日志中有所体现。
使用 dir 和主机直接登录也同样。
日志查询分析发现,主机直接登录使用的是 kerberos 认证,而使用 dir 和 net use 的时候,如果定位远程主机的地方是使用 ip,那么就是使用 ntlm 认证;反之,如果是使用域名或者机器名进行定位,那么就是使用 kerberos 进行定位。
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 与主机名。
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 \\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 \\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 隧道,将自己本地的主机代理进入内网进行操作。
首先使用 hash 传递保证该域外主机拥有足够的权限。
经过测试,hash 传递的操作不会在域控和 socks 隧道客户端主机产生日志痕迹。
指令与操作与 VPN 方式相同。
由于在 socks 环境下,Proxifier 代理工具无法修改 dns 代理,导致无法正确解析域名和机器名,因此只能使用 IP 操作,走的是 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 与主机名。
由于在 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 打开命令(ID:600)和 powershell 关闭命令(ID:403)
因此,在渗透过程中,如果我们获得的是交互式的 shell,可以通过先打开 powershell,再执行命令,那么日志中只会记录打开 powershell 的命令,而不会保存在 powershell 终端中执行的命令的记录。
但是如果在渗透过程中,我们获取到的是 webshell,也就是半交互式的命令窗口,那么只能将命令汇总到一条语句,那么这条命令就会记录到日志中。
当我们使用 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
https://blog.csdn.net/m0_37552052/article/details/82894963
https://blog.csdn.net/travelnight/article/details/122854895
4624 —— 帐户已成功登录
4625 —— 帐户无法登录
1149 —— 用户认证成功