作者名:白昼安全
主页面链接: 主页传送门
创作初心: 以后赚大钱
座右铭: 不要让时代的悲哀成为你的悲哀
专研方向: web安全,后渗透技术
每日鸡汤: 20岁的年纪不该困在爱与不爱里,对吗

在红队行动中在网络中获得最初的立足点是一项耗时的任务。因此,持久性是红队成功运作的关键,这将使团队能够专注于目标,而不会失去与指挥和控制服务器的通信。所以,这就引出了我们今天要讲解的内容——权限维持
当然,权限维持我们也是分为windows和linux来讲,这篇文章就讲解的是windows的权限维持姿势,这里的姿势也只是讲一些常见的,用的比较多的姿势来讲,希望博客的内容能够帮助到大家
一、辅助功能镜像劫持
1、辅助功能介绍
什么是windows的辅助功能呢
就比如说想粘滞键这样的程序,或者放大镜这些都是windows的辅助功能
[1]、粘滞键
程序地址:
粘滞键: c:\windows\system32\sethc.exe
快捷启动方式:
连按五下shift键即可启动对应的程序,并弹出
弹出页面如下

注意:启动粘滞键并不需要用户登录,如下

[2]、放大镜
程序地址:
放大镜:c:\windows\system32\Mageify.exe
快捷启动方式:
"win+",就是win键和+号键一起按
弹出画面如下

[3]、屏幕键盘
程序地址
屏幕键盘:c:\windows\system32\osk.exe
快捷启动方式
CTRL + WIN + O键
弹出页面如下

除此之外还有一些,讲述人,高度比对,筛选键等,这里就不一一介绍了

总而言之,每个辅助功能都对应着一个目标程序,并且有对应的启动方式,最大的特点是他们都不需要用户登录就可以通过快捷方式使用
2、利用方式讲解
[1]、利用条件
1、能连接目标的3389服务,即rdp
2、版本比较老,因为新版本windows多了第四种安全权限,而系统自带的一些文件基本都是这个权限,导致此方法无法利用,而且一些家庭版的windows是没有3389这项服务的,所以使用前还是要探测好
比如windows server 2012这种
像下面这样就是不支持

[2]、利用方式
上面讲了,辅助功能在用户没有登录时就可以通过快捷方式来启动对应其对应的程序,现在我们来模拟一个环境,环境如下
我们此时已经获取到了windows目标的system权限,并且能够连接目标的3389服务,即远程桌面,而我们此时想在目标的机器上做一个权限维持的操作,不让我们好不容易拿到的权限丢失
如果我们生成一个名为sethc.exe的木马程序,将它上传到目标的c:\windows\system32\目录下,把原来那个粘滞键对应的sethc.exe删掉,此时当目标连按5下shift启动的就是我们的木马程序,就可以拿到权限
而我们最开始又能直接远程连接目标的3389端口,每次我们想获取权限时就远程连接目标,连按5下shift就可以执行木马程序,重新拿到我们最开始的system权限
[3]、演示
那我们具体应该怎么操作呢?
这里在 windows server 2003 系统上,以利用 粘滞键为例,给大家演示一下
首先粘滞键对应的程序位置如下:
c:\windows\system32\sethc.exe

将木马上传到该位置,并命名为sethc.exe

kali开启木马的监听

使用3389远程连接目标桌面

不需要登录,只要远程按五下粘滞键即可返回权限

这样就算利用成功了,可以看到还是system的权限
注意:如果我们成功拿到权限,并且目标也存在3389服务,但是并没有开启,那我们就可以使用msf自带的3389开启模块,模块名如下
post/windows/manage/enable_rdp
如下就是成功开启

开启之后就可以继续操作了
二、IFEO,映像劫持
1、原理讲解
原理:
当我们双击运行 程序的时候。系统就会查询 IFEO注册表。如果发现存在完全相同的子键,就会查询对应的子键中包含的" debugger"键值名,如果这个 键值名不为空的情况下 系统则会把 debugger参数指定的程序文件来作为启动的程序
这个IFEO在什么位置呢?如下
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

也就是这里的
Image File Execution Options目录
里面都是你电脑安装过的exe程序
2、运行演示
这里我们以ie浏览器来做一个攻击演示举例,如下
[1]、图形操作
首先查看ie浏览器的exe程序对应的键值

