PS:写的不全,因为大部分我都会
bg
use post/multi/recon/local_exploit_suggester
show options
set session 1
set showdescription true
ru
提权原理
自定义函数,是数据库功能的一种扩展。用户通过自定义函数可以实现在 MySQL 中无法方便实现的功能,其添加的新函数都可以在 SQL 语句中调用,就像调用本机函数 version () 等方便。
所以udf提权, 是通过mysql的动态链接库文件导入自定义函数, 通过自定义函数实现执行系统命令
前提条件
MySQL 5.5 之前
secure_file_priv
默认是空,这个情况下可以向任意绝对路径写文件。在 MySQL 5.5之后>secure_file_priv
默认是 NULL, 这个情况下不可以写文件, 也就无法使用udf提权了。
针对大型的攻防演练, 往往通过web获取权限是非常艰难的, 钓鱼变成了一个不错的获取权限的手段, 我们通过web打点获得权限往往是service权限, 而钓鱼获得的权限一般是用户权限, 而且针对钓鱼目标系统一般是win7 或者win10,win11这样的个人pc非windows server, 在个人pc上, 初始的用户默认都是本地管理员组, 但是不是administrator用户, 虽然在管理员组但是权限依旧是受限的 ( 比如无法抓取hash ) , 那我们可以通过bypassUAC进行提权
UAC(用户控制)是微软自win7以及后续Windows系统中引入的一种访问控制功能(之后几乎所有的Windows版本都含有了UAC), UAC的主要目的是确保应用程序只限于标准用户用户权限,当需要其他权限时,回弹出提示询问“是否允许以下程序对计算机进行更改?”
取个例子:一些软件的安装,都会弹出一个对话框,询问我们是否允许此程序对计算机进行更改
当进行如下操作时需要经过UAC认证
配置Windows update
增加或者删除用户
改变用户类型
改变UAC设置
安装ActiveX
安装或移除程序
安装设备驱动程序
设置家长控制
查看其他用户文件夹
更改注册表
更改系统保护或者高级系统设置
触发UAC时,系统会创建一个consent.exe进程,该进程通过白名单和用户选择来判断是否创建管理员权限进程。
请求进程将要请求的进程cmdline和进程路径通过LPC接口传递给appinfo和RAiLuanchAdminProcess函数。该函数首先验证路径是否在白名单中,并将结果传递给consent.exe进程,该进程验证请求进程的签名以及发起者的权限是否符合要求后,决定是否弹出UAC窗口让用户确认。这个UAC窗口会创建新的安全桌面,屏蔽之前的界面。同时这个UAC窗口进程时系统权限进程,其他普通进程无法和其进行通信交互。用户确认之后,会调用CreateProcessAsUser函数以管理员身份启动请求的进程
针对bypassUAC的两种方式, 目前主流的有两种, 一种是基于白名单bypassUAC, 一种是基于com接口bypassUAC
whoami /priv
白名单程序是指有一些系统程序是会直接获取管理员权限同时不弹出UAC弹窗,这类程序被称为白名单程序。这类程序会在启动时就静默提升权限,例如,slui.exe、wusa.exe、 taskmgr.exe、eudcedit.exe、eyentvwr.exe, CompMgmtLauncher,exe, rundll32.exe, explorer.exe等
需要满足以下条件
1.程序的manifest标识的配置属性 autoElevate 为true
2.程序不弹出UAC弹窗
3.从注册表里查询Shell\Open\command键值对 ( 用来执行指定的应用 )
关于Shell\open\command 键值对,以它命名的键值对存储的是可执行文件的路径,如果exe 程序运行的候找到该键值对,就会运行该键值对指向的程序,因为白名单中的 exe 运行的时候是默认提升了权限,那么该键值对指向的程序就过了UAC,如果把恶意的exe 写入该键值对,那么当运行白名单中 exe 的时候,就能绕过UAC执行恶意程序
ComputerDefaults.exe ( 设置中的默认应用 ) 就是满足条件的白名单
win + r , 输入 ComputerDefaults.exe 回车
当前用户权限
通过 bypassUAC_ComputerDefaults.exe
bypassUAC_ComputerDefaults.exe "cmd.exe"
bypassUAC_ComputerDefaults.exe "c:\windows\system32\cmd.exe"
bypassUAC_ComputerDefaults.exe "c:\\windows\\system32\\cmd.exe"
因为该方法需要动注册表 , 如果目标环境存在杀软, 基本上都会被拦截, 所以此方法只适用于无杀软的环境 ,实战一般不采用
com组件本质上是二进制文件( dll , exe ), 在windows系统内其调用方法与c++的类相似,程序可以通过被称为 CLSID(全局标识符作为索引在注册表内找到具体的二进制文件
而COM提升名称(COM Elevation Moniker) 技术允许运行在用户账户控制下的应用程序用提升权限的方法来激活COM类,以提升COM接口权限。比如说最常用的ICMLuaUtil接口提供了ShellExec方法来执行命令,创建指定进程。我们可以利用COM提升名称来对提权,之后通过接口调用ShellExec方法来创建指定进程,达到BypassUAC的目的
当前用户权限
通过 bypassUAC_ComputerDefaults.exe
bypass_com.exe "c:\windows\system32\cmd.exe"
注意不能使用\\
因为该方法使用的是com接口, wdf是不拦截的, 实战中推荐该方法
多提一嘴, 不错的项目
https://github.com/hfiref0x/UACME/tree/master
https://github.com/yuyudhn/UACME-bin
UACME常用的几种bypassUAC的方法
Akagi64 23/41/61 常用编号 "执行程序的完整路径"
bypassUAC的cs插件
https://github.com/youcannotseemeagain/ele
inetpub
目录下默认是可以解析asp
的(可写入的话)