可以看到子键中并不包含"debugger"键值名,所以我们可以给它新建一个,如下

注意:新建时要选择字符串值

可以看到新建时 值为空,此时 不影响
但是如果把 值改为指定的执行程序,那么双击程序就会 运行debugger的值指定的程序,因为debugger指定的程序的优先级比较高。
这里我还没准备木马文件,就以cmd为例,如下

此时我们运行ie浏览器,结果如下

如果我们把debugger的值指定为我们的恶意木马程序,那么每当用户运行ie浏览器时,就会启动我们的恶意木马,反弹权限,达到权限维持的目标
其实这就是一种技术手段,原理类似于辅助功能镜像劫持,只不过改的是注册表里面的东西
[2]、命令操作
也可以用命令来添加,用命令添加注册表项的指令如下
reg add "注册表项路径" /v “键名” /t 键值类型 /d “值名”
下面的命令就是达到运行ie浏览器达到执行我们的木马文件的效果(test.exe就是我们的木马文件)

注意:这个debugger键值如果不删的话他对应的初始程序(比如上面例子中的ie浏览器就相当于损坏了,注意分寸哦)
三、启动项
这个也比较简单,其实跟上面两种的原理差不多,都是替换正常文件为恶意文件
1、文件目录启动项
windows自己带有启动项目录,目录中的文件都是开机自启,位置如下
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
这个就直接把木马文件放到这个目录就可以了,每次用户开机时就会启动我们的恶意文件,这样自然就能达到权限维持的目标
2、注册表的启动项
注册表也有对应的启动项服务目录,将恶意文件添加到启动项服务目录即可,但是有的目录内容改动需要管理员权限,有的不需要,这里也分开介绍
[1]、无需管理员权限
改动里面的内容不需要管理权限,针对于不同的用户。尽量写其他用户 ,服务项目录如下:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
[2]、需要管理员权限
如果改动里面的内容 需要管理员权限,之后什么用户执行,返回的就是什么权限
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
3、在线演示
这里为了方便就直接用注册表的启动项了,同样可以用reg命令来添加值,如下
reg add "注册表项路径" /v “键名” /t 键值类型 /d “值名”
这里的键名随便定(当然为了隐蔽性也可以认真点),键值设置为我们的恶意程序,路径就是上面提到的注册表项中的启动目录

这样目标机器在下一次开机时就会直接运行我们的木马程序了
四、服务
基于服务的攻击,前面我在很多博客中都已经介绍过了,比如修改服务路径,增加启动项服务等等,因为服务都是默默在后台运行,且都是system权限,所以也非常适合我们做权限维持
1、命令操作
[1]、创建服务
新建服务的指令如下
sc create 服务名称 binpath="对应执行程序的路径" start="启动方式" obj="指定权限"
注意:这里的binpath指定的程序为单纯的木马程序时有点问题,有可能会出现闪退,所以一般我都是调用cmd去执行木马程序,所以命令可以更改为如下
sc create 服务名称 binpath="cmd.exe /k 要执行的文件路径" start="启动方式" obj="指定权限"
效果如下

mysql2008就是我创建的服务名
cmd.exe /k c:\windows\test.exe就是该服务对应的指令
auto的启动方式就是自动运行的意思
localsystem意思就是已system权限作为这个服务对应的权限
[2]、启动服务
就是下面这一条命令就可以了
sc start mysql2008
效果如下

成功拿到权限

2、Msf操作
Msf也有对应的自带模块,操作步骤如下
1、meterpreter会话下执行如下命令
run metsvc
效果如下:

2、开启监听
set payload windows/metsvc_bind_tcp
set lport 31337
set rhost 192.168.15.167
run

因为这里是正向的payload,即bind模式,所以开启监听后就可以直接拿到权限了
五、计划任务
这个也没啥好讲的,前面的内网渗透很多操作上都涉及了这种方法,下面我们也来看看windows利用计划任务做权限维持的姿势
在windows实现计划任务主要有schtasks与at二种方式
windows2003是用at方式,win7/2008以上使用schtasks方式
因为windows2003现在用的比较少了,所以这里我们就介绍一下 schtasks方式实现计划任务权限维持,有兴趣的朋友们可以去看看at方式
查看计划任务,指令如下
schtasks

创建计划任务,指令如下
schetasks /create /sc minute /mo 1 /tn "mysqlstart" /tr c:\windows\test.exe /ru system
/create 就是创建计划任务
/sc 指定模式,这里minute代表以分钟为时间模式
/mo 指定时长,我这里设置为1,配合前面的模式就代表每分钟执行1次(设为2就是2分钟执行一次)
/tn 指定计划任务名称,像我这里的名称就是“mysqlstart”
/tr 指定你要启动的目标程序,就指定木马就可以
/ru 指定以哪个权限启动,我这里选择的是system权限

可以看到这里就创建成功了,再来看看监听的位置

可以看到已经拿到shell了,说明我们的木马程序成功被计划任务执行,就算断开后再开启监听还是能拿到权限
六、winlogon用户初始化(慎用)
winlogon.exe是windows中非常重要的进程,在用户 还没有登录系统之前就存在。当用户登录时。winlogon进行负责 将用户配置文件加载到注册表
对应注册表所在目录如下
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
如下,我标记的Userinit对应的路径就是winlogon对应的程序

这个原理就不给大家解释了,因为涉及了汇编,内存之类的东西,比较复杂(主要是我也不太懂,渗透的时候会用就行)
同样Userinit的键值对也可以被修改,如下

可以看到它本来指向的应用程序是
c:\windows\system32\Userinit.exe
如果我们把它执行的应用程序替换为我们的木马文件,如下

修改后,此时在攻击端(kali)开启监听

再控制目标机器重启,此时的监听端如下

已经成功拿到了目标权限,但这个方法要慎用
注意注意:为什么说这个方法要 慎用呢,因为修改Userinit键对应的值后,目标机器能够开机,能够正常出现密码输入框,但是啊但是,虽然你拿到了权限,但是目标输入密码后目标机器会进入 无限黑屏的状态,除非你用拿到的权限修改刚才的Userinit键对应的值为原来的值,就是改回原来的状态,此时才能成功登录,不然就黑屏一辈子或者拿去重装吧,所以一定要 慎用!慎用!慎用!
七、文件关联
1、原理讲解
文件关联就是将一种类型的文件与一个可以打开他的程序建立起一种关系
这个是什么意思呢?我们就以简单的记事本来举例,右键桌面新建一个记事本,当双击时就会弹出一个空白的记事本

因为这是一个txt文件,我们也可以使用assoc命令来查看txt后缀指向的一个文件类型,指令如下
assoc .txt

可以看到指向的是textfile文件类型
再来查看一下这个文件类型是以什么方式打开,指令如下
ftype testfile

就说明txtfile文件打开时是用c:\windows\syswow64\notepad.exe这个程序打开的
也就相当于txtfile文件与notepad这个程序关联,打开textfile就会用notepad来进行打开,所以肯定是执行了这个notepad程序的
既然执行了这个程序,那我们以攻击的思路来想,如果我们把textfile文件对应的启动程序改为我们的木马程序,那是不是每次用户打开txt文件时,系统就会执行我们设置好的木马呢?所以关联文件来做权限维持也就是这个原理
2、操作演示
那么例如上面这种txtfile与notepad程序的关联关系在哪修改呢?同样是在我们的注册表里面
例如textfile关联文件的注册表项目录如下
计算机\HKEY_CLASSES_ROOT\txtfile\shell\open\command

可以看到这个默认键值中的值就是txtfile所关联的启动程序,每次运行txtfile文件就是用这个值对应的应用打开
现在是notepad.exe,我们把它改为我们的恶意文件
(为了方便这里的恶意文件我们直接用cmd代替了,换成木马文件也是同理)

修改后我们再尝试打开txt文件,效果如下

可以看到双击txt文件直接就打开了cmd,如果是木马文件就会直接执行了,并反弹权限,达到权限维持的目的
3、拓展说明
这种利用方式如果使用txt来试关联文件,就很明显有点,因为用户打不开txt文件,一看就知道有问题,可以改一些冷门点的后缀,比如xml之类的,这样就会隐蔽很多
八、其他
当然提权的姿势不可能只有这几个,我这里演示的都是比较常用的,平时渗透中用的比较多的,一些冷门的,复杂的姿势感兴趣的同学们可以自己下去研究一下